CentOS 7.0 FTP服务器简单搭建 2019-12-22 程序之旅 2 条评论 2507 次阅读 ## CentOS 7.0 FTP服务器简单搭建 [toc] 在下载并安装软件之前,先弄清楚FTP(File Transfer Protocol)的三种登录模式和两种工作模式,针对不同的登录方式进行配置FTP服务器的文件目录。也是为了防止根据步骤安装完成后,发现并不是自己想要的,让自己少走弯路,同时也有感觉今后还是会有再次搭建ftp服务器的可能,做好记录。 ### 三种模式 FTP支持的三种认证模式: - 匿名用户模式:顾名思义,就是不需要用户名和密码认证直接登录到FTP服务器。 - 本地用户模式:通过本地用户和设置密码的方式,控制登录FTP的用户,本地用户登录模式相比匿名用户登录更加安全。 - 虚拟用户模式:FTP服务的专有用户,只用于访问FTP服务提供的资源,不能访问Linux系统中的其他资源。相比本地用户模式更加安全。 ### 两种工作模式 FTP的两种工作模式: FTP与其他服务不同,它是同时使用两个端口来进行传输操作,一个位数据端口,另一是个命令端口。通常21端口是命令端口,20端口是数据端口。 - 主动模式:ftp服务器没有与客户端之间的传输端口,客户端会任意分配端口与服务器连接。 ```sequence # 主动模式 客户端-ftp服务器: 请求21端口登录 ftp服务器--客户端: 登录成功,初始化连接 客户端-ftp服务器: PORT 1027,发送数据端口 ftp服务器--客户端: FTP服务器20端口\n与1027端口建立连接 客户端-ftp服务器: 1027端口发送数据 ``` - 被动模式:客户端随机分配可用端口与ftp连接,ftp服务器的命令端口没有改变,数据传输端口由ftp服务器分配。 ```sequence # 被动模式 客户端-ftp服务器: 请求21端口登录 ftp服务器--客户端: 响应请求,登录成功 客户端-ftp服务器: PASV命令 ftp服务器--客户端: PORT 2048,返回端口,\n告诉客户端监听哪个服端口 客户端-ftp服务器: 发送数据到2048端口 ``` ### 搭建FTP服务器 搭建环境:CentOS 7 搭建工具:YUM #### 搭建过程 **yum安装** ```shell $ yum install vsftpd -y ``` **启动服务** ```shell $ systemctl start vsftpd $ systemctl enable vsftpd # 开机重启服务 ``` #### 配置服务 程序安装好后默认使用的是匿名模式,无需密码就能直接访问FTP服务器资源,默认的文件地址为`/var/ftp/pub`。这里推荐一个支持FTP服务的软件FileZilla,这里直接上[链接](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2019/12/22/06124286695055/FileZilla_3.44.1_win64.zip) ##### 本地用户模式 ```shell $ useradd iot # 创建用户 # $ userdel iot $ passwd iot # 用户密码设置 $ mkdir /var/ftp/iot # 创建服务目录 $ chown -R iot:iot /var/ftp/iot/ # 修改目录拥有者为iot ``` 修改**vsftpd.conf** ```shell $ cd /etc/vsftpd/ $ cp vsftpd.conf vsftpd.conf.bak # 拷贝一份,避免修改失误还能再来 $ vim /etc/vsftpd/vsftpd.conf # 编辑文件 ``` 修改内容如下 ```shell # 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 # 被动模式下,建立数据传输可使用的端口范围最大值 ``` 创建用户列表 ```shell $ vim /etc/vsftpd/chroot_list ``` > 由于并没有给任何用户权限可以访问系统中的其他目录,所以为空 > > 有一些服务器,例如阿里云服务器,需要配置安全组的端口开发,所以这里也需要多加注意,并且关闭39000 - 41000的防火墙 ![image-20191222155736409.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2019/12/22/060331322949162/image-20191222155736409.png) 如果添加用户能够访问的其他路径的权限 ```shell $ vim /etc/vsftpd/chroot_list # chroot_list iot ``` ![image-20191222160037702.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2019/12/22/060352086905549/image-20191222160037702.png) ##### 虚拟用户模式 虚拟用户模式相比本地用户模式更加安全,用户只能访问系统提供的服务资源,进一步增强了FTP服务器的安全性。 虚拟用户的用户认证是通过pam方式去认证的,pam文件里面指定了认证的db文件,db文件又是通过明文用户名和密码文件生成而来。 配置pam文件,注释所有的内容,末尾添加一下内容 ```shell $ 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文件 ```shell $ vim /etc/vsftpd/vuser_passwd.txt # 单行为用户,双行位密码 iot2 passwd $ cd /etc/vsftpd $ db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db ``` ![image-20191222162846567.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2019/12/22/060424179843691/image-20191222162846567.png) 如果想添加用户,可以在`vuser_passed.txt`中添加用户,之后重新生成db文件。 配置`vsftpd.conf` ```shell $ 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 # 被动模式下,建立数据传输可使用的端口范围最大值 ``` 配置虚拟用户的权限和目录 ```shell $ 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登录 ``` 创建本地用户 ```shell $ useradd -s /sbin/nologin iot2 # 创建本地用户 ``` > 不创建用户会有这个报错响应: 500 OOPS: cannot locate user entry:iot2 最后的是开放端口的命令行 ``` shell $ 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" 打赏: 微信, 支付宝 标签: linux, centos, ftp 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
刷个阅读量 +1
可以的