vsftpd 의 기능중 가상 유저를 만들어 서비스하는 방법을 설명합니다.
이 글에서는 pam_pwdfile 을 이용해 사용자를 인증하여 FTP를 재공하는 방법을 설명합니다.
먼저 Linux-PAM 과 pam_pwdfile 소스를 다운 받습니다. pam_pwdfile 을 이미 사용중이라면 받지 않아도 됩니다.
Linux-PAM 은 아래 링크에서 다운 받으세요.
http://www.us.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM-0.75.tar.bz2pam_pwdfile 은 아래에서 바로 받으세요.
http://cpbotha.net/files/pam_pwdfile/pam_pwdfile-0.99.tar.gz예를 들어 /usr/local/src 에 두 화일을 모두 받았다고 하면
그곳에서 pam_pwdfile 의 압축을 풉니다.
/usr/local/src# tar zxvf pam_pwdfile-0.99.tar.gz
pam_pwdfile-0.99 폴더로 들어가서 INSTALL 화일을 읽으면 설치 하는 방법이 나옵니다.
1번에 Linux-PAM 의 최신 버전을 받을 수 있는 주소가 나오는데 위에 받은 버전과 같은지 체크해주세요.
아래 내용은 INSTALL 화일에 있는 내용을 제가 다시 설명한것입니다.
그후 src 폴더에서
/usr/local/src# bunzip2 -c Linux-PAM-0.75.tar.bz2 | tar -xvf -
를 쳐서 Linux-PAM 의 압축을 풉니다.
# cd Linux-PAM-0.75/modules
# tar -xzvf /where/you/put/it/pam_pwdfile-0.99.tar.gz
# cd ..
# rm default.defs (보통 화일이 없습니다.)
# ln -s defs/linux.defs default.defs (linux 아니면 자신의 OS에 맞는 화일을 입력하세요.)
Linux-PAM-0.75 폴더에서
# make all 을 칩니다.
자, 이제 Linux-PAM-0.75/modules/pam_pwdfile 폴더에 pam_pwdfile.so 화일이 생성 됐을것입니다.
이 화일을 /lib/security 폴더로 복사하세요.
cp modules/pam_pwdfile/pam_pwdfile.so /lib/security
/etc/pam.d/ 폴더로 가서
vsftpd 라는 화일을 만들고 그안에 아래 내용을 씁니다.
#%PAM-1.0
auth required pam_pwdfile.so pwdfile /etc/vsftpd/passwd_ftp
account required pam_permit.so
/etc/vsftpd/ 폴더로 갑니다.
filter.pl 이라는 화일을 만듭니다.
#! /usr/bin/perl -w
use strict;
# filter "user:cleartext" lines into "user:md5_crypted"
# probably requires glibc
while (<>) {
chomp;
(my $user, my $pass) = split /:/, $_, 2;
my $crypt = crypt $pass, '$1$' . gensalt(8);
print "$user:$crypt\n";
}
sub gensalt {
my $count = shift;
my @salt = ('.', '/', 0 .. 9, 'A' .. 'Z', 'a' .. 'z');
my $s;
$s .= $salt[rand @salt] for (1 .. $count);
return $s;
}
위 내용을 쓰고 저장합니다.
그리고 실행 권한을 줍니다.
chmod 755 filter.pl
Makefile 이름으로 화일을 만듭니다.
passwd_ftp: cleartext
touch $@
chmod 600 $@
./filter.pl $< >$@
이제 cleartext 라는 화일을 만듭니다.
이 화일이 가상 유저들 정보가 있는 화일입니다.
id:pass 형식으로 넣어주세요.
즉,
test:mypasswd
newuser:newpasdd
이렇게 하면 test와 newuser 라는 유저를 설정하는 것입니다.
저장후 나와서
make 라고 칩니다.
그러면 passwd_ftp 라는 화일이 만들어지고
그안에 유저 아이디와 인코딩된 패스워드가 있을것입니다.
자, 이젠 vsftpd 에서 이 passwd_ftp 를 참조해서 유저를 나누게 설정해야 합니다.
앗, 그전에 이 모든 가상 유저를 실 계정과 연결을 해야 합니다.
ftp만 쓰일 서버 계정을 만드세요.
만약 ftpfile 이라는 유저로 만든다면
adduser ftpfile
그후, vsftpd.conf 를 열어서 맨 마지막에
아랫줄을 넣습니다.
## For Virtual User Setting ##
guest_enable=YES
guest_username=ftpfile (이것은 위에 생성한 계정 이름입니다.)
user_sub_token=$USER
chroot_local_user=YES
hide_ids=YES
local_root=/home/ftpfile/$USER (여기에 각 가상 유저의 폴더를 입력합니다. $USER 는 ID 변수 입니다.)
user_config_dir=/etc/vsftpd/config
virtual_use_local_privs=YES
vsftpd 를 다시 시작한후
service/vsftpd restart
가상 유저로 접속해보세요.
접속되면 성공한것입니다.
여기에 한가지 더 나아가, 각 가상 유저별로도 권한을 설정할 수 있습니다.
즉, 어떤 유저는 읽기만, 어떤 유저는 쓰고, 읽고 모두 이렇게 설정할 수 있는것이죠.
위에 보면
user_config_dir=/etc/vsftpd/config
라는 줄이 있습니다.
각 유저별 개별 설정이 이 폴더 안에 있다고 말하는 것입니다.
/etc/vsftpd/config/ 폴더를 만듭니다.
그안에 유저이름으로 화일을 만들어 설정을 하면 각 유저만의 설정을 합니다.
예를 들어 여기서 설정한 test 유저를 newuser 폴더를 읽기만 하게 한다 하면
test 라는 화일을 config 폴더안에 만들고,
local_root=/home/ftpfile/newuser
write_enable=NO
이렇게 쓴 후 저장하면 됩니다.
댓글을 달아 주세요