CentOS搭建FTP【vsftpd 】(整合版)
介绍 vsftpd 的文章不少,但是总是不够全面,故整理整合在一起,方便查阅。
简介 -----------------------------------------
在 Linux 上有很多开源的 FTP 服务器可用。最流行并且最常被使用的服务器包括PureFTPd, ProFTPD, and vsftpd
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
vsftpd 的名字代表”very secure FTP daemon”, 安全是它的开发者 Chris Evans 考虑的首要问题之一。在这个 FTP 服务器设计开发的最开始的时候,高安全性就是一个目标。
检查 -----------------------------------------
检查是否已安装vsftpd
rpm -qa | grep vsftpd
安装 -----------------------------------------
通过yum安装:yum install -y vsftpd
配置文件 -----------------------------------------
相关配置文件
/etc/vsftpd/vsftpd.conf
//主配置文件,核心配置文件
/etc/vsftpd/ftpusers
//黑名单,这个里面的用户不允许访问FTP服务器
/etc/vsftpd/user_list
//白名单,允许访问FTP服务器的用户列表
配置参数 -----------------------------------------
1.不允许匿名访问
anonymous_enable=NO
2.允许使用本地帐户进行FTP用户登录验证
local_enable=YES
3.使用户不能离开主目录
当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
chroot_local_user=YES #阻止 FTP 用户 访问任何他们主目录外的文件
chroot_list_enable=YES #可以不设置(启用用户列表)
chroot_list_file=/etc/vsftpd/chroot_list #可以不设置 (设定用户名和密码)
注:若使用了 chroot_list_file 机制, 如果/etc/vsftpd/chroot_list不存在,则需要创建该文件
配置文件最后添加, 使用这个选项,你必须授权你的用户对他的主目录写权限
allow_writeable_chroot=YES
要不然会报错
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
用户配置 -----------------------------------------
另外一种禁止ssh登录的方法?
默认情况下,当创建一个用户时,如果没有明显的指定,这个用户将可以通过 SSH 访问到服务器。
想要禁用 shell 访问,我们将会创建一个新的 shell 程序,它将会简单打印一个信息,告诉用户,他们仅仅被允许访问 FTP。
运行下面的命令来创建
/bin/ftponly
shell 并且使它可执行:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly sudo chmod a+x /bin/ftponly
将这个新的 shell 附加到 /etc/shells
文件中:
echo "/bin/ftponly" | sudo tee -a /etc/shells
修改这个用户 shell 到 /bin/ftponly
:
sudo usermod newftpuser -s /bin/ftponly
使用同样的命令来修改其他用户的 shell,限制他们仅仅只能通过 FTP 访问。
ftptx
5、注意记得授权用户ftptx 目录权限,否则无法读写
chown -R ftpadmin.ftpadmin /path/you/set
5 、限制用户登录
想要允许指定用户登录 FTP 服务器,在
userlist_enable=YES
一行下面添加下面的配置:
userlist_file=/etc/vsftpd/user_list userlist_deny=NO
当这个选项启用时,你需要通过将用户名添加到 /etc/vsftpd/user_list
(一个用户一行)来明确指定哪些用户可以登录。
创建一个 FTP 用户的示例
想要测试 FTP 服务器,你需要创建一个新用户。如果你已经拥有一个用户,你仅仅需要让他可以访问 FTP 访问,跳过第一步。
01. 创建一个新用户,名称为
newftpuser
:
sudo adduser newftpuser
下一步,你需要设置用户密码:
sudo passwd newftpuser
02. 添加用户到允许的 FTP 用户列表:
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
03. 创建 FTP 目录树,并且设置正确的权限:
sudo mkdir -p /home/newftpuser/ftp/upload sudo chmod 550 /home/newftpuser/ftp sudo chmod 750 /home/newftpuser/ftp/upload sudo chown -R newftpuser: /home/newftpuser/ftp
正如前面所讨论的,用户将会被允许上传他们的文件到 ftp/upload
目录。
此时,你的 FTP 服务器完全可用,并且你可以使用任何可以配置 TLS 加密的 FTP客户端,例如 FileZilla 来连接你的 FTP 服务器
另外,如果觉得以后管理ftp用户名嫌麻烦,可以使用centos官方发布的脚本管理。地址如下:
服务启动 -----------------------------------------
老版本方式
chkconfig vsftpd on
//设置开机自启动 (centos 8 请用 service vsftpd restart)
service vsftpd restart
//重新启动ftp服务 (centos 8 请用 service vsftpd restart)
systemctl enable vsftpd.service // 开机启动
systemctl start vsftpd.service // 启动
systemctl stop vsftpd.service // 停止
systemctl restart vsftpd.service // 重启
systemctl status vsftpd.service // 查看状态
netstat -antup | grep ftp //查看ftp服务端口
配置防火墙(要打开21端口)-----------------------------------------
netstat -ntlp检查21端口是否开启
其他设置 -----------------------------------------
主动模式
Port_enable=YES 开启主动模式 Connect_from_port_20=YES 当主动模式开启的时候 是否启用默认的20端口监听 Ftp_date_port=%portnumber% 上一选项使用NO参数是 指定数据传输端口
被动模式,示例 数据端口范围:50000-55000 pasv_enable=YES 开启被动模式 pasv_min_port=50000 被动模式最低端口 pasv_max_port=55000 被动模式最高端口
老版本防火墙开启这段端口
iptables中开放这段端口
service iptables start 打开防火墙
iptables -I INPUT -p tcp --dport 50000:55000 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
Centos8 开启防火墙(阿里云不用设置,默认防火墙失效 )
firewall-cmd --zone=public --add-port=20-21/tcp --permanent #添加20、21端口
firewall-cmd --zone=public --add-port=50000-55000/udp --permanent #添加一个数据传输端口50000-55000
firewall-cmd --reload #热加载
在被动模式,服务器做了NAT,例如云主机,这时候我们用特定的IP访问机器,其实还转了一层。FTP客户端访问机器可能会没响应。具体情况为登录成功,但是list目录和文件的时候卡住。
这时候我们用 lsof -i:21
vsftpd 22411 nobody 0u IPv4 68905 0t0 TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED) vsftpd 22411 nobody 1u IPv4 68905 0t0 TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED)
其他 -----------------------------------------
1. 异常,错误
1. 500错误,添加目录权限后会出现
重启vsftp
2. 500 OOPS: cannot change directory
解决方法:
setsebool -P ftpd_disable_trans 1
service vsftpd restart
原因:这是因为服务器开启了selinux,这限制了FTP的登录
2. 使用 SSL/TLS 加密传输
为了使用 SSL/TLS 加密 FTP 传输, 你需要一个 SSL 证书,并且配置 FTP 服务器使用它。
你可以使用一个由可信证书授权商颁发的SSL 证书或者创建一个 自建证书。
如果你由一个域名或者一个子域名指向 FTP 服务器的公网 IP 地址,你可以很容易生成一个免费的Let’s Encrypt SSL证书。
在这个指南中,我们将会使用
openssl
生成一个自签名的 SSL 证书。
下面的命令将会创建一个2048位的私钥 和 10年有效期的自签名证书。私钥和证书都被保存在同一个文件:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
一旦 SSL 证书被创建,打开 vsftpd 配置文件:
sudo nano /etc/vsftpd/vsftpd.conf
找到 rsa_cert_file
和 rsa_private_key_file
指令,修改它们的值到 pam
文件路径 并且设置 ssl_enable
指令到 YES
:
rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES
如果没有指定其他的,那么 FTP 服务器将会仅仅使用 TLS 来进行安全连接。
3. 配置文件参考
========================================================================