在啟用 SELinux 的 Linux 系統(如 CentOS/RHEL)上架設 vsftpd 時,使用者常遇到「553 Could not create file」上傳失敗錯誤。本文說明如何透過調整 SELinux 布林值 allow_ftpd_full_access 快速解決。
553 Could not create fileSELinux 預設限制 FTP 服務的完整存取權限。查看相關布林值:
[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off # 關鍵項
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
allow_ftpd_full_access:[root@localhost ~]# setsebool allow_ftpd_full_access on
[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> on # 已開啟
...
[root@localhost ~]# service vsftpd restart
上述設定重啟後會失效,需加入 -P 參數永久生效:
setsebool -P allow_ftpd_full_access on
| 布林值 | 功能 | 建議值 |
|---|---|---|
| allow_ftpd_full_access | 允許 FTP 完整讀寫權限 | on(解決 553 錯誤關鍵) |
| allow_ftpd_anon_write | 允許匿名使用者寫入 | off(安全考量) |
| ftp_home_dir | 允許 FTP 存取使用者家目錄 | on |
| ftpd_use_passive_mode | 允許被動模式連線 | 視需求開啟 |
vsftpd 553 錯誤多因 SELinux 限制,啟用 allow_ftpd_full_access 即可解決。生產環境建議搭配 ftp_home_dir=on、ftpd_use_passive_mode=on,並依實際需求決定是否開啟匿名寫入。