Centos7部署FTP服务
环境声明
服务器
- 系统: Centos7.4
- IP地址: 192.168.132.111
- 网卡模式: 桥接模式
- 软件版本: vsftpd-3.0.2-22 | pam-1.1.8-18 | pam-devel-1.1.8-18
环境部署
服务安装
1 | yum install vsftpd -y |

常用配置项
1 | # 允许匿名登录 |
1 | # 允许本地用户登录ftp |
1 | # 主动模式:FTP服务端主动向FTP客户端发起连接请求。 |
配置文件
| 文件路径 | 文件说明 |
|---|---|
| /etc/vsftpd/vsftpd.conf | vsftp主配置文件 |
| /etc/vsftpd/user_list | 当userlist_deny=NO时仅允许该文件内的用户登录FTP,为YES时该文件内的用户不允许登录(默认YES) |
| /etc/vsftpd/ftpusers | 该文件内的用户不允许登录FTP |
| /etc/vsftpd/chroot_list | 该文件内的用户可进行目录浏览(需要自行创建文件) |
ftp常用命令
1 | cd 目录 # 切换目录 |
匿名开放模式
项目需求
- 服务器IP: 192.168.132.111
- 家目录: /var/anon_dir/
- 备注: 要求可以使用匿名用户登录,且匿名用户的权限为可上传、可下载,其他均不允许
创建匿名用户的家目录,并将该目录的权限设置为755,必须是755否则登陆时报错500 OOPS: vsftpd: refusing to run with writable root inside chroot()
1 | mkdir /var/anon_dir/ |
修改主配置文件vsftpd.conf,实现上述功能
1 | anonymous_enable=YES |
修改完成后将服务重启,防火墙放行服务后进行测试
1 | systemctl restart vsftpd |
如果上传文件报错553 Could not create file.,则需要检查一下selinux有没有关闭,如关闭之后还是不行则需要在家目录下再创建一个文件夹,赋予该文件夹777权限,再进入该文件夹进行上传测试

如果下载文件报错550 Failed to open file.,则是因为该文件没有读取权限,将需要下载的文件授予读取权限后再下载即可。
但匿名用户每次上传文件后想再次下载都要服务器重新该权限,可以在主配置文件中添加anon_umask=011来设置上传的文件的权限。umask的值换算成文件权限则为777 - umask,如umask=022则文件权限为777-022=755,但有时候umask权限设置完后还是不会生效,不知道为什么
1 | chmod +r 文件名 |


本地用户模式
项目需求
- 服务器IP: 192.168.132.111
- 家目录: /home/用户名/
- 用户名: f1 | f2 | f3 | fadmin
- 用户配置目录: /etc/vsftpd_user_conf/
- 备注: 密码与用户名相同,
f1用户具有上传下载权限,f2用户具有下载权限、f3用户不允许登录、fadmin用户具有上传、下载、目录浏览权限
创建本地用户,将用户的密码设置为与用户名相同,将用户的家目录权限设置为755
1 | useradd f1 |


修改主配置文件vsftpd.conf,创建文件夹/etc/vsftpd_user_conf用于存储用户配置信息
1 | local_enable=YES |
在用户配置目录下创建与用户名相同的文件,并根据项目要求写入配置文件。如果不创建子配置文件时默认根目录为用户的家目录,权限为完全控制
1 | # f1用户配置 |

创建文件/etc/vsftpd/chroot_list用来指定可以目录浏览的用户

在文件/etc/vsftpd/ftpusers末尾加入f3,禁止该用户登录ftp服务

测试f1权限(可上传、下载)

测试f2权限(可下载)

测试f3权限(不可登录)

测试fadmin权限(可上传、下载、目录浏览)

虚拟用户模式
项目需求
- 服务器IP: 192.168.132.111
- 家目录: /var/ftproot/
- 宿主用户: ftpuser
- 虚拟用户: ftp1 | ftp2 | ftp3
- 用户配置目录: /etc/vsftpd_user_conf/
- 备注: 密码与用户名相同,
ftp1用户具有上传下载权限,ftp2用户具有下载权限、ftp3用户具有上传、下载、创建文件夹、删除文件、重命名、目录浏览权限
安装依赖
1 | yum install pam pam-devel -y |

创建用户ftpuser作为虚拟用户的宿主用户,再创建文件夹作为ftp的根目录,并将该文件夹所有者设置为ftpuser
1 | useradd -s /sbin/nologin ftpuser |

编辑主配置文件,修改成如下所示后保存退出
1 | local_enable=YES # 允许本地用户登录 (必要,默认开启) |
继续在/etc/vsftpd/目录下创建用户文件users,内容为一行账号一行密码。再使用db_load生成用户据数据库
1 | db_load -T -t hash -f users users.db |

修改pam的配置文件/etc/pam.d/vsftpd,将原来的配置项全部注释,添加上如下几行
1 | auth required pam_userdb.so db=/etc/vsftpd/users |

再创建用户的配置文件用来划分权限,这是使用与匿名用户一样的配置项
1 | # ftp1 |

将ftp3添加至目录浏览的用户组中,所有配置完成后重启服务进行测试(有时候权限会错乱,不知道具体原因)
1 | echo "ftp3" >> /etc/vsftpd/chroot_list |
多端口多服务
项目需求
- 服务器IP: 192.168.132.111
- 服务端口: 2121
- 家目录: /var/new_ftp/
- 配置文件: /etc/vsftp/vsftpd_2121.conf
- 备注: 在原来的基础上创建一个端口为2121的新服务,该服务与原来的服务互相独立。该服务允许匿名用户登录,且匿名用户可上传、下载、重命名、创建文件夹等操作
将原来的配置文件复制出来一份,将名字修改为vsftpd_2121.conf
1 | cd /etc/vsftpd |
修改vsftpd_2121.conf,监听2121端口,开启匿名用户相关的权限
1 | listen_port=2121 |
复制vsftpd服务文件,修改vsftpd_2121.conf文件中的ExecStart指向的配置文件
1 | cd /usr/lib/systemd/system/ |

修改完成后启动服务,防火墙放行端口后测试
1 | systemctl start vsftpd_2121.service |

如需配置虚拟用户可以修改配置文件vsftpd_2121.conf,指定pam_service_name的配置文件
1 | pam_service_name=vsftpd_2121 |
再创建相关的用户数据库后,复制pam下vsftpd的配置文件,修改该文件的用户数据库路径即可
1 | cd /etc/pam.d/ |
1
```





