说明:ftp有三种登录方式:匿名登录、本地用户登录和虚拟用户登录。匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous;本地用户登录:使用系统用户登录,在/etc/passwd中;虚拟用户登录:这是ftp专有用户,有两种方式实现虚拟用户,本地数据文
说明:
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_conf //指定虚拟用户配置文件,vsftpd_user_conf是文件夹
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_conf //将所有虚拟用户的权限设置统一放在/etc/vsftpd/user_conf,需要vsftpd.conf配置user_config_dir项
# vim /etc/vsftpd/user_conf/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_conf/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=0777
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=apache
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_config_dir
ssl_enable=YES
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部分为安全认证方面的,可以不要