建立不能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