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

vsftpd 500 OOPS: cannot change directory 錯誤一鍵修復:SELinux 布爾值調整

編輯:關於伺服器

現象:CentOS/RHEL/Fedora 等啟用 SELinux 的系統安裝 vsftpd 後,FTP 用戶登入即報錯:

500 OOPS: cannot change directory:/home/username
500 OOPS: child died

根因:**SELinux 預設策略禁止 ftpd 進程存取用戶家目錄 (`/home/*`)**。vsftpd 需讀寫用戶家目錄作為 FTP 根目錄,被 SELinux 阻擋導致 `chdir()` 失敗,進程異常退出 (child died)。

一鍵修復 (永久生效)

# 開啟 ftpd_disable_trans 布爾值,允許 ftpd 以非受限域存取用戶目錄
setsebool -P ftpd_disable_trans 1

# 重啟 vsftpd 生效
systemctl restart vsftpd
# 或舊版
service vsftpd restart
  • `-P` 參數將設定寫入持久化配置 (`/etc/selinux/targeted/modules/active/booleans.local`),重開機不失效
  • `ftpd_disable_trans=1` 含義:ftpd 進程不進行域轉換 (Type Transition),保持在 `ftpd_t` 域,擁有較寬鬆的 DAC 存取權限,可讀寫用戶家目錄

驗證修復

# 檢查布爾值狀態
getsebool ftpd_disable_trans
# 輸出應為: ftpd_disable_trans --> on

# FTP 客戶端測試
ftp localhost
# 應正常登入、列表、上傳、下載

替代方案 (若不願開啟布爾值)

  1. 將 FTP 根目錄移至非家目錄路徑 (如 `/var/ftp/`),並設定 SELinux 檔案上下文:
    semanage fcontext -a -t public_content_t "/var/ftp(/.*)?"
    restorecon -Rv /var/ftp
    setsebool -P allow_ftpd_anon_write 1  # 若需匿名寫入
  2. 為用戶家目錄設定 `user_home_dir_t` 並允許 ftpd 存取 (較複雜):
    semanage fcontext -a -t user_home_dir_t "/home/username(/.*)?"
    restorecon -Rv /home/username
    setsebool -P ftp_home_dir 1  # 允許 ftpd 存取用戶家目錄 (需 policycoreutils-python)
  3. 暫時設定 SELinux 為 Permissive 模式 (僅測試用,生產嚴禁):
    setenforce 0
    # 永久修改 /etc/selinux/config: SELINUX=permissive

相關 SELinux FTP 布爾值速查

結語

「SELinux 不是阻礙,是守門人」。遇到 FTP/HTTP/資料庫/容器存取被拒,**第一時間檢查 `audit.log` (`ausearch -m avc -ts recent`)**,定位被拒的 `scontext`/`tcontext`/`tclass`,查詢對應布爾值或檔案上下文,精準放行。**拒絕 `setenforce 0` 懶人大法,擁抱強制存取控制 (MAC) 帶來的纵深防禦。**

Copyright © Windows教程網 All Rights Reserved
布爾值預設作用
ftpd_disable_transOff允許 ftpd 以非受限域運行,存取用戶家目錄 (最常用)
ftp_home_dirOff允許 ftpd 存取帶有 `user_home_dir_t` 標籤的家目錄
allow_ftpd_anon_writeOff允許匿名 FTP 寫入 `public_content_rw_t` 目錄
allow_ftpd_full_accessOff允許 ftpd 完全存取所有檔案 (極寬鬆,慎用)
httpd_enable_ftp_serverOff允許 httpd 執行 FTP 伺服器功能 (極少用)