主要是參考了
我的需求如下:
不允許使用者登入 Shell 進行操作 ( 讓使用者只能使用 SFTP 傳輸檔案 )
使用者登入後皆到統一的目錄下, 透過 chroot 限制存取目錄.
編輯 “/etc/ssh/sshd_config" (OpenSSH 的設定檔)
# vi /etc/ssh/sshd_config Subsystem sftp internal-sftp Match group staff ChrootDirectory /home/share X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp # service sshd restart
Subsystem sftp /usr/lib/openssh/sftp-server internal-sftp
並修改成:
Subsystem sftp internal-sftp
其實我不太清楚為什麼要這麼設定,可以參考 http://en.wikibooks.org/wiki/OpenSSH/Cookbook/SFTP
然後在該設定檔最後加上以下設定,其中的 ChrootDirectory 設定的是為了讓使用者登入後皆到統一的目錄下
Match group staff
ChrootDirectory /home/share
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
staff 則是群組,要參考 /etc/group
# cat /etc/group ... staff:x:504:ben,John,Mary,Dexter
John,Mary,Dexter 就會受到限制.
接下來是設定目路權限
因為使用到 chroot() 所以該目錄的擁有者必須為 root 權限 755
# chown root.root /home/share # chmod 755 /home/share
要不然使用者無法登入,且會出現下面的訊息
# cat /var/log/secure sshd[8636]: pam_unix(sshd:session): session opened for user sftpuser by (uid=0) sshd[8707]: fatal: bad ownership or modes for chroot directory "/home/sftpuser" sshd[8636]: pam_unix(sshd:session): session closed for user
最後即是將新增一個 upload 目錄給群組 staff 的使用者來使用,使用者就可以透過 winscp 之類的工具了.
# cd /home/share # mkdir upload # chown staff.staff upload