Linux(CentOS)上配置 SFTP(附解決Write failed: Broken pipe Couldn't read packet: Connection reset by peer)

#建立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。

  • 目錄開始一直往上到系統根目錄爲止都不能夠具備羣組寫入權限 

  • 上面2點必定注意,仔細檢查。我就是由於這個問題,致使一直有這個問題。仔細檢查配置後,解決問題。

 

參考資料:

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

相關文章
相關標籤/搜索