vsftpd 개요
FTP 서버 지원 사항은 다음과 같습니다.
- FTP Command/Data Port change
- Active mode
- Passive mode / Passive Port change
- SSL/TSL 암호화 통신
- 사용자 폴더만으로 접근 제한 ; chroot
본 문서에서는 FTP 통신 구간 암호화를 위하여 SSL/TSL까지 적용합니다.
vsftpd 설치
다음과 같이 yum을 이용하여, ftp 및 vsftpd 패키지를 설치합니다.
SELinux를 이용할 경우, 다음과 같이 필요한 방화벽을 미리 열어 놓습니다.
vsftpd 설정
기본적인 설정
CentOS에 SELinux가 활성화 된 상태에서 기본 설정으로 vsftpd를 동작하면, 파일 업로드시 다음과 같은 오류가 발생합니다.
이는 SELinux 설정에 ftp 관련 권한이 기본적으로 허용되어 있지 않기 때문입니다.
"getsebool" 명령을 이용하여 ftp 관련 보안 설정 정보를 확인합니다.
위 설정중에 "ftpd_full_access" 설정을 다음과 같이 "on"으로 설정합니다.
위와 같이 보안 설정 후, 다음과 같이 오류가 발생할 수 있습니다.
원인은 사용자 계정 폴더에 쓰기 권한이 부여 되어 있어서 발생하는 것으로, 해당 폴더의 쓰기 권한을 제거하거나, vsftpd.conf 파일에 "allow_writeable_chroot=YES" 설정을 추가합니다.
계정 홈 디렉토리에 쓰기 권한을 제거하면, 홈 디렉토리에 파일 업로드가 불가능하므로 본 문서에서는 다음과 같이 "allow_writeable_chroot" 설정을 추가합니다.
"root" 등 시스템 계정의 접근 허용
여기까지 설정했을 경우, 기본적으로 여러 시스템 계정들은 ftp로 접속이 안됩니다.
"root" 계정으로 접속하려하면 다음과 같은 오류가 발생합니다.
기본적으로 "root" 등의 시스템 계정은 접속을 할 수 없도록 설정되어 있습니다.
vsftpd 서버에서는 다음 2개의 파일로 계정에 대한 접근을 차단할 수 있는데, root 등 시스템 계정들이 아래 파일들에 기본적으로 추가되어 있기 때문에 접속할 수 없습니다.
- /etc/vsftpd/user_list ; 여기에 계정이 설정되면, 계정 입력 후, "530 Permission denied." 메시지와 함께 접속 차단 (비밀번호 입력까지도 안감)
- /etc/vsftpd/ftpusers ; 여기에 계정이 설정되면, 비밀번호 입력 후, "530 Login incorrect." 메시지와 함께 접속 차단
위의 두 파일에서 "root" 계정을 모두 주석 처리하면, "root" 계정으로 접속이 가능합니다.
아예 차단할 사용자 목록을 사용하지 않을 것이라면, "userlist_enable=YES" 설정을 "NO"로 변경하면 되나, 보안상 권장하지 않습니다.
("userlist_enable" 설정을 변경하였더라도 "/etc/vsftpd/ftpusers"는 여전히 동작합니다.)
기본 FTP 포트 변경하기 (change default ftp port)
ftp 기본 포트를 변경하기 위해서는 다음과 같이 /etc/vsftpd/vsftpd.conf 파일을 수정합니다.
포트를 변경한 이후에 다음과 같이 설정한 포트를 방화벽에서 열어 줍니다.
특정 계정에 대하여 외부 폴더 접근 허용하기
vsftpd에서 기본적으로 사용자 계정을 "/"로 하여 사용자 폴더 외에는 접근이 차단되도록 되어 있습니다.
"chroot_local_user=YES"로 사용자 계정에 대한 폴더 접근을 제한한 상태에서 특정 계정에 대하여 사용자 계정 외부의 폴더에 접근을 허용하려면, "chroot_list_enable=YES"의 주석을 제거하여 설정하고, 필요한 계정을 "chroot_list_file" 설정에 대한 주석을 제거하고 "/etc/vsftpd/chroot_list" 파일에서 해당 계정을 입력합니다.
다음은 "hanwh" 계정을 추가한 예입니다.
"/etc/vsftpd/chroot_list" 파일 내용
위와 같이 설정하고 vsftpd 서비스를 재시작 합니다.
그리고 "hanwh" 계정으로 접속하면, 자신의 홈 디렉토리 외 시스템 전체 폴더에 대한 접근이 가능하게 됩니다.
SSL/TSL 암호화 통신 설정하기
vsftpd에서 사용할 암호화 키를 다음과 같이 생성합니다.
FTP 통신을 암호화하기 위해서는 다음과 같이 /etc/vsftpd/vsftpd.conf 파일을 수정합니다.
vsftpd 서비스를 재시작하면, 이 후부터는 SSL/TSL이 적용된 암호화 통신으로만 FTP 이용이 가능합니다.
참고자료
- How To Install An FTP Server On CentOS 7 With VSFTPD
- [CentOS] FTP 설정, vsftpd 설정
- [CentOS7] 리눅스 FTP 설치 및 설정
- How To Set Up vsftpd for a User's Directory on Ubuntu 16.04
- 500 oops bad bool value in config file for anonymous_enable
- vsftpd.conf 설정 파일의 마지막 공백으로 오류 발생 ; sed -i 's,\r,,;s, *$,,' /etc/vsftpd/vsftpd.conf # 마지막 공백 제거
- VSFTP의 FTP를 위한 Port 변경 방법
- vsftpd FTP를 위한 Port 변경 방법
- vsftpd 홈 디렉토리 벗어날 수 있게 하기
- [리눅스] root 계정 FTP 530 Permission denied
- CENTOS7 | VSFTPD 설치 오류 ; vsftpd 설치에 관한 문서
- [리눅스] 500 OOPS vsftpd: refusing to run with writable root inside chroot()
- vsftpd + SSL/TLS 로 견고한 ftp 서비스 구성
- Configure VSFTPD with an SSL
'Linux,Unix,BSD' 카테고리의 다른 글
[PHP] CentOS SELinux 활성화 서버에서 PHP로 MariaDB 접속시, "Permission denied" 발생 문제 (0) | 2020.01.15 |
---|---|
[Linux] Nginx + PHP7 설치 on CentOS 7 (0) | 2019.12.28 |
HAProxy-1.9.8 설치 (on CentOS 7) (4) | 2019.10.04 |
최근 수정된 파일만 tar로 묶기 (0) | 2019.06.26 |
Install squid (proxy server) on ubuntu 16.04 (0) | 2019.06.18 |