Linux 서버에서의 VSFTD 설치 및 가상 사용자 계정 관리 기법

1. 패키지 의존성 확보 및 서비스 배포

안정적인 파일 전송 프로토콜 서버를 구축하기 위해首先需要 기본 패키지를 로드합니다. 여기서는 레드햇 기반 운영체계를 전제로 yum 을 통해 컴포넌트를 적용하되, 데이터베이스 유틸리티도 함께 포함해야 합니다.

[root@server ~]# yum install vsftpd db-utils -y
Resolving Dependencies
--> Package vsftpd.x86_64 0:3.0.3-4.el7 will be installed
--> Finished Dependency Resolution
Installing : vsftpd-3.0.3-4.el7.x86_64 
Installed successfully.

설치가 완료되면 데몬을 활성화하고 초기화 상태를 확인하는 것이 필수적입니다.

[root@server ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@server ~]# systemctl start vsftpd

2. 기본 로컬 인증 테스트

가상 사용자가 아닌 일반 시스템 계정을 이용하여 연결 성공 여부를 먼저 검증해 봅니다. 테스트용 계정을 생성하고 비밀번호를 할당합니다.

[root@server ~]# useradd -m sys_test
[root@server ~]# echo "SecurePass123" | passwd --stdin sys_test

클라이언트 측 FTP 프로그램이나 CLI 도구를 통해 접속 시도를 수행합니다. 다음 예시는 10.0.0.20 에 호스팅된 서버로 연결하는 과정을 보여줍니다.

c:\ftp> open 10.0.0.20
Connected to 10.0.0.20.
220 Welcome to VSFTPd ready for secure connection.
Name (10.0.0.20:admin): sys_test
331 Please specify the password.
Password: *******
230 Login successful. Ready to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,20,45,128).
150 Here comes the directory listing.
total 0
drwxr-xr-x 2 root root 4096 Jan 10 10:00 public_html
226 Directory send OK.

기본 설정状态下에는 로그인한 사용자의 홈 디렉토리 접근만 가능하도록 제한되며, 작성 권한은 별도 정책에 의해 통제됩니다.

3. 핵심 설정 파일 아키텍처

VSFTPD 는 여러 모듈을 조합하여 보안 및 동작 방식을 제어합니다. 주요 경로와 역할은 다음과 같습니다.

  • /etc/vsftpd/vsftpd.conf: 메인 컨피그레이션 설정 파일
  • /usr/sbin/vsftpd: 실행 가능한 메인 바이너리
  • /etc/pam.d/vsftpd: 플러그인 인증 모듈 인터페이스 정의
  • /etc/vsftpd/user_list: 접근 허용 또는 차단 목록 명세서
  • /var/log/vsftpd.log: 접속 이력 및 트랜스퍼 로그 기록 장소

특히 pam_service_name 지시자를 변경하면 별도의 인증 스템플릿을 사용할 수 있습니다. 이는 후술할 가상 사용자 구현의 핵심입니다.

4. 가상 사용자 (Virtual User) 구축 전략

실제 OS 계정을 생성하지 않고 독립적인 FTP 계정만 유지하려면 DB 기반 인증이 필요합니다. 이를 위해 플레인 텍스트 파일을 해시 형태로 변환하여 저장소에 등록합니다.

4-1. 자격 증명 소스 데이터 준비

사용자 ID 와 비밀번호를 교대로 줄바꿈하여 입력한 텍스트 파일을 생성합니다.

[root@server vsftpd]# vim users_plain.txt
client_a
password_for_a
client_b
password_for_b
partner_c
secure_token_xyz

4-2. 데이터베이스 형식 변환

Berkley DB 도구를 활용하여 상단 파일을 인덱싱된 DB 파일로 컴파일합니다.

[root@server vsftpd]# mkdb -T -t hash users_plain.txt ./vusers_auth.db
[root@server vsftpd]# chmod 600 vusers_auth.db
[root@server vsftpd]# ls -l vusers_auth.db
-rw------- 1 root root 12288 Oct 25 14:30 vusers_auth.db

주의: 생성된 .db 파일은 반드시 권한을 최소화 (600) 하여 무단 열람을 방지해야 합니다.

5. PAM 인증 연동 및 시스템 마핑

생성된 DB 를 실제 인증 프로세스에 결합시키기 위해서는 PAM 설정을 수정해야 하며, 모든 가상 사용자는 하나의 내부 시스템 계정으로 매핑됩니다.

5-1. 전용 PAM 프로필 생성

기존 설정을 건드리지 않고 별도의 파일로 인증 규칙을 분리합니다.

[root@server pam.d]# cat > /etc/pam.d/vsftpd_virtual <<EOF
auth required pam_userdb.so db=/etc/vsftpd/vusers_auth
account required pam_userdb.so db=/etc/vsftpd/vusers_auth
EOF

5-2. 가상의 시스템 소유자 할당

가상 사용자들은 실제로 파일을 쓰기 위해 특정 UID/GID 가 필요합니다. 이를 위한 '그림자' 계정을 만듭니다.

[root@server ~]# useradd -g users -d /data/ftp_root -s /sbin/nologin ftp_daemon
mkdir -p /data/ftp_root/public
chown -R ftp_daemon:users /data/ftp_root
chmod -R 755 /data/ftp_root

6. 최종 정책 적용 및 세부 권한 조정

메인 설정 파일에서 가상 사용자를 인식하도록 하고, 각별한 디렉토리 제어를 위해 개별 컨피그레이션을 지정합니다.

[root@server conf]# vim /etc/vsftpd/vsftpd.conf
# 기존 로컬 계정 인증 비활성화 (선택사항)
local_enable=YES
write_enable=YES

# 가상 사용자 기능 활성화
guest_enable=YES
guest_username=ftp_daemon
pam_service_name=vsftpd_virtual

# 각 사용자별 커스터마이징 경로 설정
user_config_dir=/etc/vsftpd/client_configs

# 보안 강화를 위한 제한 사항
chroot_local_user=YES
allow_writeable_chroot=YES
listen=YES
tcp_wrappers=YES

각 클라이언트마다 다른 접근 레벨 (읽기 전용, 쓰기 가능 등) 을 적용하려면 client_configs 디렉토리 내부에 해당 유저 이름과 동일한 파일명을 만들어 설정파일을 배치하면 됩니다.

[root@server configs]# mkdir -p /etc/vsftpd/client_configs
vim /etc/vsftpd/client_configs/client_a
local_root=/data/ftp_root/client_a
anon_world_readable_only=NO
file_open_mode=0744
write_enable=YES

vim /etc/vsftpd/client_configs/partner_c
local_root=/data/ftp_root/partner_c
read_only=YES
download_enable=YES
upload_enable=NO

모든 설정이 종료되면 서비스를 재개동하여 변경 사항을 반영합니다.

[root@server ~]# systemctl restart vsftpd
[root@server ~]# systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2023-10-25 15:00:00 UTC

태그: vsftpd linux FTP pam CentOS

7월 1일 00:42에 게시됨