环境:Ubuntu 9.04 Server+VSFTPD 2.0.7
slmagicbox@ubuntu904server:~$ uname -a
Linux ubuntu904server 2.6.28-11-server #42-Ubuntu SMP Fri Apr 17 02:48:10 UTC 2009 i686 GNU/Linux
slmagicbox@ubuntu904server:~$ dpkg -l | grep vsftpd
ii vsftpd 2.0.7-0ubuntu1 The Very Secure FTP Daemon
原始配置文件/etc/vsftpd.conf:
本配置文件为安装vsftpd后默认生成的,以“#”开头为注释项
# Example config file /etc/vsftpd.conf
listen=YES #以standalone模式运行vsftpd
#listen_ipv6=YES
anonymous_enable=YES #允许匿名用户访问
#local_enable=YES
#write_enable=YES
#local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES #当用户首次进入FTP服务器的目录时,显示该目录下的message消息,默认为.message文件,可以用message_file来定义
xferlog_enable=YES #启用日志,默认路径/var/log/vsftpd.log
connect_from_port_20=YES #数据连接使用默认的ftp-data端口(20端口)
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
# chroot_list_enable below.
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
# Debian customization
secure_chroot_dir=/var/run/vsftpd #忽略
pam_service_name=vsftpd #忽略
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #忽略
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #忽略
修改后功能:
首先我们在/home/ftp目录下建立了以下两个子目录
* ftphome1
* ftphome2
然后,我们创建3个虚拟用户,密码分别是用户名后加"test"
* ftpvuser1
* ftpvuser2
* ftpvuser3
* 用户ftpvuser1 的主目录为 ftphome1 ,只读权限
* 用户ftpvuser2 的主目录为 ftphome2,只读权限
* 用户ftpvuser3 的主目录仍为 ftphome2 ,拥有所有权限
步骤:
1. 创建虚拟用户数据库
1.1 创建文本文件/etc/vsftpd.ftpvuser_list,内容为:
ftpvuser1
ftpvuser1test
ftpvuser2
ftpvuser2test
ftpvuser3
ftpvuser3test
slmagicbox@ubuntu904server:~$ sudo touch /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser1" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser1test" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser2" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser2test" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser3" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser3test" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ sudo cat /etc/vsftpd.ftpvuser_list
确认显示内容与上面列表的相同。
1.2 安装db4.6-util工具(Berkeley v4.6 database utilities),生成数据库/etc/vsftpd_vuser.db
slmagicbox@ubuntu904server:~$ sudo apt-get install db4.6-util
slmagicbox@ubuntu904server:~$ sudo db4.6_load -T -t hash -f /etc/vsftpd.ftpvuser_list /etc/vsftpd_vuser.db
slmagicbox@ubuntu904server:~$ sudo chmod 600 /etc/vsftpd_vuser.db
2. 配置PAM文件
2.1 新建/etc/pam.d/vsftpd.vuser 内容为:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_vuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd_vuser
slmagicbox@ubuntu904server:/etc/pam.d$ sudo vim /etc/pam.d/vsftpd.vuser
slmagicbox@ubuntu904server:/etc/pam.d$ cat /etc/pam.d/vsftpd.vuser
2.2 修改配置文件 /etc/vsftpd.conf
pam_service_name=vsftpd.vuser #该名字与上面的文件名对应
3.为虚拟用户创建本地系统用户
3.1 新建一个系统用户ftpvuser,用户家目录为/home/ftp, 用户登录终端设为/bin/false(该用户不能登录系统)
slmagicbox@ubuntu904server:/etc/pam.d$ sudo useradd ftpvuser -d /home/ftp -s /bin/false
slmagicbox@ubuntu904server:/etc/pam.d$ sudo chown ftpvuser:ftpvuser /home/ftp
4.编辑配置文件/etc/vsftpd.conf
4.1
listen=YES #以standalone模式运行vsftpd
anonymous_enable=NO #禁止匿名
dirmessage_enable=YES #显
示目录下的message消息
xferlog_enable=YES #启用日志
xferlog_file=/var/log/vsftpd.log #设定日志路径
xferlog_std_format=YES #使用标准日志格式
chroot_local_user=YES #限定用户在家目录
guest_enable=YES #启用虚拟用户
guest_username=ftpvuser #虚拟用户帐号
#user_config_dir=/etc/vsftpd_user_conf #先不启用,后面启用时再说明
pam_service_name=vsftpd.vuser #设置pam服务名,上面2.2已经说明
local_enable=YES
secure_chroot_dir=/var/run/vsftpd #忽略
5. 区分虚拟用户权限
上面的设置,3个虚拟用户都可以正常登录,但是3者的家目录都在/home/ftp,权限都是一样的,接下来我们通过设置来区分3个虚拟的权限。
5.1 首先启用上面配置文件中的user_config_dir项
user_config_dir=/etc/vsftpd_user_conf #启用用户配置文件,设定配置文件存放目录
5.2 创建配置文件存放目录,并新建用户配置文件,文件名与虚拟用户名相同
slmagicbox@ubuntu904server:~$sudo mkdir /etc/vsftpd_user_conf
slmagicbox@ubuntu904server:~$cd /etc/vsftpd_user_conf
slmagicbox@ubuntu904server:/etc/vsftpd_user_conf$sudo touch ftpvuser1 ftpvuser2 ftpvuser3
5.3 编辑虚拟用户配置文件
ftpvuser1内容为:
local_root=/home/ftp/ftphome1
ftpvuser2内容为:
local_root=/home/ftp/ftphome2
ftpvuser3内容为:
local_root=/home/ftp/ftphome1
write_enable=YES #开启全局上传(写)权限
anon_world_readable_only=NO #关闭匿名用户只读(下载)权限
anon_upload_enable=YES #开启匿名用户上传权限
anon_mkdir_write_enable=YES #开启匿名用户建目录权限
anon_other_write_enable=YES #开启匿名用户除上传和建目录之外的写权限(如重命名,删除等)
现在达到我们想要的效果了。^_^
slmagicbox@ubuntu904server:~$ uname -a
Linux ubuntu904server 2.6.28-11-server #42-Ubuntu SMP Fri Apr 17 02:48:10 UTC 2009 i686 GNU/Linux
slmagicbox@ubuntu904server:~$ dpkg -l | grep vsftpd
ii vsftpd 2.0.7-0ubuntu1 The Very Secure FTP Daemon
原始配置文件/etc/vsftpd.conf:
本配置文件为安装vsftpd后默认生成的,以“#”开头为注释项
# Example config file /etc/vsftpd.conf
listen=YES #以standalone模式运行vsftpd
#listen_ipv6=YES
anonymous_enable=YES #允许匿名用户访问
#local_enable=YES
#write_enable=YES
#local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES #当用户首次进入FTP服务器的目录时,显示该目录下的message消息,默认为.message文件,可以用message_file来定义
xferlog_enable=YES #启用日志,默认路径/var/log/vsftpd.log
connect_from_port_20=YES #数据连接使用默认的ftp-data端口(20端口)
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
# chroot_list_enable below.
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
# Debian customization
secure_chroot_dir=/var/run/vsftpd #忽略
pam_service_name=vsftpd #忽略
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #忽略
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #忽略
修改后功能:
首先我们在/home/ftp目录下建立了以下两个子目录
* ftphome1
* ftphome2
然后,我们创建3个虚拟用户,密码分别是用户名后加"test"
* ftpvuser1
* ftpvuser2
* ftpvuser3
* 用户ftpvuser1 的主目录为 ftphome1 ,只读权限
* 用户ftpvuser2 的主目录为 ftphome2,只读权限
* 用户ftpvuser3 的主目录仍为 ftphome2 ,拥有所有权限
步骤:
1. 创建虚拟用户数据库
1.1 创建文本文件/etc/vsftpd.ftpvuser_list,内容为:
ftpvuser1
ftpvuser1test
ftpvuser2
ftpvuser2test
ftpvuser3
ftpvuser3test
slmagicbox@ubuntu904server:~$ sudo touch /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser1" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser1test" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser2" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser2test" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser3" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ echo "ftpvuser3test" |sudo tee -a /etc/vsftpd.ftpvuser_list
slmagicbox@ubuntu904server:~$ sudo cat /etc/vsftpd.ftpvuser_list
确认显示内容与上面列表的相同。
1.2 安装db4.6-util工具(Berkeley v4.6 database utilities),生成数据库/etc/vsftpd_vuser.db
slmagicbox@ubuntu904server:~$ sudo apt-get install db4.6-util
slmagicbox@ubuntu904server:~$ sudo db4.6_load -T -t hash -f /etc/vsftpd.ftpvuser_list /etc/vsftpd_vuser.db
slmagicbox@ubuntu904server:~$ sudo chmod 600 /etc/vsftpd_vuser.db
2. 配置PAM文件
2.1 新建/etc/pam.d/vsftpd.vuser 内容为:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_vuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd_vuser
slmagicbox@ubuntu904server:/etc/pam.d$ sudo vim /etc/pam.d/vsftpd.vuser
slmagicbox@ubuntu904server:/etc/pam.d$ cat /etc/pam.d/vsftpd.vuser
2.2 修改配置文件 /etc/vsftpd.conf
pam_service_name=vsftpd.vuser #该名字与上面的文件名对应
3.为虚拟用户创建本地系统用户
3.1 新建一个系统用户ftpvuser,用户家目录为/home/ftp, 用户登录终端设为/bin/false(该用户不能登录系统)
slmagicbox@ubuntu904server:/etc/pam.d$ sudo useradd ftpvuser -d /home/ftp -s /bin/false
slmagicbox@ubuntu904server:/etc/pam.d$ sudo chown ftpvuser:ftpvuser /home/ftp
4.编辑配置文件/etc/vsftpd.conf
4.1
listen=YES #以standalone模式运行vsftpd
anonymous_enable=NO #禁止匿名
dirmessage_enable=YES #显
示目录下的message消息
xferlog_enable=YES #启用日志
xferlog_file=/var/log/vsftpd.log #设定日志路径
xferlog_std_format=YES #使用标准日志格式
chroot_local_user=YES #限定用户在家目录
guest_enable=YES #启用虚拟用户
guest_username=ftpvuser #虚拟用户帐号
#user_config_dir=/etc/vsftpd_user_conf #先不启用,后面启用时再说明
pam_service_name=vsftpd.vuser #设置pam服务名,上面2.2已经说明
local_enable=YES
secure_chroot_dir=/var/run/vsftpd #忽略
5. 区分虚拟用户权限
上面的设置,3个虚拟用户都可以正常登录,但是3者的家目录都在/home/ftp,权限都是一样的,接下来我们通过设置来区分3个虚拟的权限。
5.1 首先启用上面配置文件中的user_config_dir项
user_config_dir=/etc/vsftpd_user_conf #启用用户配置文件,设定配置文件存放目录
5.2 创建配置文件存放目录,并新建用户配置文件,文件名与虚拟用户名相同
slmagicbox@ubuntu904server:~$sudo mkdir /etc/vsftpd_user_conf
slmagicbox@ubuntu904server:~$cd /etc/vsftpd_user_conf
slmagicbox@ubuntu904server:/etc/vsftpd_user_conf$sudo touch ftpvuser1 ftpvuser2 ftpvuser3
5.3 编辑虚拟用户配置文件
ftpvuser1内容为:
local_root=/home/ftp/ftphome1
ftpvuser2内容为:
local_root=/home/ftp/ftphome2
ftpvuser3内容为:
local_root=/home/ftp/ftphome1
write_enable=YES #开启全局上传(写)权限
anon_world_readable_only=NO #关闭匿名用户只读(下载)权限
anon_upload_enable=YES #开启匿名用户上传权限
anon_mkdir_write_enable=YES #开启匿名用户建目录权限
anon_other_write_enable=YES #开启匿名用户除上传和建目录之外的写权限(如重命名,删除等)
现在达到我们想要的效果了。^_^