1. 程式人生 > 其它 >sftp服務限制使用者登入家目錄

sftp服務限制使用者登入家目錄

sftp和ftp是兩種協議是不同的,sftp是ssh內含的協議,只要sshd伺服器啟動了,它就可用,它本身不需要ftp伺服器啟動。

1.檢視openssh軟體版本,想sftp服務使用者只能訪問特定的檔案目錄,版本需要4.8以上

[root@localhost ftp]# rpm -qa | grep openssh
openssh-server-5.3p1-81.el6_3.x86_64
openssh-5.3p1-81.el6_3.x86_64
openssh-clients-5.3p1-81.el6_3.x86_64

2.新增使用者,限制使用者只能通過sftp訪問

[root@localhost ftp]# useradd -m -d /home/uap  -s /sbin/nologin uap

3.限制使用者通過sftp登入進來時只能進入主目錄,修改/etc/ssh/sshd_config檔案

[root@localhost ftp]# vim /etc/ssh/sshd_config
#Subsystem	sftp	/usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User uap
         ChrootDirectory /home/uap
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp

重啟ssh

4.測試訪問

root@10.1.1.200:test# sftp -oPort=22 [email protected]
Connecting to 127.0.0.1...
[email protected]'s password: 
Read from remote host 10.1.6.175: Connection reset by peer
Couldn't read packet: Connection reset by peer

發現連線不上,檢視日誌

[root@localhost ftp]# tail /var/log/messages
Jan  6 11:41:41 localhost sshd[4907]: fatal: bad ownership or modes for chroot directory "/home/uap"
Jan  6 11:41:41 localhost sshd[4905]: pam_unix(sshd:session): session closed for user uap

解決方法:

目錄許可權設定上要遵循2點:

ChrootDirectory設定的目錄許可權及其所有的上級資料夾許可權,屬主和屬組必須是root;

ChrootDirectory設定的目錄許可權及其所有的上級資料夾許可權,只有屬主能擁有寫許可權,許可權最大設定只能是755。

如果不能遵循以上2點,即使是該目錄僅屬於某個使用者,也可能會影響到所有的SFTP使用者。

[root@localhost ftp]# ll
total 4
drwxr-xr-x 3 uap uap 4096 Jan  5 13:06 uap
[root@localhost ftp]# chown root:root uap
[root@localhost ftp]# chmod 755 uap
[root@localhost ftp]# ll
total 4
drwxr-xr-x 3 root root 4096 Jan  5 13:06 uap

然後在測試通過

[email protected]:test# sftp -oPort=22 [email protected]
Connecting to 10.1.6.175...
[email protected]'s password: 
sftp> ls
test  
sftp> cd ..
sftp> ls
test  
sftp> cd test
sftp> ls
1.txt  
sftp> get 1.txt
Fetching /test/1.txt to 1.txt
/test/1.txt

可以看到已經限制使用者在家目錄,同時該使用者也不能登入該機器。