配置 SELinux

设置以下 SELinux 布尔值以禁用 FTP 用户的 SELinux MAC(强制 Linux 控制)。

这是必要的,因为 /var/www/html 目录的 SELinux 文件上下文是 httpd_sys_content_t 。
因此,FTP 用户可能会面临权限问题。

# setsebool -P ftpd_full_access 1

问题

在某些情况下,我们必须给用户 FTP 访问权限,但我们不想使用 FTP 协议访问整个服务器。

对于这种情况,我们为 FTP 用户配置 chroot jail 到他们的主目录。
但有时,我们需要将它们限制在另一个目录中,同时保持它们的主目录完整以供 ssh 访问。

在本文中,我们将介绍如何安装 vsftpd(Very Secure FTP)服务并为 FTP 用户配置 chroot jail,以将他们的 FTP 会话限制到各自的 /var/www/html/[username] 目录。

FTP 用户Chroot 到 /var/www/html 目录

在本教程中,我们将学习如何将 FTP 用户 chroot 到 /var/www/html 目录。

为 SSL 和 Chroot FTP 配置 VSFTPD 服务

在 vsftpd user_list 文件中添加用户。
我们可以使用 vim 文本编辑器来编辑 user_list 文件。

# vi /etc/vsftpd/user_list

在此文件中添加用户。

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
user1
user2

备份 vsftpd.conf 文件,然后在 vim 文本编辑器中编辑它。

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org
# vi /etc/vsftpd/vsftpd.conf

在此文件中找到并设置以下指令。
这些设置与 chroot FTP 和 SSL 配置有关。

userlist_enable=YES
userlist_deny=NO
ssl_enable=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1_2=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.key
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
pasv_min_port=30000
pasv_max_port=31000
debug_ssl=YES
chroot_local_user=YES
local_root=/var/www/html/$USER
user_sub_token=$USER
allow_writeable_chroot=YES

在 Linux 操作系统中创建用户

使用 ssh 客户端以 root 用户身份与 apache-01.onitroad.com 连接。

我们需要创建用户才能访问 FTP 服务器。

因此,请在 Linux bash 提示符下执行以下命令来创建用户并设置其各自的密码。

# useradd user1
# echo "linuxpassword" | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
# useradd user2
# echo "linuxpassword" | passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.

提示:如果我们想禁用这些用户的 SSH 访问,那么我们可以将他们的登录 shell 设置为 /sbin/nologin 。

在 RHEL 8 上安装 VSFTPD 软件

VSFTPD 是包括 RHEL 8 在内的著名 Linux 发行版中默认和首选的 FTP 服务器软件。

如果我们配置了有效的 Red Hat 订阅,则可以从标准 yum 存储库安装软件包。

# dnf install -y vsftpd
...Installed:
  vsftpd-3.0.3-32.el8.x86_64
Complete!
https://onitroad.com 更多教程

启动 FTP 服务

启用并启动 FTP 服务。

# systemctl enable --now vsftpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service -> /usr/lib/systemd/system/vsftpd.service.

检查 FTP 服务的状态。

# systemctl status vsftpd
-> vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor pres>
   Active: active (running) since Sun 2021-03-21 09:37:18 EDT; 41s ago
  Process: 1643 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited>
 Main PID: 1644 (vsftpd)
    Tasks: 1 (limit: 5815)
   Memory: 868.0K
   CGroup: /system.slice/vsftpd.service
           ->->1644 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Mar 21 09:37:18 apache-01.onitroad.com systemd[1]: Starting Vsftpd ftp daemon.>
Mar 21 09:37:18 apache-01.onitroad.com systemd[1]: Started Vsftpd ftp daemon.

访问 FTP 服务器

我们需要一个 FTP 客户端来访问 FTP 服务器。
RHEL 8 中的默认 FTP 客户端是 lftp 。
我们可以从标准 yum 存储库安装它。

# dnf install -y lftp

我们现在可以使用 lftp 命令访问 FTP 服务器。

# lftp user1@localhost
Password:
lftp user1@localhost:~> ls
ls: Fatal error: Certificate verification: Not trusted (31:98:F7:05:AB:E2:0B:46:BB:39:BE:93:1F:5B:A8:BD:34:E2:71:63)

认证警告是由于自签名证书。
我们可以通过在 Linux bash 提示符下执行以下命令来抑制 lftp 中的此警告。

#echo "set ssl:verify-certificate no" >> /etc/lftp.conf

现在,再次执行 lftp 命令。

lftp user1@localhost
Password:
lftp user1@localhost:~> ls
-rw-r--r--    1 0        0               0 Mar 21 13:59 user1_files

我们可以看到 user1 正在登录他自己的 chroot FTP jail,例如:/var/www/html/user1.

同样,以 user2 FTP 用户身份登录。

# lftp user2@localhost
Password:
lftp user2@localhost:~> ls
-rw-r--r--    1 0        0               0 Mar 21 13:59 user2_files

就像 user1 , user2 登录到他自己的 chroot FTP jail 例如:/var/www/html/user2 。

创建 Chroot FTP 目录

为用户创建 chroot FTP 目录。

# mkdir /var/www/html/user{1..2}

设置 chroot jail 目录的所有权。

# chown -R user1:apache /var/www/html/user1
# chown -R user2:apache /var/www/html/user2

在每个目录中创建一个空文件。
这样就可以通过FTP客户端在登录后区分chroot jail目录。

# touch /var/www/html/user1/user1_files
# touch /var/www/html/user2/user2_files

为 FTP 服务创建自签名 SSL 证书

为我们的 FTP 服务器创建一个自签名 SSL 证书。
这是必须的,否则我们将无法以 FTP 用户身份登录。

我们可以执行以下 openssl 命令来生成自签名 SSL 证书和私钥。

# openssl req -x509 -nodes -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.pem -days 365 -newkey rsa:2048
Generating a RSA private key
.........+++++
......+++++
writing new private key to '/etc/vsftpd/vsftpd.key'
----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----
Country Name (2 letter code) [XX]:PK
State or Province Name (full name) []:Sindh
Locality Name (eg, city) [Default City]:Karachi
Organization Name (eg, company) [Default Company Ltd]:onitroad
Organizational Unit Name (eg, section) []:IT Lab
Common Name (eg, your name or your server's hostname) []:apache-01.onitroad.com
Email Address []:jackli@apache-01.onitroad.com

提示:如果我们为网络配置了证书颁发机构,则可以生成 CSR(证书签名请求)并从证书颁发机构获取数字签名。

配置 Linux 防火墙

在 Linux 防火墙中允许 FTP 服务端口。

# firewall-cmd --permanent --add-service=ftp
success
# firewall-cmd --reload
success
日期:2020-09-17 00:13:01 来源:oir作者:oir