서버 설정 · 2 min read · Feb 09, 2026
Debian Etch에서 vsftpd 및 MySQL을 이용한 가상 호스팅 - 2페이지
4 vsftpd 구성
먼저, nogroup 그룹에 속하는 vsftpd라는 비특권 사용자를 생성합니다 (홈 디렉토리: /home/vsftpd). 우리는 이 사용자 아래에서 vsftpd를 실행할 것이며, 가상 사용자의 FTP 디렉토리는 /home/vsftpd 디렉토리에 위치할 것입니다 (예: /home/vsftpd/user1, /home/vsftpd/user2 등).
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd그런 다음 원본 /etc/vsftpd.conf 파일의 백업을 만들고 우리의 파일을 생성합니다:
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null > /etc/vsftpd.conf
vi /etc/vsftpd.conf파일은 다음과 같은 내용을 가져야 합니다:
| listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf |
구성 옵션에 대한 설명은 http://vsftpd.beasts.org/vsftpd_conf.html에서 확인할 수 있습니다. 우리의 가상 설정에 중요한 옵션은 chroot_local_user, guest_enable, guest_username, user_sub_token, local_root, virtual_use_local_privs입니다.
user_config_dir 옵션을 사용하면 전역 설정의 일부를 재정의하는 사용자별 구성 파일을 위한 디렉토리를 지정할 수 있습니다. 이는 완전히 선택 사항이며 이 기능을 사용하고 싶다면 당신의 선택입니다. 그러나 우리는 지금 그 디렉토리를 생성해야 합니다:
mkdir /etc/vsftpd_user_conf이제 PAM을 구성하여 /etc/passwd 및 /etc/shadow 대신 MySQL 데이터베이스를 사용하여 우리의 가상 FTP 사용자를 인증하도록 해야 합니다. vsftpd에 대한 PAM 구성은 /etc/pam.d/vsftpd에 있습니다. 원본 파일의 백업을 만들고 다음과 같이 새 파일을 생성합니다:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
cat /dev/null > /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd| auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 |
MySQL 비밀번호를 자신의 비밀번호로 교체하는 것을 잊지 마세요!
그 후, vsftpd를 재시작합니다:
/etc/init.d/vsftpd restart5 첫 번째 가상 사용자 생성
데이터베이스를 채우기 위해 MySQL 셸을 사용할 수 있습니다:
mysql -u root -pUSE vsftpd;이제 비밀번호가 secret인 가상 사용자 testuser를 생성합니다 (비밀번호는 MySQL의 PASSWORD 함수를 사용하여 암호화되어 저장됩니다):
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;testuser의 홈 디렉토리는 /home/vsftpd/testuser입니다; 불행히도 vsftpd는 해당 디렉토리가 존재하지 않을 경우 자동으로 생성하지 않습니다. 따라서 우리는 지금 수동으로 생성하고 vsftpd 사용자와 nogroup 그룹의 소유로 설정합니다:
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser이제 작업 스테이션에서 FTP 클라이언트 프로그램을 열고 (Windows 시스템에서는 WS_FTP 또는 SmartFTP와 같은, Linux 데스크탑에서는 gFTP와 같은) 연결을 시도합니다. 호스트 이름으로 server1.example.com (또는 시스템의 IP 주소)을 사용하고, 사용자 이름은 testuser, 비밀번호는 secret입니다.
연결할 수 있다면 - 축하합니다! 그렇지 않다면, 뭔가 잘못되었습니다.
6 데이터베이스 관리
대부분의 사람들에게는 MySQL에 대한 그래픽 프론트 엔드가 더 쉽습니다; 따라서 phpMyAdmin (이 예제에서는 http://server1.example.com/phpmyadmin/에서) 을 사용하여 vsftpd 데이터베이스를 관리할 수 있습니다.

사용자를 생성하거나 수정할 때마다 MySQL의 PASSWORD 함수를 사용하여 해당 사용자의 비밀번호를 암호화하는 것을 잊지 마세요. 또한, 새로운 가상 사용자를 생성할 때는 이전 장의 끝에서 보여준 것처럼 해당 사용자의 홈 디렉토리를 셸에서 생성하는 것을 잊지 마세요.

7 링크
- vsftpd: http://vsftpd.beasts.org
- Debian: http://www.debian.org
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.