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