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

Linux 配置 Chroot SFTP 限制用戶僅能文件傳輸

編輯:Linux 教學

場景與目標

需求:創建用戶 jack,僅允許通過 SFTP 上傳/下載文件至自己的家目錄,**禁止 SSH 登錄**、**禁止目錄遍歷**(chroot 監獄)。適用於 RHEL/CentOS 6.x/7.x/8.x。

核心原理

  • SFTP:SSH File Transfer Protocol,基於 SSH 協議,提供文件傳輸、管理功能
  • Chroot:改變進程根目錄,用戶登入後看到的 / 實際是其家目錄(如 /home/jack),無法訪問上層目錄
  • internal-sftp:OpenSSH 內建 SFTP 子系統,無需外部進程,配合 ForceCommand 強制執行

分步實施指南

步驟 1:創建專用組與用戶

# 創建 sftp 用戶組
groupadd sftp_users

# 創建用戶 jack,禁止 shell 登錄,指定附加組
useradd -G sftp_users -s /sbin/nologin -d /home/jack jack
passwd jack  # 設置密碼

# 若用戶已存在
usermod -G sftp_users -s /sbin/nologin jack

步驟 2:修改 SSH 配置 /etc/ssh/sshd_config

# 註釋掉原有 sftp 子系統行
# Subsystem sftp /usr/libexec/openssh/sftp-server

# 使用內建 sftp
Subsystem sftp internal-sftp

# 在文件末尾添加 Match 塊(必須放在最後)
Match Group sftp_users
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp

關鍵指令說明:

  • Match Group sftp_users:僅對該組用戶生效
  • ChrootDirectory %h:%h 展開為用戶家目錄(/home/jack)
  • ForceCommand internal-sftp:強制執行 SFTP,忽略 ~/.ssh/rc 等命令

步驟 3:設置目錄權限(關鍵!權限錯誤會導致登錄失敗)

# 家目錄必須屬於 root,權限 755
chown root:root /home/jack
chmod 755 /home/jack

# 創建上傳目錄,授權給用戶
mkdir /home/jack/upload
chown jack:sftp_users /home/jack/upload
chmod 750 /home/jack/upload
⚠ 權限鐵律:Chroot 目錄(/home/jack)必須屬於 root:root,權限最大 755,否則 sshd 會拒絕登錄(日誌提示 bad ownership or modes for chroot directory)。子目錄可授權給用戶。

步驟 4:重啟 SSH 服務並測試

systemctl restart sshd
# 或 service sshd restart

測試驗證

# 1. SSH 登錄應被拒絕
ssh jack@server
# This service allows sftp connections only.
# Connection closed.

# 2. SFTP 登錄成功,自動進入 chroot 目錄
sftp jack@server
# Connected to server.
# sftp> pwd
# Remote working directory: /
# sftp> ls
# upload
# sftp> put localfile.txt upload/
# Uploading localfile.txt to /upload/localfile.txt

常見問題排查

進階:多用戶隔離與共享目錄

  • 每用戶獨立 chroot:按上述流程創建用戶並加入 sftp_users 組
  • 共享目錄:在 chroot 內掛載綁定 mount --bind /data/shared /home/jack/shared,注意權限
  • 日誌審計:/var/log/secure 記錄 SFTP 登錄/操作,可配合 auditd 做詳細審計
Copyright © Windows教程網 All Rights Reserved
現象原因解決
SFTP 登錄後斷開Chroot 目錄權限/所有者不符確保家目錄 root:root 755
無法上傳文件上傳目錄權限不足chown jack:sftp_users upload/
可看到上層目錄Match 塊未生效或位置錯誤Match 必須在 sshd_config 末尾
SELinux 拒絕SELinux 阻止寫入setsebool -P ssh_chroot_rw_homedir on 或調整標簽