CentOS 8FTP服务器

FTP(文件传输协议)是一种客户端-服务器网络协议,允许用户在远程计算机之间传输文件。这里有很多可用于Linux的开源FTP服务软件,最流行最常用的FTP服务软件有 PureFTPd, ProFTPD, 和 vsftpd。在本教程中,我们将在CentOS 8[4]上安装vsftpd(非常安全的Ftp守护程序)。这是一个稳定,安全且快速的FTP服务器。我们还将向您展示如何配置vsftpd以限制用户访问其主目录,以及如何使用SSL / TLS加密数据传输。

vsftpd的安装包默认包含在CentOS软件仓库中,要安装它,只需用root帐号或拥有sudo权限的帐号运行如下命令:

bash 复制代码
#root帐号运行
dnf install vsftpd
#具有sudo权限的非root帐号运行
sudo dnf install vsftpd

一旦软件包安装完成,可以通过如下命令启动vsftpd守护进程并设置vsftpd在系统启动时启动。

bash 复制代码
sudo systemctl enable vsftpd --now

验证vsftpd服务状态:

bash 复制代码
sudo systemctl status vsftpd

命令输出结果类似如下,显示vsftpd服务处于活动状态并且正在运行:

bash 复制代码
● vsftpd.service - Vsftpd ftp daemon
	Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
	Active: active (running) since Mon 2020-03-30 15:16:51 EDT; 10s ago
	Process: 2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf 
(code=exited, status=0/SUCCESS)  ...

配置vsftpd

vsftpd服务的配置存放在/etc/vsftpd/vsftpd.conf配置文件中。大多数配置在文件中都有详细的记录。有关所有配置选项可以参看官网的vsftpd配置说明页面。在下面内容中,我们将介绍配置安全的vsftpd安装所需要的一些重要的配置。

先从打开vsftpd配置文件开始:

bash 复制代码
sudo vim /etc/vsftpd/vsftpd.conf

FTP 访问控制

我们将仅允许本地用户访问FTP服务器,在配置文件中找到anonymous_enablelocal_enable配置项,并确保您的配置与以下行一致:

bash 复制代码
sudo vim /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES

启用上传

取消注释write_enable配置项将允许你对系统文件进行更改,例如上传和删除文件。

bash 复制代码
sudo vim /etc/vsftpd.conf
write_enable=YES

控制访问范围

通过取消chroot配置项,防止FTP用户访问其主目录之外的任何文件。

bash 复制代码
sudo vim /etc/vsftpd.conf
chroot_local_user=YES

默认情况下,启用chroot时,如果用户锁定的目录是可写的,则vsftpd将拒绝上传文件。这样做是为了防止有安全漏洞。

启用chroot时,可以使用下面任意一种方法允许文件上传。

方法一

推荐允许上传的方法是保持chroot配置的启用情况下配置FTP目录。在本教程中,我们将在用户主目录里创建一个ftp目录。该目录将用作chroot和可写入的uploads目录以上传文件。

bash 复制代码
sudo vim /etc/vsftpd.conf
user_sub_token=$USER
local_root=/home/$USER/ftp
方法二

这个方法是在vsftpd中添加allow_writeable_chroot配置项。如果必须将用户的可写访问权限授予其主目录,可以使用此选项。

bash 复制代码
sudo vim /etc/vsftpd/vsftpd.conf
allow_writeable_chroot=YES

被动FTP连接

vsftpd可以使用任何端口进行被动FTP连接。我们将指定端口的最小和最大范围,然后在防火墙中打开该范围。

在vsftpd配置文件中添加如下配置:

bash 复制代码
sudo vim /etc/vsftpd/vsftpd.conf
pasv_min_port=30000
pasv_max_port=31000

限制用户登录

要仅允许某些用户登录FTP服务器,请在配置文件中userlist_enable = YES行之后添加以下行:

bash 复制代码
sudo vim /etc/vsftpd/vsftpd.conf
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

启用此选项后,您需要通过将用户名添加到/etc/vsftpd/user_list文件(每行一个用户)中来明确指定哪些用户可以登录。

使用 SSL/TLS 保护传输安全

为了使用SSL/TLS保护传输安全,你需要一个SSL证书并配置FTP 服务器使用该证书。您可以使用由受信任的证书颁发机构签名的现有SSL证书,也可以创建自签名证书。如果你有一个执行服务器IP的域名或者子域,则可以轻松生成一个免费的Let's Encrypt证书。在本教程中,我们将使用" openssl"工具生成一个自签名SSL证书。以下命令将创建一个有效期为10年的2048位私钥和自签名证书。私钥和证书都将保存在同一文件中:

