SFTP Server
適用 CentOS 6 以後版本
編輯 /etc/ssh/sshd_config
NOTE: 註解 Subsystem 行,加上其他幾行
# override default of no subsystems #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp Match Group sftp-only ChrootDirectory /sftp-server/%u-root X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
新增帳號/群組
groupadd sftp-only useradd -c "sftp users" -G sftp-only -M -s /sbin/nologin test
新增 sftp 各帳號的根目錄,以及權限設定 *重要*
mkdir /sftp-server mkdir -p /sftp-server/test-root/test chown mytest:mytest /sftp-server/test-root/test
TIPs:
- ChrootDirectory 所定義的目錄 Owner 必須是 root,否則 /var/log/secure 會出現錯誤:
Accepted password for test from 10.12.25.68 port 60213 ssh2
pam_unix(sshd:session): session opened for user test by (uid=0)
fatal: bad ownership or modes for chroot directory "/home/test"
pam_unix(sshd:session): session closed for user test- sftp 各帳號的目錄架構類似
# tree -l /sftp-server
/sftp-server
├── test2-root
│ └── test2
│ └── readme.txt
└── test-root
└── test
4 directories, 1 file
A: 修改 /etc/ssh/sshd_config,如果 OpenSSH-Server 版本低於 4.8p1
Subsystem sftp internal-sftp ChrootDirectory /home AllowTCPForwarding no X11Forwarding no
Tips:
* ChrootDirectory 所指定的目錄owner必須是 root
* home 目錄下的用戶名稱仍可以被其他用戶看到,尚無解決方法。
* 帳號登入後,自動進入所屬 home 目錄,可修改帳號的設定,參考指令:
# usermod -d /john john
設定 Chroot 目錄權限:錯誤的目錄權限設定會導致在 log 中出現 "fatal: bad ownership or modes for chroot directory XXXXXX" 的訊息。根據 openssh 5.1 chrootdirectory permissions issue 這篇文章的資訊顯示,目錄的權限設定有兩個要點:
A:
修改某帳號的 shell
# usermod -s /usr/libexec/openssh/sftp-server john # echo "/usr/libexec/openssh/sftp-server" >> /etc/shells