首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Linux FTP / Telnet 使用者限制:僅允許 FTP 登入、禁止 Shell 存取

     編輯:PHP 相關知識

需求場景

提供 FTP 帳號給使用者上傳檔案,但為安全考量,必須禁止其透過 SSH/Telnet 登入系統取得 Shell。

方案一:wu-ftpd 專用限制 (舊版主流)

編輯 /etc/ftpaccess,加入:

restricted-uid *

此指令限制所有使用者僅能透過 FTP 存取其家目錄,無法取得 Shell。適用於 wu-ftpd 2.5+ 版本。

方案二:修改登入 Shell 為 /bin/true (通用標準做法)

此法適用於所有 FTP 伺服器,原理是將使用者的登入 Shell 設為不提供互動式環境的程式。

步驟 1:修改 /etc/passwd

# 原始
user1:x:1001:1001::/home/user1:/bin/bash

# 修改為
user1:x:1001:1001::/home/user1:/bin/true

步驟 2:將 /bin/true 加入 /etc/shells

echo "/bin/true" >> /etc/shells

關鍵點:FTP 伺服器(如 vsftpd、ProFTPD)啟動時會檢查 /etc/shells,若使用者的 Shell 不在清單中,將拒絕 FTP 登入。因此必須加入 /bin/true(或 /sbin/nologin、/bin/false)。

方案三:vsftpd 專用配置 (現代主流)

編輯 /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

補充:建立專用 FTP 群組與目錄權限

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 服務環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved