웹사이트 검색

CentOS 7에서 FTP 서버를 설치, 구성 및 보안하는 방법 - [종합 안내서]


FTP(파일 전송 프로토콜)는 특히 인증이 필요하지 않은 경우 네트워크를 통해 서버와 클라이언트 간에 파일을 전송하는 데 전통적이고 널리 사용되는 표준 도구입니다(익명 사용자 허용). 서버에 연결하기 위해). FTP는 암호화 없이 사용자 자격 증명과 데이터를 전송하기 때문에 기본적으로 안전하지 않다는 점을 이해해야 합니다.

이 가이드에서는 CentOS에서 FTP 서버(VSFTPD는 "Very Secure FTP Daemon"을 나타냄)를 설치, 구성 및 보호하는 단계를 설명합니다. Strong>/RHEL 7Fedora 배포판.

이 가이드의 모든 명령은 root로 실행됩니다. root 계정으로 서버를 운영하지 않는 경우 sudo 명령을 사용하여 루트 권한을 얻으세요.

1단계: FTP 서버 설치

1. vsftpd 서버 설치는 간단합니다. 터미널에서 다음 명령을 실행하면 됩니다.

yum install vsftpd

2. 설치가 완료되면 처음에는 서비스가 비활성화되므로 당분간 수동으로 시작해야 하며 다음 시스템 부팅에서도 자동으로 시작되도록 활성화해야 합니다.

systemctl start vsftpd
systemctl enable vsftpd

3. 다음으로 외부 시스템에서 FTP 서비스에 대한 액세스를 허용하려면 FTP 데몬이 다음과 같이 수신 대기하는 포트 21을 열어야 합니다.

firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

2단계: FTP 서버 구성

4. 이제 FTP 서버를 설정하고 보호하기 위한 몇 가지 구성을 수행하겠습니다. 원본 구성 파일 /etc/vsftpd/vsftpd.conf의 백업을 만드는 것으로 시작하겠습니다. :

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

그런 다음 위의 구성 파일을 열고 해당 값으로 다음 옵션을 설정합니다.

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. 이제 사용자 목록 파일 /etc/vsftpd.userlist를 기반으로 사용자에 대한 FTP 액세스를 허용/거부하도록 FTP를 구성합니다.

기본적으로 userlist_file=/etc/vsftpd.userlist에 나열된 사용자는 userlist_deny 옵션이 YES로 설정된 로그인 액세스가 거부됩니다. userlist_enable=YES.

그러나 userlist_deny=NO는 설정을 변경합니다. 즉, userlist_file=/etc/vsftpd.userlist에 명시적으로 나열된 사용자만 로그인이 허용된다는 의미입니다.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

그게 다가 아닙니다. 사용자가 FTP 서버에 로그인하면 chroot된 감옥에 배치됩니다. 이 감옥은 FTP 세션에 대해서만 홈 디렉터리 역할을 하는 로컬 루트 디렉터리입니다.

다음으로, 아래 설명된 대로 FTP 사용자를 FTP 사용자의 홈 디렉터리(로컬 루트) 디렉터리로 chroot하는 방법에 대한 두 가지 가능한 시나리오를 살펴보겠습니다.

6. 이제 FTP 사용자를 홈 디렉토리로 제한하려면 다음 두 가지 옵션을 추가하세요.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES는 로컬 사용자가 기본 설정에 따라 로그인 후 홈 디렉토리인 chroot 감옥에 배치됨을 의미합니다.

또한 기본적으로 vsftpd는 보안상의 이유로 chroot Jail 디렉토리에 쓰기가 허용되지 않습니다. 그러나 allow_writeable_chroot=YES 옵션을 사용하여 이 설정을 무시할 수 있습니다.

파일을 저장하고 닫습니다.

SELinux로 FTP 서버 보안

7. 이제 FTP가 사용자의 홈 디렉터리에 있는 파일을 읽을 수 있도록 아래의 SELinux 부울을 설정해 보겠습니다. 이 작업은 처음에 다음 명령을 사용하여 수행되었습니다.

