CentOS 7 vsftpd 가상 사용자 구축 및 SSL/TLS 보안 통신 설정

CentOS 7 환경에서 가상 사용자를 활용한 vsftpd(Very Secure FTP Daemon) 설치와 SSL/TLS 암호화를 통한 보안 강화 절차를 설명합니다.

1. vsftpd 패키지 설치 및 서비스 관리

먼저 yum 패키지 관리자를 통해 vsftpd를 설치하고 시스템 시작 시 자동으로 실행되도록 설정합니다.

# vsftpd 설치
yum install -y vsftpd

# 서비스 활성화 및 시작
systemctl enable vsftpd
systemctl start vsftpd

# 서비스 상태 확인
systemctl status vsftpd

2. 서버 기본 환경 설정

vsftpd의 기본 동작 방식을 정의하기 위해 설정 파일을 수정합니다. 보안을 위해 익명 접속을 차단하고 수동 모드 포트 범위를 지정합니다.

# 설정 파일 편집
vim /etc/vsftpd/vsftpd.conf

# 주요 설정값 수정 (행 번호는 버전에 따라 다를 수 있음)
anonymous_enable=NO
anon_mkdir_write_enable=YES
chown_uploads=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to Secure FTP Service.
chroot_local_user=YES
allow_writeable_chroot=YES

# 파일 하단에 추가 정보 입력
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vftpuser
user_config_dir=/etc/vsftpd/user_conf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1

3. 가상 사용자 데이터베이스 생성

시스템 계정이 아닌 별도의 가상 계정을 생성하여 보안성을 높입니다.

# 가상 사용자 정보 파일 생성 (홀수 줄: 아이디, 짝수 줄: 비밀번호)
vim /etc/vsftpd/vuser_list

# 예시 내용
dev_admin
secure_pass123

# Berkeley DB 형식으로 변환
db_load -T -t hash -f /etc/vsftpd/vuser_list /etc/vsftpd/vuser_list.db

# 권한 제한
chmod 600 /etc/vsftpd/vuser_list.db

4. PAM 인증 및 시스템 계정 설정

vsftpd가 방금 생성한 가상 사용자 데이터베이스를 참조하도록 PAM 설정을 변경합니다.

# 원본 백업
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.orig

# PAM 설정 수정
vi /etc/pam.d/vsftpd

# 기존 auth 및 account 설정 주석 처리 후 다음 추가
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_list
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_list

가상 사용자들이 실제로 매핑될 시스템 계정을 생성합니다.

# 로그인 권한이 없는 시스템 계정 생성
useradd vftpuser -d /data/vftp -s /sbin/nologin
chown -R vftpuser:vftpuser /data/vftp

5. 사용자별 개별 설정 부여

각 가상 사용자마다 저장 경로와 권한을 다르게 설정할 수 있습니다.

mkdir /etc/vsftpd/user_conf
vi /etc/vsftpd/user_conf/dev_admin

# dev_admin 사용자를 위한 개별 설정
local_root=/data/vftp/dev_admin
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# 해당 디렉토리 생성 및 권한 설정
mkdir -p /data/vftp/dev_admin
chown -R vftpuser:vftpuser /data/vftp/dev_admin
chmod 775 /data/vftp/dev_admin

6. 방화벽 및 SELinux 설정

FTP 통신 및 수동 모드 포트를 허용합니다.

# Firewalld 사용 시
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-40010/tcp
firewall-cmd --reload

# SELinux 조정
setsebool -P ftpd_full_access 1
setsebool -P tftp_home_dir 1
# 또는 특정 문제 발생 시 임시 비활성화
# setenforce 0

7. SSL/TLS 인증서 생성 및 암호화 적용

데이터 도청을 방지하기 위해 OpenSSL을 사용하여 자체 서명 인증서를 생성하고 vsftpd에 적용합니다.

# 인증서 저장 디렉토리 생성
mkdir -p /etc/vsftpd/certs
cd /etc/vsftpd/certs

# 개인키 및 인증서 생성
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout vsftpd.key -out vsftpd.crt

# vsftpd.conf에 SSL 설정 추가
vi /etc/vsftpd/vsftpd.conf

# 아래 내용 추가 또는 수정
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/certs/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/certs/vsftpd.key

모든 설정을 마친 후 서비스를 재시작합니다.

systemctl restart vsftpd

SSL/TLS가 적용되면 일반적인 CLI ftp 명령어로는 접속이 제한될 수 있습니다. FileZilla와 같은 FTP 클라이언트를 사용하여 '명시적 TLS를 통한 FTP(Explicit FTP over TLS)' 방식을 선택하여 접속해야 보안 연결이 수립됩니다.

태그: CentOS7 vsftpd OpenSSL SSL TLS

6월 1일 18:06에 게시됨