워게임 문제로 공부하다보면 자신의 서버로 무언가 요청을 한다던지 db로 원격접속을 시도해야한다던지 그런 유형들의 문제가 있다.
동아리실에서 문제를 풀 때는 네트워크 장비에 의해 요청이 하나같이 차단당해서 외부에 있는 서버가 간절했다.
포트포워딩이 가능하거나 공인아이피를 할당받은 서버가 있다면 mysql 원격접속할 수 있는 계정을 하나 만들어보자.
포트포워딩의 경우 mysql 원격접속 포트 3306(디폴트가 3306. 설정을 건드렸다면 수정한 포트 번호)포트와 외부에서 사용할 포트를 연결 해두자.
-
먼저 원격접속을 허용하도록 mysql설정파일을 수정한다.
/etc/mysql/mysql.conf.d/mysqld.cnf 파일에서
bind-address = 127.0.0.1을 주석처리하고
bind-address = 0.0.0.0을 추가한다.
사용하는 mysql 버전 등에 따라 /etc/mysql/my.cnf에 있을수도 있다.
이후 mysql 서비스를 재시작한다.
service mysql restart
재시작에 성공했다면 mysql에 접근한다.
create database [db명];
쿼리을 통해 사용할 db를 생성한다.
select host,user from mysql.user;
접속 중인 db에서 사용중인 계정을 본다.
host가 전부 localhost로 되어있어 외부접속이 안되는 계정들이다.
외부에서 접근 할 수 있는 계정을 하나 만들어두도록하자.
root로 만들어도 좋지만, 해당 mysql에 다른 서비스와 연동시켜서 사용하고 있는 게 있다면
보안상 권한이 제한된 워게임용 외부접속 계정을 만들어봐도 좋다.
insert into mysql.user (host,user,authentication_string,ssl_cipher, x509_issuer, x509_subject) values ('%','[user명]', password('[password 명]'),'','','');
쿼리를 통해 계정을 하나 생성한다. host의 %는 *애스터리스크와 같은 의미이다.
mysql 버전별로 계정을 생성하는 쿼리가 다르다. 5.7이상으로 password 컬럼의 이름이 authentication_string으로 바뀐다거나, ssl_cipher의 디폴트가 없어서 insert에 선언을 해줘야한다거나 하니 이 부분은 본인 mysql 버전에 맞는 쿼리를 사용하자.
계정을 만들어줬다면 SHOW GRANTS FOR 'user명'@'%'; 를 통해 권한을 확인 할 수 있다.
만약 mysql.user에는 계정이 올라와있는데 에러가 뜬다면 FLUSH PRIVILEGES; 쿼리 후에 다시 확인해보자.
권한이 아무것도 없는 것을 확인하면 이제 권한을 주도록하자.
GRANT ALL PRIVILEGES ON *.* TO 'user명'@'%';
은 'user명'@'%'에게 *.*(모든 db, 모든 table)에 ALL PRIVILEGES(모든 권한)을 부여하는 쿼리다.
권한은 https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html 여기서 확인 가능하다.
권한은 버전별로 다를수 있다.
그림에서는 grant select, insert on limedb.* to 'limelee'@'%'; 쿼리를 통해
limedb의 모든 table에 select, insert 권한만 허용했다.
권한이 추가된것을 확인한 후에 FLUSH PRIVILEGES; 를 통해 권한을 적용한다.
이제 권한이 잘 적용되었는지 확인하기 위해 추가한 계정으로 접속한 뒤 databases를 열람해본다.
열람권한은 limedb만 허용했으므로 limedb만 보이는 것을 확인 할 수 있다.
create 권한이 없으므로 table을 생성할 수 없다.
그 외에도 file 권한이 없어 load_file, into outfile등의 명령어도 사용할 수 없다.
db 외부 접속하는 문제도 잘 풀린다.
'Server' 카테고리의 다른 글
SFTP Chroot 감옥 사용자 생성 (0) | 2024.04.01 |
---|---|
Github Actions로 push 이벤트 발생 시 내 서버로 배포 자동화하기 (0) | 2023.09.05 |
아파치 HTTP 인증(Basic/Digest authentication) 적용 (0) | 2022.04.28 |
아파치 보안 설정 (0) | 2018.04.11 |