創建不能ssh登錄的用戶sftpuser1,密碼用於sftp登錄:
sudo adduser sftpuser1 --home /sftp/sftpuser1 --shell /bin/false
sudo nano /etc/ssh/sshd_config (執行man sshd_config查看配置說明)
Ubuntu/Debian上把Subsystem sftp /usr/lib/openssh/sftp-server
Redhat/CentOS上把Subsystem sftp /usr/libexec/openssh/sftp-server
修改為 Subsystem sftp internal-sftp
並加入:
Match User sftpuser1
ChrootDirectory /sftp/sftpuser1
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
注意ChrootDirectory設置的目錄/sftp/sftpuser1的所有者必須是root,並且該目錄的上級目錄/sftp的所有者也必須是root.
而且只有所有者擁有寫權限,/sftp/sftpuser1和/sftp的權限最大設置只能是755.
sudo chown root:root /sftp/sftpuser1
sudo service ssh reload
由於上面設置了目錄的權限是755,
因此所有非root用戶都無法在目錄中寫入文件.
我們需要在ChrootDirectory指定的目錄下建立子目錄比如data,重新設置屬主和權限.
mkdir /sftp/sftpuser1/data
chown sftpuser1:sftpuser1 /sftp/sftpuser1/data
chmod 755 /sftp/sftpuser1/data
這樣就可以在讀寫data目錄了.
配置好后,用戶sftpuser1只能通過sftp訪問指定目錄,而且不能進行ssh登錄:
sftp sftpuser1 @127.0.0.1 登錄成功,執行 ls -lha / 可見根目錄為 /sftp/sftpuser1, 執行cd ..可見無法進入上一層目錄.
ssh sftpuser1 @127.0.0.1 提示:
Could not chdir to home directory /sftp/sftpuser1: No such file or directory
This service allows sftp connections only.
Connection to 127.0.0.1 closed.
把 AllowTcpForwarding no 改為 AllowTcpForwarding yes 表示允許用戶進行端口轉發, X11Forwarding 含義類似.
上面已經實現了端口轉發和禁止登錄,如果要禁止讀寫,執行 chmod 000 /sftp/sftpuser1