CentOS 7.0 FTP服务器简单搭建
在下载并安装软件之前,先弄清楚FTP(File Transfer Protocol)的三种登录模式和两种工作模式,针对不同的登录方式进行配置FTP服务器的文件目录。也是为了防止根据步骤安装完成后,发现并不是自己想要的,让自己少走弯路,同时也有感觉今后还是会有再次搭建ftp服务器的可能,做好记录。
三种模式
FTP支持的三种认证模式:
- 匿名用户模式:顾名思义,就是不需要用户名和密码认证直接登录到FTP服务器。
- 本地用户模式:通过本地用户和设置密码的方式,控制登录FTP的用户,本地用户登录模式相比匿名用户登录更加安全。
- 虚拟用户模式:FTP服务的专有用户,只用于访问FTP服务提供的资源,不能访问Linux系统中的其他资源。相比本地用户模式更加安全。
两种工作模式
FTP的两种工作模式:
FTP与其他服务不同,它是同时使用两个端口来进行传输操作,一个位数据端口,另一是个命令端口。通常21端口是命令端口,20端口是数据端口。
- 主动模式:ftp服务器没有与客户端之间的传输端口,客户端会任意分配端口与服务器连接。
sequenceDiagram
# 主动模式
客户端-ftp服务器: 请求21端口登录
ftp服务器--客户端: 登录成功,初始化连接
客户端-ftp服务器: PORT 1027,发送数据端口
ftp服务器--客户端: FTP服务器20端口\n与1027端口建立连接
客户端-ftp服务器: 1027端口发送数据
- 被动模式:客户端随机分配可用端口与ftp连接,ftp服务器的命令端口没有改变,数据传输端口由ftp服务器分配。
sequenceDiagram
# 被动模式
客户端-ftp服务器: 请求21端口登录
ftp服务器--客户端: 响应请求,登录成功
客户端-ftp服务器: PASV命令
ftp服务器--客户端: PORT 2048,返回端口,\n告诉客户端监听哪个服端口
客户端-ftp服务器: 发送数据到2048端口
搭建FTP服务器
搭建环境:CentOS 7
搭建工具:YUM
搭建过程
yum安装
$ yum install vsftpd -y
启动服务
$ systemctl start vsftpd
$ systemctl enable vsftpd # 开机重启服务
配置服务
程序安装好后默认使用的是匿名模式,无需密码就能直接访问FTP服务器资源,默认的文件地址为/var/ftp/pub
。这里推荐一个支持FTP服务的软件FileZilla,这里直接上链接
本地用户模式
$ useradd iot # 创建用户
# $ userdel iot
$ passwd iot # 用户密码设置
$ mkdir /var/ftp/iot # 创建服务目录
$ chown -R iot:iot /var/ftp/iot/ # 修改目录拥有者为iot
修改vsftpd.conf
$ cd /etc/vsftpd/
$ cp vsftpd.conf vsftpd.conf.bak # 拷贝一份,避免修改失误还能再来
$ vim /etc/vsftpd/vsftpd.conf # 编辑文件
修改内容如下
# vsftpd.conf
anonymous_enable=NO # 禁止匿名登录
local_enable=YES # 允许本地用户登录FTP
listen=YES # 监听 IPv4
# listen_ipv6=YES #注释关闭监听IPv4
# 文件的最底层添加
local_root=/var/ftp/iot # 本地用户登录后所在目录
chroot_local_user=YES # 全部用户被限制在主目录
chroot_list_enable=YES # 启用额外用户名单
chroot_list_file=/etc/vsftpd/chroot_list # 指定例外用户列表文件,列表中用户不被锁定在主目录
allow_writeable_chroot=YES
# 如果仅仅想主动模式,以下配置就无需添加
pasv_enable=YES # 开启被动模式
pasv_address=127.0.0.1 # FTP服务器公网IP地址
pasv_min_port=39000 # 被动模式下,建立数据传输可使用的端口范围最小值
pasv_max_port=41000 # 被动模式下,建立数据传输可使用的端口范围最大值
创建用户列表
$ vim /etc/vsftpd/chroot_list
由于并没有给任何用户权限可以访问系统中的其他目录,所以为空
有一些服务器,例如阿里云服务器,需要配置安全组的端口开发,所以这里也需要多加注意,并且关闭39000 - 41000的防火墙
如果添加用户能够访问的其他路径的权限
$ vim /etc/vsftpd/chroot_list
# chroot_list
iot
虚拟用户模式
虚拟用户模式相比本地用户模式更加安全,用户只能访问系统提供的服务资源,进一步增强了FTP服务器的安全性。 虚拟用户的用户认证是通过pam方式去认证的,pam文件里面指定了认证的db文件,db文件又是通过明文用户名和密码文件生成而来。
配置pam文件,注释所有的内容,末尾添加一下内容
$ getconf LONG_BIT # 查看多少位机子
$vim /etc/pam.d/vsftpd
# 64 位
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
# 32 位
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
生成db文件
$ vim /etc/vsftpd/vuser_passwd.txt
# 单行为用户,双行位密码
iot2
passwd
$ cd /etc/vsftpd
$ db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db
如果想添加用户,可以在vuser_passed.txt
中添加用户,之后重新生成db文件。
配置vsftpd.conf
$ vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO # 关闭匿名
chroot_local_user=YES # 用户被限制在主目录
allow_writeable_chroot=YES # 开启用户读写权限
listen=YES
listen_ipv6=NO
guest_enable=YES # 启动虚拟用户功能
user_config_dir=/etc/vsftpd/vuser_conf # 虚拟用户配置文件存放路径
pasv_enable=YES # 开启被动模式
pasv_address=127.0.0.1 # FTP服务器公网IP地址
pasv_min_port=39000 # 被动模式下,建立数据传输可使用的端口范围最小值
pasv_max_port=41000 # 被动模式下,建立数据传输可使用的端口范围最大值
配置虚拟用户的权限和目录
$ mkdir /var/ftp/iot2 # 虚拟用户文件目录
$ mkdir -p /etc/vsftpd/vuser_conf/ # 虚拟用户配置目录
$ vim /etc/vsftpd/vuser_conf/iot2 # 创建用户配置文件
local_root=/var/ftp/iot2 # 配置用户文件目录
write_enable=YES # 设置用户可写入
max_per_ip=10 # 设置同一账号允许10个ip登录
创建本地用户
$ useradd -s /sbin/nologin iot2 # 创建本地用户
不创建用户会有这个报错响应: 500 OOPS: cannot locate user entry:iot2
最后的是开放端口的命令行
$ firewall-cmd --zone=public --add-port=21/tcp --permanent
$ firewall-cmd --reload
ubuntu 的使用的是ufw,自行百度谷歌,这里只说了centos系统
FAQ
阿里云服务器搭建出现的问题
解决:安全组未开放端口,把端口开放就好了
pam_succeed_if(sshd:auth): requirement “uid >= 1000” not met by user “root”
解决:pam的问题,把之前所有的配置都注释掉