Feb 01 2012

vsftpd 虚拟用户设置

Category: 技术ssmax @ 12:17:47

今天迁移一个老服务,用的是windows 上面的serv-U ,自从大学以后都没用过这个东东了,迁移到linux下面的vsftpd

设置了一下虚拟用户,记录一下配置过程

yum install vsftpd

安装好

修改配置文件:/etc/vsftpd/vsftpd.conf


anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
idle_session_timeout=120
data_connection_timeout=60
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

local_root=/home/ftp/$USER
chroot_local_user=YES
user_sub_token=$USER
virtual_use_local_privs=YES
hide_ids=YES
guest_enable=YES

记得touch 一下 /etc/vsftpd/chroot_list

这个东东在 chroot_local_user=YES 的时候,表示不需要chroot的用户,空文件即可

local_root=/home/ftp/$USER

把虚拟用户限制在自己的目录中,记住建立 ftp目录,并且ftp用户可写,更复杂的逻辑可以通过 user_config_dir 来定义。

local_enable=YES

这里表示使用非匿名用户,默认是用系统用户的,详细逻辑其实是在pam验证里面指定的。

guest_enable=YES
由于我们使用虚拟用户,不是系统里面存在的实际用户,所以这里设置所有访客其实都是使用ftp用户来映射

具体的用户可以通过 guest_username 指定,默认是用户 ftp

userlist_enable=YES
userlist_deny=NO

这两个加起来,表示只有在 /etc/vsftpd/user_list 里面的用户才能登录

/etc/vsftpd/user_list 里面记得加上你自己增加的虚拟用户,或者把userlist_deny设置为YES,都可以,否则在输入用户名后就会断开连接。

虚拟用户登录最重要的就是这里了:

pam_service_name=vsftpd

使用pam服务,默认的是用系统的登录用户,我们先建立虚拟用户的数据库:

echo ‘user1 pass1’ > /etc/vsftpd/passwd

明文密码,空格分隔,一行一个用户,

然后使用以下程序转换成bdb格式:


use DB_File;

my $database = $ARGV[0];
die "Use: create.pl <database>\n" unless ($database);
print "Using database: $database\n";

my %lusers = ();

tie %lusers, 'DB_File', $database, O_RDWR|O_CREAT, 0644, $DB_HASH ;
while (<STDIN>) {
my ($user, $pass) = split;

$lusers{$user} = $pass;
}
untie %lusers;

保存成 create.pl

执行:

cat /etc/vsftpd/passwd | perl  /etc/vsftpd/create.pl /etc/vsftpd/passwd.db

就可以转换成bdb格式的文件了。

生成了用户数据文件以后,修改/etc/pam.d/vsftpd

原来的验证方式就是使用系统的用户名密码,把原来的记录注释掉

加上两行:


auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/passwd

这里要注意两点,第一个是全路径,如果是64位的系统就用/lib64 ,32的就是 /lib

第二个指定的db文件不需要带后缀,会自动加上的。

都修改好以后就可以

/etc/init.d/vsftpd start

启动服务,测试一下,是不是都正常了。