安装与配置FTP服务器(超详细)

在CentOS 7上安装vsftpd

vsftpd包在默认的CentOS存储库中可用。要安装它,请执行以下命令:

yum install vsftpd

安装软件包后,启动vsftpd守护程序并使其在开机时自动启动:

systemctl start vsftpd
systemctl enable vsftpd

您可以通过打印其状态来验证vsftpd服务是否正在运行:

systemctl status vsftpd

输出将如下所示,显示vsftpd服务处于活动状态并正在运行:

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
 Main PID: 29612 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

修改配置文件

配置vsftpd服务需要编辑/etc/vsftpd/vsftpd.conf配置文件。 

vi/vim /etc/vsftpd/vsftpd.conf

1.FTP访问

我们将只允许本地用户访问FTP服务器,找到anonymous_enablelocal_enable指令并验证您的配置是否与下面的行匹配:

anonymous_enable=NO   ##关闭匿名用户访问
local_enable=YES   ##允许本地用户访问

2.启用上传

设置write_enable以允许对文件系统进行更改,例如上载和删除文件。

write_enable=YES  ##控制是否允许FTP用户上传文件或创建目录。

3.限制其主目录

通过取消注释chroot指令,防止FTP用户访问其主目录之外的任何文件。

chroot_local_user=YES

具体来说,当chroot_local_user=YES时,表示将本地用户限制在其主目录内,防止他们通过FTP访问服务器上的其他目录或系统文件。这提高了服务器的安全性,因为即使用户有FTP访问权限,他们也无法越过其主目录并访问系统的其他部分。

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

使用下面的方法之一来允许在启用chroot时上传。

方式1

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

user_sub_token=$USER
local_root=/home/$USER/ftp

##user_sub_token=$USER和local_root=/home/$USER/ftp
是用于设置用户虚拟化和指定用户根目录的选项。

1.user_sub_token=$USER当设置为$USER时,表示使用用户名作为子目录的占位符。这个选项与虚拟用户相关,允许在用户的主目录中创建一个名为用户的子目录。例如,如果用户名为john,则会在/home/john中创建一个名为john的子目录。这有助于区分不同用户的文件和目录,并使文件组织更加清晰。

2.local_root=/home/$USER/ftp这个选项指定了用户的根目录路径。在上面的示例中,用户的根目录将被设置为/home/$USER/ftp,其中$USER表示用户的实际用户名。这样设置的好处是,每个用户都有自己的独立根目录,可以在其中上传、下载和管理文件,而不会影响其他用户的操作。

方法2:

- 另一种选择是在vsftpd配置文件中添加以下指令。如果必须授予用户对其主目录的可写访问权限,请使用此选项。

allow_writeable_chroot=YES

在vsftpd配置文件中,allow_writeable_chroot=YES选项用于控制是否允许在chroot环境(受限环境)中对目录和文件进行写操作。

具体来说,当allow_writeable_chroot=YES时,它允许用户在chroot环境中对目录和文件进行写操作,即使用户被限制在其主目录中(chroot jail)也可以进行写操作。

这个选项的作用是允许FTP用户在其主目录中创建、编辑和删除文件,即使他们在chroot环境中。通常情况下,chroot环境会限制用户的操作权限,但通过设置allow_writeable_chroot=YES,您可以允许用户在受限环境中进行写操作,从而提供更多的灵活性和功能性。

4.被动FTP连接

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

在配置文件中添加以下行:

pasv_min_port=30000   ##被动连接的最小端口
pasv_max_port=31000   ##被动连接的最大端口

5.限制用户登录

要只允许某些用户登录到FTP服务器,请在userlist_enable=YES行后添加以下行:

userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

启用此选项时,您需要通过将用户名添加到/etc/vsftpd/user_list文件(每行一个用户)来显式指定哪些用户能够登录。

在vsftpd配置文件中,userlist_file=/etc/vsftpd/user_listuserlist_deny=NO这两个选项用于控制用户访问FTP服务器的权限。

1.userlist_file=/etc/vsftpd/user_list该选项指定了一个文件路径,用于存储允许或禁止访问FTP服务器的用户列表。在这种情况下,指定的文件为/etc/vsftpd/user_list,该文件中列出的用户将被允许或禁止访问FTP服务器。如果您想限制用户列表,可以通过编辑user_list文件添加或移除相应的用户。

2.userlist_deny=NOuserlist_deny设置为NO时,意味着根据userlist_file文件中的用户列表允许访问FTP服务器。换句话说,列在user_list文件中的用户将被允许访问FTP服务器,而不受限制。如果将userlist_deny设置为YES,则userlist_file文件中列出的用户将被禁止访问FTP服务器。

6.使用SSL/TLS保护传输

(根据需要选做)

为了使用SSL/TLS加密FTP传输,您需要拥有SSL证书并配置FTP服务器以使用它。

您可以使用由受信任的证书颁发机构签名的现有SSL证书,也可以创建自签名证书。

