说明:

vsftpd的版本:vsftpd-3.0.2-22.el7.x86_64

ftp 根目录 : /data/ftp
ftp 配置文件目录:/etc/vsftpd
ftp 虚拟用户权限配置文件目录:/etc/vsftpd/vuser_config

实现目标:
1)匿名用户可以登录,但是不能访问虚拟用户的宿主目录,只能访问共享目录
2)虚拟用户对自己的宿主目录有任何权限,且只能在自己宿主目录中操作

1.安装vsftpd,ftp和libdb-utils(需要安装db包,用来加密虚拟用户的账户信息,centos7默认安装好了)
# yum install vsftpd ftp -y
2.创建本地用户[用于映射虚拟用户]
#建立ftp用户目录
# mkdir -p /data/ftp
#创建用户
# useradd -d /data/ftp vuser -s /sbin/nologin
#更改权限和主组权限
# chmod 755 /data/ftp
# chown vuser.root /data/ftp

3.创建虚拟用户[用户和密码]文件
# vim /etc/vsftpd/vuser-list
abc [用户名]
123456 [密码]
bcd [用户名]
123123 [密码]

4.加密用户密码文件生成数据库文件
# cd /etc/vsftpd/
# db_load -T -t hash -f ./vuser-list ./vuser-list.db
# chmod 600 vuser-list.db

5.创建PAM认证文件
# vi /etc/pam.d/vuser.vu
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser-list #注意64位系统写/lib64这个路径,32位系统要写成/lib,下同!
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser-list

6.修改配置文件
# vi /etc/vsftpd/vsftpd.conf
#允许匿名用户访问
anonymous_enable=yes
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
#修改ftp默认目录到/data/ftp下面
chroot_local_user=YES
local_root=/data/ftp
anon_root=/data/ftp
#pam认证文件
pam_service_name=vuser.vu
#虚拟用户权限配置目录
user_config_dir=/etc/vsftpd/vuser_config
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
one_process_model=NO
#开启虚拟用户
guest_enable=YES
guest_username=vuser

===================================

注意,如果vsftpd的版本是:vsftpd-2.2.2-24.el6.x86_64

那么vsftpd.conf的配置文件修改如下,其他操作一样,不然的话2.2.2版本启动时会遇到各种问题:

listen=YES
local_enable=YES
anon_umask=022
anonymous_enable=YES
pam_service_name=vuser.vu
userlist_enable=YES
chroot_local_user=YES
local_root=/data/ftp
anon_root=/data/ftp
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/vuser_config
userlist_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

===================================

7.重启vsftpd服务
# service vsftpd restart

8.创建虚拟用户[权限]配置文件
# mkdir /etc/vsftpd/vuser_config
# cd /etc/vsftpd/vuser_config
# vi abc [有所有权限]
#设置登录后禁锢的目录
local_root=/data/ftp/abc
#开放写权限
write_enable=yes
#开放下载权限
anon_world_readable_only=no
#开放上传权限
anon_upload_enable=yes
#开放创建目录的权限
anon_mkdir_write_enable=yes
#开放删除和重命名的权限
anon_other_write_enable=yes

# vi bcd [只有上传下载的权限]
local_root=/data/ftp/bcd
anon_upload_enable=yes
anon_world_readable_only=no

9.更改虚拟用户目录权限
#如果不更改的话,匿名用户是可以访问到的
# mkdir /data/ftp/abc && chmod 700 /data/ftp/abc
# mkdir /data/ftp/bcd && chmod 700 /data/ftp/bcd
# chown -R vuser.root /data/ftp

10.测试访问。

11.添加用户(不需要重启vsftpd服务)
#添加新用户test,密码为abcd
# vi /etc/vsftpd/vuser-list
abc
123456
bcd
123456
test
abcd
#创建test用户对应的目录并授权
# mkdir /data/ftp/test && chown vuser:root /data/ftp/test
#重新生成加密的db文件
# cd /etc/vsftpd
# db_load -T -t hash -f ./vuser-list ./vuser-list.db

# 删除用户就是把添加用户的操作撤销,然后删除加密的db文件重新生成即可。

12.测试访问,此时添加的test用户的/data/ftp/test目录的权限是755,匿名用户可以登录。若要屏蔽,修改权限为700即可。

===============================================

错误处理:
错误1:226 Transfer done (but failed to open directory)
解决:selinux 和防火墙导致

错误2:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决:配置文件中加入 allow_writeable_chroot=YES 针对标准vsftpd(standonly)模式,然后重启ftp.

参考链接:http://blog.csdn.net/aerchi/article/details/78042443

最新文章

  1. 第12章 Linux系统管理
  2. Android Studio导入Vitamio多媒体开发框架
  3. 大数据之tachyon(未完版)
  4. 高效Web开发的10个jQuery代码片段(10 JQUERY SNIPPETS FOR EFFICIENT WEB DEVELOPMENT)
  5. barrier()函数
  6. offsetWidth、offsetleft 等图文详解
  7. [topcoder]IncreasingSubsequences
  8. Objective-C通过联合存储为类增加属性及原理解析
  9. Android 笔记
  10. Rational AppScan 扫描大型网站
  11. 在Linux下的找不同-打补丁
  12. cache buffer
  13. Linux入门之常用命令(13) crontab
  14. 从零开始搭建Vue组件库 VV-UI
  15. python 中的类
  16. H5与Native交互之JSBridge技术
  17. Oracle课程档案,第三天
  18. RTMP与HLS压力测试工具安装与配置
  19. PHP与Python哪个做网站产品好?
  20. 记录怎样把安全证书导入到java中的cacerts证书库

热门文章

  1. Delphi 的RTTI机制浅探3(超长,很不错)
  2. Delphi下IOC 模式的实现(反转模式,即Callback模式)
  3. OSGI资料
  4. Linux实现彩色提示符
  5. 《C++ Primer》读书笔记 第二章
  6. spring常见十大异常
  7. Java入门网络编程-使用UDP通信
  8. Python自学day-5
  9. 通过phpmyadmin设置数据库密码后若出现phpmyadmin拒绝访问的情况
  10. C++ 洛谷 P2657 [SCOI2009]windy数 题解