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
```





