目的:
架设FTP服务器,并有三个帐户:
- download: 下载帐号,主目录为/home/vsftpd, 在该目录下只有只读权限;
- upload: 上传帐号,主目录为/home/vsftpd/upload, 在该目录下有读写权限,但是不能删除和修改已有文件;
- admin: 管理员帐号,主目录为/home/vsftpd,有所有权限。
步骤:
1. 安装vsftpd和db4.8-util
sudo apt-get install vsftpd db4.8-util2. 建立虚拟用户口令库文件(奇数行用户名,偶数行密码)。文件内容示例:
xxx@ubuntu:~$ cat /tmp/loguser.txt
download
downloadpass
upload
uploadpass
admin
adminpass
注意:不要有多余的空格和空行
3. 生成数据库文件,并设置其访问权限
sudo db4.8_load -T -t hash -f /tmp/loguser.txt /etc/vsftpd_login.db4. 修改文件/etc/pam.d/vsftpd,使其内容如下(注释掉原有内容):
sudo chmod 600 /etc/vsftpd_login.db
xxx@ubuntu:~$ cat /etc/pam.d/vsftpd5. 为虚拟用户创建本地系统用户
auth required pam_userdb.so db=/etc/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd_login
新建一个系统用户vsftpd,用户家目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)
sudo useradd vsftpd -d /home/vsftpd -s /bin/false6. 修改/etc/vsftpd.conf,一般要确保含有以下设置:
sudo mkdir /home/vsftpd
sudo mkdir /home/vsftpd/upload
sudo chown vsftpd:vsftpd /home/vsftpd
sudo chown vsftpd:vsftpd /home/vsftpd/upload
listen=YES7. 创建虚拟用户权限配置文件夹和配置文件
anonymous_enable=NO
pam_service_name=vsftpd
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd_user_conf
sudo mkdir /etc/vsftpd_user_confdownload文件内容如下:
cd /etc/vsftpd_user_conf
sudo touch download upload admin
anon_world_readable_only=NOupload文件内容如下:
local_root=/home/vsftpd
anon_world_readable_only=NOadmin文件内容如下:
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
local_root=/home/vsftpd/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vsftpd
注意:不要有多余的空格(和空行)
8. 重启vsftpd:(phew~)
/etc/init.d/vsftpd restart9. 测试一下:
lftp localhost -u download,downloadpass应该可以看到目录下的文件(如果有的话)
lftp down@localhost:/>ls
其他:
1. 还有一些其他参数,如速度限制、登录数限制等都可以在vsftpd.conf进行相应设置,甚至可以针对每个用户进行相应的设置。
2. 按照以上方法进行配置,目前还有个问题:本地用户无法登陆。报的错误是:
Login failed: 530 Login incorrect.根据Manpage of VSFTPD.CONF所说:
guest_enable如果使用了虚拟用户,那么所有非匿名用户(包括本地用户)都会映射到guest_username,即vsftpd这个用户,这样就造成了冲突。就是说鱼与熊掌不可兼得,本地用户和虚拟用户不能同时得到支持。不知道我理解得对不对。
local_enable
- If enabled, all non-anonymous logins are classed as "guest" logins. A guest login is remapped to the user specified in the guest_username setting.
- Controls whether local logins are permitted or not. If enabled, normal user accounts in /etc/passwd (or wherever your PAM config references) may be used to log in. This must be enable for any non-anonymous login to work, including virtual users.
参考链接:
Manpage of VSFTPD.CONF
vsftpd用户权限设置
为VSFTPD配置虚拟用户(文本方式)
vsftpd的虚拟用户配置
Vsftpd虚拟用户设置