首先我们假定你已经安装了vsftpd,并在/home/vsftpd 目录下建立了以下2个子目录
- dcp_temp
- dcp_bak
下面,我们要建2个虚拟用户,密码分别是用户名后加"00"
- mrsuser
- mrsadmin
使得
- 用户mrsuser 的主目录为 dcp_temp,在该目录下只有只读权限
- 用户mrsadmin 的主目录为 vsftpd,在该目录下拥有所有权限
创建虚拟用户数据库
创建文本文件loguser.txt
格式如下:
userid password
于是,我们/home/loguser.txt文件的内容为
mrsuser mrsuser00 mrsadmin mrsadmin00
生成数据库
保存虚拟帐号和密码的文本文件无法被系统帐号直接调用哈~我们需要使用db_load命令生成db口令数据库文件.
[root@redhat home]# db_load -T -t hash -f /home/loguser.txt /etc/vsftpd/account.db
[root@redhat home]# ll /etc/vsftpd/
数据库文件中保存着虚拟帐号的密码信息,为了防止非法用户盗取哈,我们可以修改该文件的访问权限。生成的认证文件的权限应设置为只对 root 用户可读可写,即 600
[root@redhat home]# chmod 600 /etc/vsftpd/account.db
配置PAM文件
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块.PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
[root@redhat home]#vi /etc/pam.d/vsftpd //修改vsftpd对应的PAM配置文件/etc/pam.d/vsftpd,将默认配置使用“#”全部注释,添加相应字段
accountrequired /lib/security/pam_userdb.sodb=/etc/vsftpd/account
为虚拟用户创建本地系统用户
新建一个系统用户vsftpd,用户家目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)
[root@redhat home]# useradd vsftpd -d /home/vsftpd -s /bin/false
[root@redhat home]# chown vsftpd:vsftpd /home/vsftpd
/etc/vsftpd.conf
根据需要修改/etc/vsftpd.conf,一般要确保含有以下设置:
anonymous_enable=NO //禁用匿名用户登录 local_enable=YES //启用本地用户登录设置 write_enable=YES //允许使用任何可以修改文件系统的FTP的指令 dirmessage_enable=YES connect_from_port_20=YES chroot_local_user=YES //将所有本地用户限制在家目录中 listen=YES guest_enable=YES //如果启用,所有的非匿名用户登录时将被视为”游客“,其名字将被映射为guest_username里所指定的名字。 guest_username=vsftpd //是刚才为虚拟用户创建本地系统用户名。 user_config_dir=/etc/vsftpd/vsftpd_user_conf //把各个用户的配置文件放到目录/etc/vsftpd/vsftpd_user_conf中 pam_service_name=vsftpd //配置vsftpd使用的PAM模块为vsftpd max_clients=300 //设置FTP服务器最大接入客户端数为300个 max_per_ip=20 //设置每个IP地址最大连接数为20个
现在为止,我们的2个用户都可以工作了,可是它们的根目录现在都是/home/vsftpd,权限也都一样。 那么怎么才能完成我们预定的目标呢?
/etc/vsftpd/vsftpd_user_conf
在上面的配置中,有这么一行
user_config_dir=/etc/vsftpd/vsftpd_user_conf
现在,我们要把各个用户的配置文件放到目录/etc/vsftpd/vsftpd_user_conf中
[root@redhat home]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@redhat home]# cd /etc/vsftpd/vsftpd_user_conf
[root@redhat vsftpd_user_conf ]# touch mrsuser mrsadmin
mrsuser文件中的内容如下
write_enable=YES
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
download_enable=YES
local_root=/home/vsftpd/dcp_temp
那么,mrsadmin的内容呢? 其实也很简单
write_enable=YES
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
download_enable=YES
local_root=/home/vsftpd
重启vsftpd我们就可以看到效果了^_^
参考: http://www.phpfans.net/article/htmls/201008/Mjk0MTU4.html
在拥有上传或创建文件的权限下,若出现 553 Could not create file
若vsftpd用户都使用同一个主目录
,假设是/home/vsftpd
这个目录的权限应该是770,owner是root,group是vsftpd
chmod 770 /home/vsftpd
chown root:vsftpd /home/vsftpd