需求:使用sftp替代vsftpd,要求用戶沒有權限登陸操做系統,而且只能在指定目錄進行上傳下載。css
使用 sftp 的 chrootdirectory 功能。
註釋掉原來的Subsystem一行,添加如下三行就能夠了.Subsystem指定sftp的處理方式.Match在sshd_config中用來指定條件的,後面能夠跟group也能夠跟ip,也能夠三者或者二者同時出現.要注意的是,match所匹配的用戶受match之後的語句影響,直到文件尾或者下一個match.ChrootDirectory就是指定匹配的用戶登錄之後所在的目錄了,這裏還能夠加%u和%h分別指代用戶名和家名.shell
#vim /etc/ssh/sshd_config #Subsystem sftp /usr/lib64/ssh/sftp-server Subsystem sftp internal-sftp Match User xx ChrootDirectory /chroot #rcsshd restart #useradd xx && echo 「a」|passwd –stdin xx
目錄權限設置上要遵循2點:
ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,屬主和屬組必須是root;
ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,只有屬主能擁有寫權限,也就是說權限最大設置只能是755。
因爲上面設置了目錄的權限是755,所以全部非root用戶都沒法在目錄中寫入文件。咱們須要在ChrootDirectory指定的目錄下創建子目錄,從新設置屬主和權限。vim
#mkdir /chroot #chmod 755 /chroot #mkdir –p /chroot/xx #chown xx.users /chroot/xx
測試以下:
bash
xx用戶的shell 爲 /bin/bash ,理論上是能夠登陸操做系統的,爲何會提示/bin/bash: No such file or directory 後關閉鏈接呢?
由於前面的Match 語句已經將xx 用戶限定只能在 /chroot 目錄下活動,xx經過ssh登陸系統後會去查找 /bin/bash,即 /chroot/bin/bash ,這個目錄是不存在的,因此沒法登陸。ssh