setsebool -P ftp_home_dir on

그러나 이 버그 보고서(https://bugzilla.redhat.com/show_bug.cgi?id=1097775)에 설명된 대로 ftp_home_dir 지시문은 기본적으로 비활성화되어 있습니다.

이제 semanage 명령을 사용하여 FTP가 사용자의 홈 디렉터리를 읽고 쓸 수 있도록 SELinux 규칙을 설정합니다.

semanage boolean -m ftpd_full_access --on

이 시점에서 지금까지 변경한 모든 내용을 적용하려면 vsftpd를 다시 시작해야 합니다.

systemctl restart vsftpd

4단계: FTP 서버 테스트

8. 이제 useradd 명령으로 FTP 사용자를 생성하여 FTP 서버를 테스트하겠습니다.

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

그런 다음 다음과 같이 echo 명령을 사용하여 ravi 사용자를 /etc/vsftpd.userlist 파일에 추가해야 합니다.

echo "ravi" | tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

9. 이제 위의 설정이 올바르게 작동하는지 테스트할 차례입니다. 익명 로그인 테스트부터 시작하겠습니다. 아래 스크린샷에서 익명 로그인이 허용되지 않음을 확인할 수 있습니다.

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. /etc/vsftpd.userlist 파일에 나열되지 않은 사용자에게 로그인 권한이 부여되는지 테스트해 보겠습니다. 이는 스크린샷의 경우와 다릅니다. 아래에:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. 이제 /etc/vsftpd.userlist 파일에 나열된 사용자가 실제로 로그인 후 홈 디렉토리에 배치되었는지 최종 확인합니다.

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

현재 수행 중인 작업을 정확히 알고 있는 경우에만 이 옵션을 활성화하십시오. 이러한 보안 관련 사항은 vsftpd에만 적용되는 것이 아니라 로컬 사용자를 chroot 감옥에 가두는 모든 FTP 데몬에도 적용된다는 점을 기억하는 것이 중요합니다.

따라서 다음 섹션에서는 쓰기 불가능한 다른 로컬 루트 디렉터리를 설정하는 보다 안전한 방법을 살펴보겠습니다.

5단계: 다양한 FTP 사용자 홈 디렉터리 구성

12. vsftpd 구성 파일을 다시 열고 아래의 안전하지 않은 옵션에 주석을 달아 시작합니다.

#allow_writeable_chroot=YES

그런 다음 사용자에 대한 대체 로컬 루트 디렉터리(ravi, 귀하의 디렉터리는 다를 수 있음)를 만들고 이 디렉터리에 대한 모든 사용자의 쓰기 권한을 제거합니다.

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

13. 다음으로 사용자가 파일을 저장할 로컬 루트 아래에 디렉터리를 만듭니다.

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/ftp/files/

그런 다음 vsftpd 구성 파일에서 다음 값을 사용하여 다음 옵션을 추가/수정합니다.

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

파일을 저장하고 닫습니다. 다시 한 번 새로운 설정으로 서비스를 다시 시작해 보겠습니다.

systemctl restart vsftpd

14. 이제 최종 테스트를 다시 수행하여 사용자 로컬 루트 디렉터리가 우리가 홈 디렉터리에 만든 FTP 디렉터리인지 확인하세요.

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

그게 다야! 이 기사에서는 CentOS 7에서 FTP 서버를 설치, 구성 및 보호하는 방법을 설명했습니다. 아래 설명 섹션을 사용하여 이 가이드와 관련하여 답장을 보내거나 이 주제에 대한 유용한 정보를 공유하십시오.

권장 읽기: RHEL/CentOS 7에 ProFTPD 서버 설치

다음 기사에서는 CentOS 7에서 SSL/TLS 연결을 사용하여 FTP 서버를 보호하는 방법도 보여드리겠습니다. 그때까지 TecMint에 연결을 유지하세요.