Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> FTP 伺服器

RHEL 6.4 搭建 FTP 服務器實戰:禁止匿名、用戶隔離、速度限制與 SELinux 處理

編輯:FTP 伺服器

需求規格

需求項目規格
作業系統RHEL 6.4 (x86_64)
FTP 軟體vsftpd 2.2.2
匿名登入禁止
本地用戶允許,並限制在各自家目錄
用戶家目錄統一指向 /data/ftp
下載速度限制150 KB/s
測試帳號obama / 123456

部署步驟

1. 確認軟體已安裝

[root@ftp-server ~]# rpm -q vsftpd
vsftpd-2.2.2-11.el6.x86_64

2. 修改主配置檔 /etc/vsftpd/vsftpd.conf

# 備份
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

# 關鍵參數(行號僅供參考,請搜尋關鍵字修改)
anonymous_enable=NO           # 第 12 行:禁止匿名
chroot_local_user=YES         # 第 120 行:限制用戶在家目錄
local_root=/data/ftp          # 第 121 行:指定統一家目錄
local_max_rate=150000         # 第 122 行:限速 150 KB/s (單位 Bytes/sec)

3. 建立家目錄與測試帳號

# 建立測試用戶
useradd obama
echo "123456" | passwd --stdin obama

# 建立統一家目錄
mkdir -p /data/ftp

# 檢查目錄權限(預設 root:root 755,用戶無寫入權限)
ls -ld /data/ftp
# drwxr-xr-x. 2 root root 4096 Apr 16 05:35 /data/ftp

# 建立測試檔案(512 MB)
dd if=/dev/zero of=/data/ftp/film.avi bs=1M count=512

4. 啟動服務並設定開機自啟

service vsftpd start
chkconfig vsftpd on

5. 客戶端測試(首次失敗)

[root@client ~]# ftp 192.168.100.1
Connected to 192.168.100.1.
220 (vsFTPd 2.2.2)
Name (192.168.100.1:root): obama
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/home/obama
Login failed.

錯誤分析: 雖設定 local_root=/data/ftp,但 vsftpd 仍嘗試切換至 /home/obama,提示 cannot change directory,典型的 SELinux 阻擋 徵兆。

6. SELinux 診斷與修復

# 查詢 FTP 相關布林值
getsebool -a | grep ftp
# 輸出片段:
# ftp_home_dir --> off   ← 關鍵項關閉
# allow_ftpd_full_access --> off
# ...

# 開啟 ftp_home_dir 允許用戶存取家目錄
setsebool -P ftp_home_dir=1

# 驗證已生效
getsebool ftp_home_dir
# ftp_home_dir --> on

7. 二次測試成功

[root@client ~]# ftp 192.168.100.1
Connected to 192.168.100.1.
220 (vsFTPd 2.2.2)
Name (192.168.100.1:root): obama
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,100,2,123,195).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 536870912 Apr 16 12:38 film.avi
226 Directory send OK.

# 下載測試驗證限速
[root@client ~]# wget ftp://obama:123456@192.168.100.1/film.avi
# 觀察下載速度應穩定在 ~150 KB/s

關鍵知識點總結

知識點說明
local_root vs chrootlocal_root 指定用戶登入後的根目錄;chroot_local_user=YES 強制用戶無法跳出該目錄。兩者配合實現用戶隔離。
local_max_rate 單位Bytes/秒,非 KB/s。150 KB/s = 150 × 1024 = 153,600,配置 150000 略低於理論值,實測約 146 KB/s,屬正常誤差。
SELinux ftp_home_dir控制 FTP 進程是否可讀取用戶家目錄。關閉時,即使 DAC 權限正確,MAC 仍會阻擋,導致 500 OOPS: cannot change directory。
setsebool -P-P 表示永久生效(寫入政策檔),重開機不失效。無 -P 僅運行時生效。
被動模式防火牆RHEL 6 預設 iptables 需開放 TCP 21 及被動埠口範圍(pasv_min_port-pasv_max_port)。

生產環境補充建議

  • 用戶隔離目錄: 若各用戶需獨立空間,建議 local_root=/data/ftp/$USER 搭配腳本自動建立目錄,或啟用 user_config_dir 為每用戶指定 local_root。
  • 上傳權限: 當前 /data/ftp 屬 root:root 755,用戶無寫入權。若需上傳,須 chown obama:obama /data/ftp 或建立子目錄授權。
  • TLS 加密: 配合 ssl_enable=YES、憑證配置,強制 FTPS。
  • 日誌審計: xferlog_enable=YES、log_ftp_protocol=YES 記錄完整指令流。
  • 連線限制: max_clients=100、max_per_ip=5、idle_session_timeout=600。

本實戰完整展示了 RHEL 6 環境下 vsftpd 從配置、帳號建立、SELinux 排查到驗證限速的全流程。SELinux 是 RHEL/CentOS 系列 FTP 部署最常見的「隱形阻礙」,掌握 getsebool/setsebool 診斷流程可大幅減少排錯時間。

Copyright © Windows教程網 All Rights Reserved