用ChrootDirectory限制SFTP登錄的用戶只能訪問指定目錄且不能進行ssh登錄


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM