第1步:安装FTP服务器
1.安装 vsftpd服务器是直接,只是运行以下命令在终端。# yum install vsftpd2.安装完成后,服务将首先禁用,因此我们需要手动启动它,并使其能够从下一次系统引导自动启动:
# systemctl start vsftpd # systemctl enable vsftpd接下来,为了允许从外部系统访问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服务器
现在我们将进行一些配置来设置和保护我们的FTP服务器,让我们开始备份原始配置文件 /etc/vsftpd/vsftpd.conf :# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig接下来,打开上面的配置文件,并使用这些相应的值设置以下选项:
anonymous_enable=NO # disable anonymous login local_enable=YES # permit local logins write_enable=YES # enable FTP commands which change the filesystem local_umask=022 # value of umask for file creation for local users dirmessage_enable=YES # enable showing of messages when users first enter a new directory xferlog_enable=YES # a log file will be maintained detailing uploads and downloads connect_from_port_20=YES # use port 20 (ftp-data) on the server machine for PORT style connections xferlog_std_format=YES # keep standard log file format listen=NO # prevent vsftpd from running in standalone mode listen_ipv6=YES # vsftpd will listen on an IPv6 socket instead of an IPv4 one pam_service_name=vsftpd # name of the PAM service vsftpd will use userlist_enable=YES # enable vsftpd to load a list of usernames tcp_wrappers=YES # turn on tcp wrappers5.现在配置FTP以允许/拒绝基于用户列表文件
/etc/vsftpd.userlist
的用户的FTP访问。 默认情况下,如果
userlist_enable = YES ,则在
userlist_file=/etc/vsftpd.userlist
中列出的用户将拒绝登录访问,
并将userlist_deny选项设置为
YES 。 但是,
userlist_deny = NO会更改设置,这意味着只有在
userlist_file = / etc / vsftpd.userlist中明确列出的用户才能被允许登录。
userlist_enable=YES # vsftpd will load a list of usernames, from the filename given by userlist_file userlist_file=/etc/vsftpd.userlist # stores usernames. userlist_deny=NO这不是全部,当用户登录到FTP服务器时,他们被放置在一个chroot的监狱,这是本地根目录,将作为其FTP会话的主目录。 接下来,我们将讨论如何将FTP用户切换到FTP用户的主目录(本地根目录)的两种可能情况,如下所述。 6.现在添加以下两个选项以将FTP用户限制到其主目录。
chroot_local_user=YES allow_writeable_chroot=YESchroot_local_user = YES意味着本地用户将被放置在chroot jail中,在默认设置登录后它们的主目录。 并且,默认情况下,vsftpd不允许chroot jail目录因为安全原因而可写,但是,我们可以使用 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服务器
现在我们将使用 useradd命令创建一个FTP用户来测试FTP服务器。# useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi # passwd ravi之后,我们必须使用 echo命令将用户 ravi添加到文件 /etc/vsftpd.userlist ,如下所示:
# echo "ravi" | tee -a /etc/vsftpd.userlist # cat /etc/vsftpd.userlist9.现在是时候测试我们上面的设置是否正常工作。让我们从测试匿名登录开始,我们可以从下面的屏幕截图中看到,不允许匿名登录:
# ftp 192.168.56.10 Connected to 192.168.56.10 (192.168.56.10). 220 Welcome to youcl.com FTP service. Name (192.168.56.10:root) : anonymous 530 Permission denied. Login failed. ftp>
测试匿名FTP登录
# ftp 192.168.56.10 Connected to 192.168.56.10 (192.168.56.10). 220 Welcome to youcl.com FTP service. Name (192.168.56.10:root) : aaronkilik 530 Permission denied. Login failed. ftp>
FTP用户登录失败
# ftp 192.168.56.10 Connected to 192.168.56.10 (192.168.56.10). 220 Welcome to youcl.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
FTP用户登录成功[
allow_writeable_chroot=YES
具有某些安全含义,特别是如果用户具有上传权限或shell访问权限。 只有在您确切知道您在做什么时才激活此选项。重要的是要注意,这些安全隐患不是vsftpd具体的,它们适用于所有提供将本地用户放在chroot jail的FTP守护进程。 因此,我们将在下一节中查看一种更安全的方法来设置不同的不可写本地根目录。
第5步:配置不同的FTP用户主目录
12.再次打开vsftpd配置文件,首先注释下面的不安全选项:#allow_writeable_chroot=YES然后为用户创建备用本地根目录(
ravi
,yours可能不同),并删除所有用户对此目录的写入权限:
# mkdir /home/ravi/ftp # chown nobody:nobody /home/ravi/ftp # chmod a-w /home/ravi/ftp13.接下来,在本地根目录下创建一个目录,用户将在其中存储他/她的文件:
# 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 vsftpd14.现在再做一个最终测试,看到用户本地根目录是我们在他的主目录中创建的FTP目录。
# ftp 192.168.56.10 Connected to 192.168.56.10 (192.168.56.10). 220 Welcome to youcl.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
FTP用户主目录登录成功