VSFTP虚拟用户的配置
环境:rhel6.5-x64
方法一:使用预设配置
首先安装vsftpd软件包 yum -y install vsftpd //有可用的yum源
然后cd /usr/local/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS
然后查看置README按步骤即可完成设
#######简单的操作是将设置好的配置文件全部拷贝到相应的目录重启服务即可
方法二:自己手动配置
1、创建一个本地的用户,用于虚拟用户的授权
useradd -d /home/ftpsite -s /sbin/nologin virtual //指定ftp站点和本地用户名
目录会自动创建,注意指定的ftp站点virtual必须有完全权限
可以在下面创建一个文件便于一会测试使用,文件virtual需有权限
2、建立虚拟用户的数据库文件
首先先建立一个用户名和密码的文本文件,用户名和密码各占一行,如:login.txt
tom
123
zhangsan
456
然后生成数据库文件(前提是必须安装了db4-utils-4.7.25-18.el6_4.x86_64,某些系统是db3)
db_load -T -t hash -f login.txt /etc/vsftpd/login.db //这里-f后面的文件必须是前面的用户名和密码文件,后面生成数据库文件下面设置PAM模块的时候会使用
chmod 600 /etc/vsftpd/login.db //在生成数据库后就可以将前面的使用过的文本删除了
3、设置pam模块,认证虚拟用户
cp vsftpd.pam /etc/pam.d/ftp //直接拷贝软件文档所给模版时,需要将pam_userdb.so前面的路径去掉或者改成正确的或者直接删除pam_userdb.so前面的路径
或者修改/etc/pam.d/vsftpd,在文件中添加如下两行
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
###db就是指定虚拟用户数据库文件所在的路径,不需要加后缀.db
###FTP服务默认识别名为ftp的pam文件,如果名称不是ftp,则需要修改配置文件添加
pam_service_name=vsftpd //vsftpd就是pam文件的名称
4、修改配置文件
直接拷贝模版中的配置文件cp vsftpd.conf /etc/vsftpd/
###如果上述pam文件不是ftp,需要拷贝之后修改模版
或者是在原有的配置文件中修改一下主要参数
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES /禁锢家目录,就是前面设置的/home/ftpsite
guest_enable=YES //启用来宾用户,必须打开
guest_username=virtual //设置用于虚拟授权的本地用户名称,本次为vritual
listen=YES
listen_port=10021 //设置监听的端口,默认为21
pasv_min_port=30000
pasv_max_port=30999 //设置用于传输数据的临时端口的范围
#pam_service_name=vsftpd //设置pam认证的文件名称,如果为ftp则可以不写这项
5、启服务
Service vsftpd start
6、测试
ftp localhost 10021
然后输入虚拟用户测试下载
7、拓展:可以为每个用户设置单独的配置文件
在配置文件中添加下面这行,指定用户配置文件所在目录
user_config_dir=/etc/vsftpd_user_conf
然后创建这个目录mkdir /etc/vsftpd_user_conf
设置tom可以列出目录,在/etc/vsftpd_user_conf目录下创建文件tom
在tom文件中添加属于tom的配置
anon_world_readable_only=NO
设置zhangsan有查看,和上传的权限,在/etc/vsftpd_user_conf目录下创建文件zhangsan
在zhangsan配置文件中添加
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
这样的优势就是可以分别设置用户的权限,灵活,而且易于控制。
常见错误:
1、login fail
检测pam文件的名称看是否与配置文件中的一致,或者是看来宾用户是否开启
2、500 OOPS: cannot change directory:/home/virtual
这是因为开启了selinux后,ftp的布尔值没有开启
解决方法:要不关闭selinux
要不就设置setsebool -P ftpd_disable_trans 1
setsebool -P ftp_home_dir 1
###-P是永久生效的参数
然后查看getsebool -a | grep ftp
看上面修改的两项是否为on状态
然后重启服务
3、查看后报出一下错误
ls
227 Entering Passive Mode (192,168,4,150,120,110).
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
###列取目录失败,但是下载没有任何问题
解决方法:
在配置文件中添加一行anon_world_readable_only=NO,但可能涉及到安全问题