提供 FTP 帳號給使用者上傳檔案,但為安全考量,必須禁止其透過 SSH/Telnet 登入系統取得 Shell。
編輯 /etc/ftpaccess,加入:
restricted-uid *
此指令限制所有使用者僅能透過 FTP 存取其家目錄,無法取得 Shell。適用於 wu-ftpd 2.5+ 版本。
此法適用於所有 FTP 伺服器,原理是將使用者的登入 Shell 設為不提供互動式環境的程式。
# 原始 user1:x:1001:1001::/home/user1:/bin/bash # 修改為 user1:x:1001:1001::/home/user1:/bin/true
echo "/bin/true" >> /etc/shells
關鍵點:FTP 伺服器(如 vsftpd、ProFTPD)啟動時會檢查 /etc/shells,若使用者的 Shell 不在清單中,將拒絕 FTP 登入。因此必須加入 /bin/true(或 /sbin/nologin、/bin/false)。
編輯 /etc/vsftpd.conf:
# 限制本地使用者無法離開家目錄 chroot_local_user=YES allow_writeable_chroot=YES # 禁止 Shell 登入(需搭配 /bin/false 或 /sbin/nologin) # vsftpd 會檢查 /etc/shells,同上
# 測試 FTP 登入 (應成功)
ftp localhost
# 測試 SSH 登入 (應失敗,顯示 This account is currently not available)
ssh user1@localhost
# 測試 Telnet 登入 (應失敗)
telnet localhost
groupadd ftpusers
useradd -g ftpusers -s /sbin/nologin -d /var/ftp/user1 user1
chown root:ftpusers /var/ftp/user1
chmod 750 /var/ftp/user1
# 設定上傳目錄
mkdir /var/ftp/user1/upload
chown user1:ftpusers /var/ftp/user1/upload
chmod 770 /var/ftp/user1/upload
修改 Shell 為 /sbin/nologin 或 /bin/false 並加入 /etc/shells 是最通用、標準的做法,支援所有主流 FTP 伺服器且符合最小權限原則。搭配 chroot 限制目錄存取範圍,即可構建安全的 FTP 服務環境。