今天迁移一个老服务,用的是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
启动服务,测试一下,是不是都正常了。