本地文件认证vsftp虚拟用户

说明:
ftp有三种登录方式:匿名登录、本地用户登录和虚拟用户登录。匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous;本地用户登录:使用系统用户登录,在/etc/passwd中;虚拟用户登录:这是ftp专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。
ftp虚拟用户是FTP服务器的专有用户,使用虚拟用户登录ftp,只能访问FTP服务器提供的资源,大大增强了系统的安全。
本文实现本地文件验证虚拟用户,虚拟用户依托在本地用户www。这样更新代码到站点目录就不会出现权限问题(例如站点目录为www.www,755,虚拟用户依托在其它本地用户,如vsftpd,就会出现无法上传)。上传的文件,目录属主属组都是www。
centos系统,vsftpd没有安装的yum install vsftpd就可以了,目前在考虑是否有安全方面的问题。

实现:
1.添加虚拟用户口令文件

# vim /etc/vsftpd/vsftpuser.txt  //添加虚拟用户名和密码,一行用户名,一行密码,依此,奇数行为用户名,偶数行为密码
bob
123456
mark
123456

 
2.生成虚拟用户口令认证文件 //将刚添加的vsftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。
首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。

# rpm -qa|grep db4-utils
# rpm –ivh db4-utils-4.3.29-9.fc6.i386.rpm
# db_load -T -t hash -f /etc/vsftpd/vsftpuser.txt /etc/vsftpd/vsftpuser.db  //使用db_load命令生成虚拟用户口令认证文件

 
3.编辑vsftpd的pam认证文件

# vim /etc/pam.d/vsftpd.v  //将里面其他的都注释掉,添加以下内容
32位系统:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpuser  //db=...与第2步生成的虚拟用户口令认证文件名一致
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpuser
64位系统:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpuser

 
4.建立本地映射用户并设置宿主目录权限,所有的ftp虚拟用户需要使用一个本地用户,这个系统用户不需要密码

# grep www /etc/passwd
www:x:508:509::/home/www:/sbin/nologin  //正常是通过useradd –d /home/vftpsite –s /sbin/nologin vsftpuser添加vsftpuser用户,我这里,因为虚拟用户依托在www,就直接使用www用户
# chmod 700 /home/www  //未确认,此家目录是否一定需要存在

 
5.配置vsftpd.conf

# vim /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list  //这二项指定只有chroot_list内的用户无法切出家目录

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_allow_list  //这三项指定只有user_allow_list内的用户可以登陆ftp

guest_enable=YES               //开启虚拟用户
guest_username=www             //ftp虚拟用户对应的系统用户www
pam_service_name=/etc/pam.d/vsftpd.v        //pam认证文件,为第3步生成的vsftpd的pam认证文件
user_config_dir=/etc/vsftpd/user_config_dir  //指定虚拟用户配置文件,user_config_dir是文件夹
virtual_use_local_privs=YES    设置为YES时,虚拟用户使用与本地用户相同权限,设置为NO时,虚拟用户使用与匿名用户相同权限  (必须开启)

 
6.添加/etc/vsftpd/chroot_list,user_allow_list用户

# vim /etc/vsftpd/chroot_list  //添加无法切出家目录的用户,一行一个用户,内容如下
bob
mark

 

# vim /etc/vsftpd/user_allow_list  //添加可以登录vsftpd的用户,一行一个用户,内容如下
bob
mark

 
7.针对不同的虚拟用户设置不同的权限

# mkdir /etc/vsftpd/user_config_dir  //将所有虚拟用户的权限设置统一放在/etc/vsftpd/user_config_dir,需要vsftpd.conf配置user_config_dir项
# vim /etc/vsftpd/user_config_dir/bob  //为虚拟用户bob建立单独的配置文件,文件名称和用户名相同,内容如下
local_root=/home/www/bob    //设置虚拟用户登录后的主目录
anon_world_readable_only=NO   //具有浏览FTP目录和下载权限
anon_upload_enable=YES        //具有上传文件权限
anon_mkdir_write_enable=YES   //具有建立和删除目录的权利
anon_other_write_enable=YES   //具有文件改名和删除文件的权利

 

# vim /etc/vsftpd/user_config_dir/mark  //为虚拟用户mark建立单独的配置文件
local_root=/home/www/mark

 
8. 重启vsftpd服务

# /etc/init.d/vsftpd restart

 
9. 测试虚拟用户登录FTP

# ftp 127.0.0.1  //连接到127.0.0.1
220 Welcome to *** FTP server
用户(127.0.0.1(none)):markwang
331 Please specify the password.
密码:
230 Login successful.

 
附录:
附录1.目前vsftpd.conf的配置

#the information about ftpd
ftpd_banner=welcome to FTP Server!
#banner_file=/etc/vsftpd/welcome.txt

listen=YES

dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
pasv_min_port=30000
pasv_max_port=30999
idle_session_timeout=600
data_connection_timeout=300
ascii_upload_enable=YES
ascii_download_enable=YES

chown_uploads=YES
chown_username=root

#the settings about anonymous
anonymous_enable=NO
anon_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO

local_enable=YES
write_enable=YES
local_umask=022
file_open_mode=0666

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
pam_service_name=/etc/pam.d/vsftpd.v
# to decide whether the local user have the permission to access the ftp
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_allow_list

#tcp_wrappers=YES
max_clients=10
max_per_ip=5
local_max_rate=50000
use_localtime=YES
guest_enable=YES
guest_username=www
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_config_dir

ssl_enable=NO
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem

最后ssl部分为安全认证方面的,可以不要

发表评论

邮箱地址不会被公开。 必填项已用*标注