1.什么是虚拟用户
vsftpd服务器提供了对虚拟用户的支持,它采用PAM认证机制实现了虚拟用户的功能。
配置使用虚拟用户登录的FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理。
很多人对虚拟账号FTP的定义有些模糊,其实我们可以把虚拟账号FTP看作是一种特殊的匿名FTP,这个特殊的匿名FTP,拥有登录FTP的用户名和密码,但是它所使用的用户名又不是本地用户(即它的用户名只能用来登录FTP,而不能用来登录系统),并且所有的虚拟用户名,在登录FTP时,都是在映射为一个真实的账号之后才登录到FTP上的。(需要说明的是这个真实的号是可以登录系统的,即它和本地用户在这一点上性质是一样的。)
2. 配置虚拟用户的步骤
1、建立虚拟用户口令库文件
口令库文件中奇数行设置用户名,偶数行设置口令
# vi /etc/vsftpd/logins.txt 注意,以下是4行
upload 这个是帐户名
upload 这个是密码
download
download
2、生成vsftpd的认证文件
# db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
设置认证文件只对用户可读可写
# chmod 600 /etc/vsftpd/vsftpd_login.db
3、建立虚拟用户所需的PAM配置文件
# vi /etc/pam.d/vsftpd
把原来的内容都注释掉,添加以下两行:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
注意:
1. 以上2行中最后的2个文件名vsftpd_login和第2个步骤中的数据库名字必须一致;
2. 64位系统是/lib64/security/pam_userdb.so,或者直接写pam_userdb.so即可;
4、建立虚拟用户所要访问的目录并设置相应权限
# mkdir /home/ftpsite
# useradd -d /home/ftpsite virtual(用户名)
# chown virtual:virtual /home/ftpsite
# chmod 700 /home/ftpsite/
5、设置vsftpd.conf配置文件
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd
6、每个FTP虚拟用户独立设置其权限
在vsftpd.conf文件中添加用户配置文件目录设置
user_config_dir=/etc/vsftpd_user_conf
# service vsftpd restart
建立用户配置文件目录
# mkdir /etc/vsftpd_user_conf
为虚拟用户建立单独的配置文件,用户配置文件名称与用户名相同
touch /etc/vsftpd_user_conf/upload
touch /etc/vsftpd_user_conf/download
每个FTP虚拟用户独立设置其权限
vi /etc/vsftpd_user_conf/upload
anon_world_readable_only=NO 可读可下载
anon_upload_enable=YES 可上传
anon_mkdir_write_enable=YES 可创建和删除文件夹
anon_other_write_enable=YES 可文件改名和删除文件
local_root=/home/ftpsite/upload 指定upload的宿主目录
download_enable=NO 禁止下载
3. 登录报错解决
1. 错误代码:530 Login incorrect.
解决办法:更改虚拟账号的家目录
vi /etc/passwd
virtual:x:1001:1001::/home/ftpsite:/bin/bash
2. 错误代码:500 OOPS: refusing to run with writable root inside chroot ()
解决方法:修改住配置文件
vi /etc/vsftpd/vsftpd.conf
文件中添加 allow_writeable_chroot=YES
3. 错误代码:550 Failed to change directory
解决方法:
vi /etc/selinux/config
将SELINUX=enforcing 改成SELINUX=disabled