Linux 9 FTP 서버(vsftpd) 설치

linux Linux

이 글에서는 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를 설정하면 서비스를 재기동하더라도 변경사항이 보존됩니다. 설정하지 않으면 재기동시 수정 전의 설정으로 되돌아갑니다.

제목과 URL을 복사했습니다