Server : CnetOS 7
Native : MacOS Mojave 10.14.6
vsftpd
步骤1:安装FTP服务器
1.安装vsftpd服务器很简单,只需在终端中运行以下命令即可。
# yum install vsftpd
2.安装完成后,该服务将首先被禁用,因此我们需要暂时手动启动它,并使它也可以从下一次系统启动时:
# systemctl start vsftpd
# systemctl enable vsftpd
3.接下来,为了允许从外部系统访问FTP服务,我们必须打开端口21,FTP守护进程正在监听以下端口:
# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload
步骤2:配置FTP服务器(可选)
4.现在,我们将执行一些配置来设置和保护FTP服务器,让我们首先备份原始配置文件/etc/vsftpd/vsftpd.conf:
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
接下来,打开上面的配置文件,并使用以下相应值设置以下选项:
anonymous_enable=NO # 禁用匿名登录
local_enable=YES # 允许本地登录
write_enable=YES # 启用更改文件系统的FTP命令
local_umask=022 # 为本地用户创建文件的umask值
dirmessage_enable=YES # 允许用户首次进入时显示消息新目录
xferlog_enable=YES # 将维护一个日志文件,详细说明上传和下载
connect_from_port_20=YES # 使用服务器计算机上的端口20(ftp-data)进行PORT样式连接
xferlog_std_format=YES # 保持标准日志文件格式
listen=NO # 防止vsftpd在独立模式下运行
listen_ipv6=YES # vsftpd的监听TPv6,而不是TPv4
pam_service_name=vsftpd # PAM服务的姓名将使用
userlist_enable=YES # 使vsftpd加载一个用户名列表
tcp_wrappers=YES # 开启TCP封装
idle_session_timeout=600 # 无操作超时时间,默认时间单位秒
5.现在将FTP配置为允许/拒绝基于用户列表文件的FTP访问/etc/vsftpd.userlist
默认情况下,如果userlist_enable = YES,userlist_deny选项设置为YES。则拒绝userlist_file=/etc/vsftpd.userlist
中列出的用户
但是,userlist_deny = NO会更改设置,这意味着仅允许在userlist_file = / etc / vsftpd.userlist中明确列出的用户登录
userlist_enable=YES # vsftpd将从userlist_file给定的文件名中加载用户名列表
userlist_file=/etc/vsftpd.userlist # 存储用户名
userlist_deny=NO
这还不是全部,当用户登录到FTP服务器时,他们被放置在chroot的控制中,这是本地根目录,它将仅作为FTP会话的主目录
接下来,我们将讨论两种可能的方案,如何将FTP用户chroot到FTP用户的Home目录(本地根目录),如下所述
6.现在添加以下两个选项,以将FTP用户限制在其主目录中
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_local_user = YES表示默认登录后,本地用户将被置于chroot监狱中,即其主目录中。
而且默认情况下,出于安全原因,vsftpd不允许chroot监狱目录可写,但是,我们可以使用allow_writeable_chroot = YES选项覆盖此设置
保存文件并关闭它。
使用SELinux保护FTP服务器(可选)
7.现在,让我们在下面设置SELinux布尔值,以允许FTP读取用户主目录中的文件。请注意,这最初是使用以下命令完成的:
# setsebool -P ftp_home_dir on
但是,ftp_home_dir
默认情况下已禁用此伪指令,如以下错误报告中所述:https://bugzilla.redhat.com/show_bug.cgi?id=1097775。
现在,我们将使用semanage命令设置SELinux规则,以允许FTP读取/写入用户的主目录。
# semanage boolean -m ftpd_full_access --on
在这一点上,我们必须重新启动vsftpd才能影响到目前为止我们所做的所有更改:
# systemctl restart vsftpd
步骤4:测试FTP服务器(可选)
8.现在,我们将通过使用useradd命令创建一个FTP用户来测试FTP服务器
# useradd -s /bin/bash ravi
# passwd ravi
之后,我们必须使用 echo命令将用户ravi添加到文件/etc/vsftpd.userlist中,如下所示:
#echo "ravi" | tee -a /etc/vsftpd.userlist
#cat /etc/vsftpd.userlist
9.现在是时候测试上面的设置是否正常工作了,这里需要用到FTP客户端如果未安装请执行yum install ftp。让我们从测试匿名登录开始,我们可以从下面的屏幕快照中看到不允许匿名登录:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>
10.还让我们测试一下是否授予未在文件/etc/vsftpd.userlist中列出的用户的登录权限,下面的屏幕截图不是这种情况:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>
11.现在进行最后检查,是否在登录后将/etc/vsftpd.userlist文件中列出的用户实际放置在其主目录中:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
警告:使用allow_writeable_chroot=YES
具有一定的安全意义,尤其是在用户具有上传权限或Shell访问权限的情况下。
仅当您完全知道自己在做什么时才激活此选项。重要的是要注意,这些安全隐患不是特定于vsftpd的,它们适用于所有FTP守护程序,这些守护程序还可以将本地用户置于chroot监狱中。
因此,在下一节中,我们将探讨一种更安全的方式来设置另一个不可写的本地根目录。
步骤5:配置不同的FTP用户主目录(可选)
12.再次打开vsftpd配置文件,并首先注释以下不安全选项:
# allow_writeable_chroot=YES
然后为用户创建备用本地根目录(ravi
,您的可能不同),并删除对该目录所有用户的写许可权:
# mkdir /home/ravi/ftp
# chown nobody:nobody /home/ravi/ftp
# chmod a-w /home/ravi/ftp
13.接下来,在本地根目录下创建一个目录,用户将在其中存储他/她的文件:
# mkdir /home/ravi/ftp/files
# chown ravi:ravi /home/ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files/
然后使用以下值在vsftpd配置文件中添加/修改以下选项:
user_sub_token=$USER # inserts the username in the local root directory
local_root=/home/$USER/ftp # defines any users local root directory
保存文件并关闭它。再次让我们使用新设置重新启动服务:
# systemctl restart vsftpd
14.现在再次进行最终测试,看看用户本地根目录是我们在其主目录中创建的FTP目录。
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
步骤6:配置客户端连接FileZilla
总结:到这里完成了FTP安装与部署,并且可以上传下载文件
修改实名用户默认根目录
/etc/vsftpd/vsftpd.conf
local_root=/media/ftp/pub
chroot_local_user=YES
systemctl restart vsftpd
图书
How to Install, Configure and Secure FTP Server in CentOS 7 - [Comprehensive Guide]www.tecmint.com