如果你有一个域或子域指向FTP服务器 SSL证书。

在本教程中,我们将生成一个自签名SSL证书 使用openssl命令。

以下命令将创建一个2048位私钥和有效期为10年的自签名证书。私钥和证书将保存在同一个文件中:

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem



#openssl: OpenSSL是一个用于加密和解密数据的工具集。在这里,我们使用OpenSSL来生成SSL证书。

#req: req是OpenSSL中的一个子命令,用于处理证书请求和生成证书。

#-x509: 这个选项指示req生成自签名的X.509证书。

#-nodes: 这个选项表示不为私钥文件设置密码。

#-days 3650: 指定证书的有效期为3650天(约为10年)。

#-newkey rsa:2048: 使用RSA算法生成一个2048位的新私钥和公钥。

#-keyout /etc/vsftpd/vsftpd.pem: 指定生成的私钥存储的路径和文件名为/etc/vsftpd/vsftpd.pem。

#-out /etc/vsftpd/vsftpd.pem: 指定生成的X.509证书存储的路径和文件名为/etc/vsftpd/vsftpd.pem。

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

vi/vim /etc/vsftpd/vsftpd.conf

找到rsa_cert_filersa_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

在vsftpd(Very Secure Ftp Daemon)的配置文件中,rsa_cert_file=/etc/vsftpd/vsftpd.pemrsa_private_key_file=/etc/vsftpd/vsftpd.pemssl_enable=YES这三个选项用于配置FTP服务器启用SSL/TLS加密连接和指定SSL证书及私钥的位置。以下是各部分的含义解释:

1.rsa_cert_file=/etc/vsftpd/vsftpd.pem:此选项指定了用于SSL/TLS连接的SSL证书的路径。在这里,/etc/vsftpd/vsftpd.pem表示SSL证书的存储位置。vsftpd将使用指定路径下的证书来加密与客户端之间的连接。

2.rsa_private_key_file=/etc/vsftpd/vsftpd.pem:这个选项指定了SSL/TLS连接所需的私钥文件的路径。在这里,私钥文件的路径也是/etc/vsftpd/vsftpd.pem。私钥文件用于解密客户端发来的加密数据,确保数据在传输过程中的安全性。

3.ssl_enable=YES:这个选项用于启用FTP服务器的SSL/TLS加密功能。当ssl_enable=YES时,表示服务器启用SSL/TLS加密连接,从而提供更安全的数据传输。客户端和服务器之间的通信将通过SSL/TLS进行加密,防止数据被窃取或篡改。

如果没有另外指定,FTP服务器将只使用TLS进行安全连接。

完成编辑后,vsftpd配置文件(不包括注释)应该如下所示:

anonymous_enable=NO
local_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=vsftpd
userlist_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

7.重新启动vsftpd服务

systemctl restart vsftpd

8.打开防火墙

如果您正在运行防火墙 您需要允许FTP流量。

要打开端口21(FTP命令端口)、端口20(FTP数据端口)和端口30000-31000(被动端口范围),请发出以下命令:

firewall-cmd --permanent --add-port=20-21/tcp
firewall-cmd --permanent --add-port=30000-31000/tcp

这只是一个简单的防火墙配置,根据需要自行添加

使防火墙生效

firewall-cmd --reload

产看防火墙配置是否生效

firewall-cmd --list-all

9.创建FTP用户

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

  • 如果你已经有一个用户,你想授予FTP访问跳过第一步。
  • 如果您在配置文件中设置了allow_writeable_chroot=YES,请跳过第3步。

1.创建一个名为newftpuser的新用户: 

adduser newftpuser

下一步,您需要设置用户密码

passwd newftpuser
或者
echo "密码" |passwd --stdin newftpuser

2.将用户添加到允许的FTP用户列表:

echo "newftpuser" | tee -a /etc/vsftpd/user_list

3.创建FTP目录树并设置正确的权限 

mkdir -p /home/newftpuser/ftp/upload
chmod 550 /home/newftpuser/ftp
chmod 750 /home/newftpuser/ftp/upload
chown -R newftpuser: /home/newftpuser/ftp

前所述,用户将能够将其文件上传到ftp/upload目录。 

此时,您的FTP服务器功能齐全,您应该能够使用任何可以配置为使用TLS加密的FTP客户端(如FileZilla)连接到服务器 .

10.禁用Shell访问

默认情况下,在创建用户时,如果没有显式指定,用户将具有对服务器的SSH访问权限。

要禁用shell访问,我们将创建一个新的shell,它将简单地打印一条消息,告诉用户他们的帐户仅限于FTP访问。

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

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

将新shell追加到/etc/shells文件中的有效shell列表中:

echo "/bin/ftponly" | sudo tee -a /etc/shells

将用户shell更改为/bin/ftponly

sudo usermod newftpuser -s /bin/ftponly

使用相同的命令更改您希望给予仅FTP访问权限的其他用户的shell。 

做到这你就有了一个完整的FTP服务器了。

  • 49
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值