bash 复制代码
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

创建SSL证书后,打开vsftpd配置文件:

bash 复制代码
sudo nano /etc/vsftpd/vsftpd.conf

找到rsa_cert_filersa_private_key_file选项,将其值更改为pem文件路径,并将ssl_enable指令设置为YES

bash 复制代码
sudo vim /etc/vsftpd/vsftpd.conf
rsa_cert_file=/etc/vsftpd/vsftpd.pemrsa_private_key_file=/etc/vsftpd/vsftpd.pemssl_enable=YES

重启vsftpd服务

你完成配置文件编辑后,你的配置文件内容将会类似下面内容:

bash 复制代码
vim /ec/vsftpd/vsftpd.conf
anonymous_enable=NOlocal_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpduser
list_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

保存配置文件并重启vsftpd服务使更改配置生效:

bash 复制代码
sudo systemctl restart vsftpd

开启防火墙

如果你在CentOS 8上开启了防火墙,你需要在防火墙中允许FTP流量访问。

要打开防火墙上的端口21(FTP命令端口),端口20(FTP数据端口)和端口30000-31000(被动端口范围),在防火墙上输入以下命令:

bash 复制代码
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp

使用以下命令重新加载防火墙规则:

bash 复制代码
firewall-cmd --reload

创建一个FTP用户

为了测试FTP服务器,我们将创建一个新用户。

  • 如果您已经有要授予FTP访问权限的用户,请跳过第一步。
  • 如果在配置文件中设置allow_writeable_chroot = YES,请跳过第三步。
  1. 创建一个名为newftpuser的用户:
bash 复制代码
sudo adduser newftpuser
sudo passwd newftpuser
  1. 添加用户到允许ftp的用户列表
bash 复制代码
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
  1. 创建ftp目录并配置正确的权限
bash 复制代码
sudo mkdir -p /home/newftpuser/ftp/uploadsudo
chmod 550 /home/newftpuser/ftpsudo
chmod 750 /home/newftpuser/ftp/uploadsudo
chown -R newftpuser: /home/newftpuser/ftp

禁止shell访问

默认情况下,在创建用户时,如果未明确指定,则该用户将具有对服务器的SSH访问权限。

要禁用shell程序访问,我们将创建一个新的shell程序,该shell程序将仅打印一条消息,告诉用户其帐户仅限于FTP访问。

bash 复制代码
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' |
sudo tee -a  /bin/ftponlysudo chmod a+x /bin/ftponly

运行以下命令来创建/bin/ftponly 并使它可执行:

bash 复制代码
echo "/bin/ftponly" | sudo tee -a /etc/shells

将用户shell更改为/bin/ftponly

bash 复制代码
sudo usermod newftpuser -s /bin/ftponly

使用相同的命令为仅希望授予FTP访问权限的其他用户更改shell程序。

推荐课程:https://xxetb.xetslk.com/s/3oyV5o

相关推荐
孙克旭_3 小时前
PXE_Kickstart_无人值守自动化安装系统
linux·运维·自动化
皓月盈江3 小时前
Linux电脑本机使用小皮面板集成环境开发调试WEB项目
linux·php·web开发·phpstudy·小皮面板·集成环境·www.xp.cn
深井冰水4 小时前
mac M2能安装的虚拟机和linux系统系统
linux·macos
leoufung4 小时前
内核内存锁定机制与用户空间内存锁定的交互分析
linux·kernel
菜菜why5 小时前
AutoDL租用服务器教程
服务器
IT专业服务商5 小时前
联想 SR550 服务器,配置 RAID 5教程!
运维·服务器·windows·microsoft·硬件架构
忧虑的乌龟蛋6 小时前
嵌入式Linux I2C驱动开发详解
linux·驱动开发·嵌入式·iic·i2c·读数据·写数据
I_Scholar6 小时前
OPENSSL-1.1.1的使用及注意事项
linux·ssl
Johny_Zhao7 小时前
K8S+nginx+MYSQL+TOMCAT高可用架构企业自建网站
linux·网络·mysql·nginx·网络安全·信息安全·tomcat·云计算·shell·yum源·系统运维·itsm
稳联技术7 小时前
Ethercat转Profinet网关如何用“协议翻译术“打通自动化产线任督二脉
linux·服务器·网络