#建立sftp組:html
groupadd sftp
#建立一個用戶sftpuser:linux
useradd -g sftp -s /bin/false sftpuser
#提示:segmentfault
/etc/group 文件包含全部組
/etc/shadow /etc/passwd 系統存在的全部用戶名
#設置sftpuser用戶的密碼,會要求你輸入兩次密碼確認:服務器
passwd sftpuser
#建立一個sftp的上傳目錄:app
mkdir /datas/www
#修改用戶sftpuser所在的目錄:ssh
usermod -d /datas/www sftpuser
#配置sshd_config:性能
vi /etc/ssh/sshd_config
#找到以下這行,並註釋掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
#添加以下幾行(若是添加以後出現問題,則添加到最後)
Subsystem sftp internal-sftp #這行指定使用sftp服務使用系統自帶的internal-sftp Match User sftpuser #這行用來匹配用戶 ChrootDirectory /datas/www #用chroot將用戶的根目錄指定到/datas/www ,這樣用戶就只能在/datas/www下活動 AllowTcpForwarding no ForceCommand internal-sftp #指定sftp命令
爲何用 internal-sftp 而不用默認的 sftp-server,這是由於: 這是一個進程內的 sftp 服務,當用戶 ChrootDirectory 的時候,將不請求任何文件; 更好的性能,不用爲 sftp 再開一個進程。
#保存退出測試
#設定Chroot目錄權限:ui
chown -R root:root /datas/www chmod 755 /datas/www
#創建SFTP用戶登入後可寫入的目錄:spa
mkdir /datas/www/sftpuser chown -R sftpuser:sftp /datas/www/sftpuser/ chmod 755 /datas/www/sftpuser/
#重啓sshd服務:
service sshd restart
#測試是否能正常登錄:
sftp -P 22122 ftpuser@127.0.0.1
#關閉SElinux:
vi /etc/sysconfig/selinux #找到以下這行 SELINUX=enforcing #修改成 SELINUX=disabled
#保存退出
#這裏討論了爲何要關閉這功能:https://www.zhihu.com/question/20559538
一、修改sshd_config文件後重啓 sshd,報錯:Directive 'UseDNS' is not allowed within a Match block
語法錯誤,緣由未知,只須要把兩段配置的位置互調就不報錯了。
修改前:
Subsystem sftp internal-sftp UsePAM yes Match user sftpuser1 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user1/ UseDNS no AddressFamily inet PermitRootLogin yes SyslogFacility AUTHPRIV PasswordAuthentication yes
修改後(就是換個順序):
UseDNS no AddressFamily inet PermitRootLogin yes SyslogFacility AUTHPRIV PasswordAuthentication yes Subsystem sftp internal-sftp UsePAM yes Match user sftpuser1 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user1/
參考資料:http://www.cnblogs.com/xjnotxj/p/6912471.html
二、若是你連接服務器的時候出現下面的提示:
> Write failed: Broken pipe
> Couldn't read packet: Connection reset by peer
這個問題的緣由是ChrootDirectory的權限問題,你設定的目錄必須是root用戶全部,不然就會出現問題。因此請確保sftp用戶根目錄的全部人是root, 權限是 750 或者 755。注意如下兩點原則:
目錄開始一直往上到系統根目錄爲止的目錄擁有者都只能是 root,用戶組能夠不是 root。
目錄開始一直往上到系統根目錄爲止都不能夠具備羣組寫入權限
參考資料:
http://www.javashuo.com/article/p-bjwpaxgq-co.html
http://www.cnblogs.com/kgdxpr/p/3623369.html
http://blog.csdn.net/xinxin19881112/article/details/46831311