[여기보기]는 “여기서 보안의 기본을 챙기고 가자”의 약자로, 개발 과정에서 꼭 최소한으로 챙기면 좋을 보안 기초 설정을 앞으로 하나씩 공유할 예정입니다. 기초 내용이 주를 이루겠지만, 혹시라도 빼먹고 계신 것이 없는지 가끔 한 번씩 둘러봐 주세요.
안녕하세요, 넷마블 보안실 보안개발팀 김용현입니다.
작업 중 대량 파일이나 대용량 파일을 서버 안팎으로 복사해야 하는 상황이 생겼을 때, 가장 쉽게 떠올리는 방법 중 하나가 ftp
입니다. 다만, 파일을 복사하는 상황 자체가 제한적이고, 설치하는 FTP에 따라서 배포 라이선스가 다를 수 있고, 각자 선호하는 FTP가 다름으로 인해, 리눅스 기본 설치만으로는 FTP 데몬이 같이 실행되지 않습니다. 각자 기호나 조건에 맞춰 vsFTP
나 ProFTP
를 설치해서 사용하죠.
이때 FTP 프로토콜의 보안성을 위해 SFTP 방식을 사용한다는 이외에, 함께 챙기면 좋을 부분을 가볍게 살펴보겠습니다.
쓰지 않는다면, 서비스 비활성화
FTP는 SCP와 달리 FTP 서비스 자체 데몬을 기반으로 동작합니다. (SCP는 SSH 데몬 기반으로 동작하므로, SSH 데몬을 제어해서 관리해야 합니다.) 다소 귀찮을 수 있지만 FTP를 써야 하는 타이밍에만 선별적으로 FTP 데몬 서비스를 활성화해서 쓰거나, 상시로 동작해야 할 필요가 없다면 서비스를 비활성화해 두는 것도 좋습니다.
조치방안
vsFTP
나 ProFTP
서비스가 이미 동작 중인지 확인합니다. (보통 프로토콜과 포트 충돌을 방지하기 위해 둘을 동시에 쓰지는 않습니다.)
$ ps -ef | egrep "vsftp|proftpd"
만약 서비스 중인 데몬이 보인다면, 해당 서비스를 중지합니다.
$ service vsftpd stop
$ service proftpd stop
보통 시스템 리부팅시 자동으로 시작하도록 최초 설치 때 설정되므로, 시작 프로그램으로 등록된 부분도 함께 제거합니다.
$ /etc/init.d/vsftpd stop
$ /etc/init.d/proftp stop
익명 접속은 비활성화
SFTP 방식을 사용한다고 하더라도 익명(Anonymous) 접속을 허용해 둔다면, 로컬 익스플로잇(Local Exploit) 공격으로부터 자유로워질 수 없습니다.
파일 전송을 위해서는 원칙적으로 상대방 컴퓨터를 사용할 수 있는 계정이 있어야 하지만, 종종 개발 과정에서 편의를 위해, 익명 FTP(Anonymous FTP)를 허용해 둘 때가 있습니다. 익명 FTP가 허용된 상태에서는 누구든지 계정이 없어도 anonymous
또는 ftp
라는 로그인 이름과 임의 비밀번호를 사용해 FTP를 실행해 접근할 수 있습니다. FTP 특성상 디렉터리 쓰기 권한까지 있을 가능성이 매우 높으므로 무방비 노출에 가까운 상태라 봐야 합니다.
조치방안
일반 FTP와 ProFTP에서는 사용자로 등록된 anonymous
나 ftp
계정만 제거하면 익명 FTP 기능을 무력화할 수 있습니다.
$ cat /etc/passwd | egrep "anonymous|ftp"
$ userdel ftp
$ userdel anonymous
vsFTP라면, 설정 파일에서 익명 FTP 접속 설정을 변경할 수 있습니다.
$ vi /etc/vsftpd.conf
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
기본 설정값이 “NO”이므로, “YES”로 바뀌어 있다거나 주석 처리가 돼 있다면 기본 설정값으로 변경하면 됩니다.
ftp 계정의 셸 접근 제한
FTP 서비스를 설치할 때 기본으로 생성되는 ftp
계정은 로그인이 필요하지 않은 계정입니다. 로그인이 필요 없는 계정에 셸(Shell) 접속 권한을 부여할 경우, 공격자에게 계정 노출 시 시스템 접근을 허용하게 됩니다. 그러므로 ftp
계정의 셸 접속 권한을 제한해 시스템에 접근하는 것을 차단해야 합니다.
조치 방안
계정을 조회해 보면, 주로 /sbin/nologin
으로 설정돼 있습니다. 셸 접속을 막기 위해서는 /sbin/nologin
과 /bin/false
중 하나를 선택해야 합니다.
/sbin/nologin
은 사용자가 해당 계정으로 로그인하지 못하도록 하면서도, 계정의 서비스나 작업 등 다른 시스템 자원을 이용할 수 있도록 허용합니다. 그래서 보통 시스템 계정이나 데몬(daemon) 계정일 때 사용합니다. 반면, /bin/false
는 해당 계정으로 로그인하지 못하게 하고, 다른 시스템 자원도 사용할 수 없도록 막습니다. 그래서 일반 사용자 계정에서 사용합니다.
ftp
계정의 셸 접근을 제한할 때는 FTP 서비스 비활성화 설정을 위해 각자 만든 정책에 맞춰서 둘 중 하나를 선택하면 됩니다. 만약 FTP 데몬을 계속 켜두고 쓰기로 했다면 /sbin/nologin
으로, FTP 데몬을 비활성화하거나 FTP 서비스 자체를 제거한다면 /bin/false
를 쓰시면 됩니다.
$ cat /etc/passwd | grep ftp
$ usermod -s /bin/false ftp
$ usermod -s /sbin/nolongin ftp
ftpusers 파일 설정
ftpusers
파일은 FTP 접근 제어 설정 파일입니다. 이 속에 등록한 계정은 FTP에 접속할 수 없습니다. 즉, 파일 설정 내용과 파일 자체의 소유자와 수정 권한을 모두 점검해야 합니다. FTP 사용을 허용하지 않도록 목록 설정을 넣었더라도 파일 수정 권한이 열려 있다면, 설정 파일을 직접 수정으로 서버 침해사고를 유발할 수 있습니다.
조치 방안
먼저, ftpusers
파일은 소유자가 root
인지, 권한은 640 이하인지 확인해야 합니다.
$ ls -l /etc/ftpusers
혹시라도, 소유자와 권한이 다르게 나와 있다면 아래 명령어로 소유권과 권한을 변경하시면 됩니다.
$ chown root. /etc/ftpusers
$ chmod 640 /etc/ftpusers
ftpusers 설정 변경
ftpusers
파일 내용은 편집기로 손쉽게 수정할 수 있습니다. 또한 vsFTP 데몬을 재시작하지 않아도, 접속 계정 설정을 입력한 내용 자체가 바로 반영 반영됩니다.
vsFTP userlist_enable
vsFTP를 사용 중일 때에는 설정 파일인 vsftpd.conf
속에 userlist_enable
값도 함께 확인해야 합니다. userlist_enable
값이 “NO”라면, ftpusers
파일에 등록한 계정들만 접속을 차단합니다. 그래서 vsftpd.ftpusers
와 ftpusers
파일의 소유자와 권한만 확인하면 됩니다.
반면, userlist_enable
값이 “YES”라면, ftpusers
파일 외에 user_list
파일에 등록된 모든 계정의 접속을 차단합니다. 그래서 vsftpd.ftpusers
와 ftpusers
파일의 소유자와 권한 외에 vsftpd.user_list
와 user_list
파일까지 함께 확인해야 합니다.
ProFTP의 설정 파일은
/etc/proftpd.conf
입니다. 설정 파일을 수정하면, ProFTP 데몬을 재시작해야 서비스에 반영됩니다.
쓸 것인지 말 것인지부터 정하자
SSH 프로토콜을 사용하는 FTP 방식인 SFTP 사용은 이제 너무나도 당연한 시대를 살고 있고, 배포 파이프라인 과정에서 파일 전송은 뺄 수 없는 필수 요소입니다.
파일 자체를 전송할 목적이라면 꼭 FTP(SFTP 포함)가 아니어도 대안이 있습니다. SCP나 Git도 있고, Rsync, NFS, SMB도 있으니까요. 즉, 각자 여건에 맞춰서 FTP 프로토콜을 쓸 것인지 말 것인지부터 정한 후에야, 서비스 비활성화나 설정값을 정할 수 있습니다. vsFTP
를 쓸 것인지 ProFTP
를 쓸 것인지도 정해야 하니까요.
내가 선택해야 하는 파일 전송 방식이 무엇인지 떠올려 보고, 만약 FTP 방식이었다면 한 번쯤 위 내용을 확인해 보시는 것은 어떨까요? 여러분의 리눅스 서버에 평화와 안녕을 기원하며 글을 마칩니다.