作者:想想以前哦 | 来源:互联网 | 2014-05-28 09:06
在vsftpd中要实现不同用户不同权限,可以利用虚拟用户来实现。vsftpd的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而vsftpd的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP
在vsftpd中要实现不同用户不同权限,可以利用虚拟用户来实现。
vsftpd的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而vsftpd的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。
vsftpd的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了系统的安全性。vsftpd可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器中,如MySQL等。vsftpd验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证时,vsftpd需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。
环境:
Ubuntu 10.04
vsftpd 2.2.2
1、安装vsftpd
$sudo apt-get install vsftpd
$sudo apt-get install db4.6-utils
2、建立本地虚拟用户
#useradd -d /home/ftp virtual
指定目录为/home/ftp
3、建立虚拟用户数据库
#mkdir /etc/vsftpd
#vim /etc/vsftpd/login.txt
login.txt文件内容:
gavin
123
jimson
123
admin
admin
注:奇数行为用户名,偶数行为密码。
#db4.6_load -T -t hash -f /etc/vsftpd/logins.txt
/etc/vsftpd/vsftpd_login.db
#chmod 600 /etc/vsftpd/vsftpd_login.db
生成数据库文件之后建议删除logins.txt。
4、建立基于vsftpd_login的PAM授权文件
#vim /etc/pam.d/vsftpd.vu
vsftpd.vu文件内容:
auth required /lib/security/pam_userdb.so
db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so
db=/etc/vsftpd/vsftpd_login
5、设置用户权限
建立用来存放用户权限设置文件的目录
#mkdir /etc/vfstpd/virtual
并在该文件夹下依次建立与logins.txt对应的帐号名称相同的文件
#vim gavin
内容可以参考下面:
#[gavin]只允许下载
anon_world_readable_Only=NO
local_root=/home/ftp
#[jimson]允许建立,修改,但是不允许删除
anon_world_readable_Only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
local_root=/home/ftp
#[admin]全部权限
anon_world_readable_Only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
local_root=/home/ftp
6、设置vsftpd.conf
#vim /etc/vsftpd.conf
修改内容如下:
listen=YES
connect_from_port_20=YES
ftpd_banner=Welcome to virtual FTP service.
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/virtual
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
7、重新启动vsftpd
#service vsftpd restart
【可能出现的问题】
1、无法登陆
解决方法:
(1)检查ftp根目录目录是否存在;
(2)检查上面设置的各个路径是否正确;
(3)查看ftp根目录的owner属性是否是virtual
#ls -al /home
如果不是
#chown -R virtual /home/ftp
【日常维护】
(1)更新帐号
#db4.6_load -T -t hash -f /etc/vsftpd/logins.txt
/etc/vsftpd/vsftpd_login.db
(2)更新/etc/vsftpd/virtual/下不同用户对应的权限
(3)重启vsftpd
#service vsftpd restart