이 글에서는 vsftpd(Very Secure FTP Daemon) 서버를 Linux에 설치하는 방법을 설명합니다.
vsftpd 프로그램 설치
Linux 9 환경에 FTP 서비스를 설치하기 위해서 아래의 커맨드를 실행합니다.
[root@svr ~]# yum install vsftpd
패키지가 이미 설치되어 있는지를 확인하고 싶다면 아래 커맨드를 사용하세요.
[root@svr ~]# yum search vsftpd
vsftpd 서비스 등록
아래의 커맨드로 설치한 vsftpd의 서비스를 띄워줍니다.
[root@svr ~]# systemctl start vsftpd.service
[root@svr ~]# systemctl enable vsftpd.service
vsftpd 설정 변경
아래의 vsftpd.conf 파일을 수정해줍니다.
[root@svr ~]# vi /etc/vsftpd/vsftpd.conf
…
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
…
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
…
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
…
# with the listen_ipv6 directive.
listen=NO
…
# Make sure, that one of the listen options is commented !!
listen_ipv6=YES
수정한 vsftpd.conf의 가장 아래에 옵션을 새롭게 추가해줍니다.
pam_service_name=vsftpd
local_root=public_html
use_localtime=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
allow_writeable_chroot=YES
chroot 환경
/etc/vsftpd/chroot_list는 vsftpd(Very Secure FTP Daemon) 서버의 설정 파일 중 하나로 FTP 사용자의 chroot 설정을 관리합니다. chroot는 특정 사용자가 로그인했을 때 해당 사용자의 루트 디렉토리를 변경하는 기능으로, 사용자가 지정된 디렉토리 밖으로 접근하는 것을 막고 보안을 향상시킵니다.
아래의 chroot_list 파일에 접속할 유저명을 추가합니다.
[root@svr ~]# vi /etc/vsftpd/chroot_list
user01
user02
user03
chroot 환경과 vsftpd.conf 설정의 관계
이 리스트(/etc/vsftpd/chroot_list)의 동작 “chroot하기/chroot하지 않기”는 vsftpd.conf 설정 파일의 설정에 따라 달라집니다.
- chroot_local_user=YES
- 모든 로컬 사용자를 chroot 환경에 배치합니다. 단, chroot_list에 나열된 사용자는 chroot하지 않는 것으로 취급됩니다.
- chroot_list_enable=YES
- chroot_list 파일을 활성화합니다.
- chroot_list_file=/etc/vsftpd/chroot_list
- chroot_list 파일의 경로를 지정합니다. 일반적으로 이 파일은 /etc/vsftpd/chroot_list입니다.
리스트에 있는 유저는 chroot 하지 않기
# 모든 로컬 사용자를 chroot하지만 리스트에 있는 사용자는 chroot 하지 않는다.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
리스트에 있는 유저는 chroot 하기
# 모든 로컬 사용자를 chroot하지 않만 리스트에 있는 사용자는 chroot 한다.
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
FTP 액세스 금지
/etc/vsftpd/ftpusers 는 vsftpd (Very Secure FTP Daemon) 서버의 설정 파일 중 하나이며 FTP 접근을 금지하는 사용자 리스트를 관리합니다. 이 파일에 기재된 사용자는 FTP 서버에 로그인할 수 없습니다.
아래의 ftpusers 파일에 접속할 유저명을 지우거나 주석 처리합니다.
[root@svr ~]# vi /etc/vsftpd/ftpusers
#root
bin
daemon
#admin
adm
nobody
편집 후에는 vsftpd 서비스를 재기동하는 것으로 변경이 반영됩니다.
[root@svr ~]# systemctl restart vsftpd
SELINUX=permissive 으로 설정하는 이유
트러블 슈팅
- SELinux가 enforcing 모드인 경우 vsftpd가 제대로 동작하지 않을 수 있습니다. 이것은 SELinux 정책이 vsftpd의 파일 접근이나 네트워크 통신을 차단하기 때문입니다.
- permissive 모드로 하면 정책 위반이 로그에 기록될 뿐 조작은 거부되지 않습니다. 이를 통해 무엇이 문제가 되고 있는지 조사하기 쉬워집니다.
설정 확인
- permissive 모드에서 vsftpd를 실행하면 SELinux 정책의 영향을 받지 않고 설정을 확인할 수 있습니다. 이 모드에서 문제가 발생하지 않을 경우 SELinux 정책이 원인임이 명확해집니다.
정책의 조정
- permissive 모드에서의 로그를 바탕으로 필요한 SELinux 정책을 조정할 수 있습니다. 적절한 정책이 설정된 후에 enforcing 모드로 되돌릴 수 있습니다.
아래의 config 파일에서 SELINUX 옵션을 수정합니다.
[root@svr ~]# vi /etc/selinux/config
SELINUX=permissive
변경 사항을 적용하기 위해 시스템을 재기동합니다.
[root@svr ~]# reboot
또는, 시스템 재기동하지 않고 현재 세션에서 일시적으로 permissive 모드로 변경하려면 아래의 커맨드를 사용합니다.
[root@svr ~]# setenforce 0
방화벽 설정
위의 설정이 끝나도 방화벽 때문에 접속이 제한됩니다. 아래의 커맨드로 FTP 서비스를 허가합니다.
[root@svr ~]# firewall-cmd --permanent --zone=public --add-service=ftp
[root@svr ~]# firewall-cmd --reload
–permanent를 설정하면 서비스를 재기동하더라도 변경사항이 보존됩니다. 설정하지 않으면 재기동시 수정 전의 설정으로 되돌아갑니다.