linux如何搭建sftp伺服器

abin1703發表於2020-08-14
最近搞一個sftp專案,用於給第三方公司上傳檔案,期間查詢了很多種方式,依然無法限制目錄,很苦惱,本次經過無數次試驗,終於成功了。
提供sftp服務的有vsftpd和internal-sftp,這裡用的是系統自帶的internal-sftp,操作步驟如下:
下面是千篇一律的步驟,網上大抵相同。
1、建立使用者 sftpuser,並禁止ssh登入,不建立家目錄
       useradd -s /sbin/nologin -M sftpuser
2、設定使用者密碼
       passwd sftpuser
3、建立sftp根目錄,所有sftp使用者都將在該目錄下活動。(如果以後不會在新增新使用者的話,可跳過此目錄)
       mkdir /sftp
4、設定目錄許可權,目錄的許可權設定有兩個要點:
      目錄開始一直往上到系統根目錄為止的目錄擁有者都只能是root
      目錄開始一直往上到系統根目錄為止都不可以具有群組寫入許可權
      chown root:root /sftp
      chmod 755 /sftp      注:該目錄許可權最大為755,設定成777會報錯,這個也是我困擾我的一個地方。
5、建立使用者sftpuser根目錄,目錄名為使用者名稱
       cd /sftp
       mkdir sftpuser
6、設定sftpuser目錄許可權
       chown root:sftpuser /sftp/sftpuser
       (注:設定使用者sftpuser,如果設定擁有者為root,表示該目錄sftpuser沒有許可權讀寫,在該目錄下建立其它目錄,賦權給sftpuser使用者讀寫許可權;
           若需要對該目錄擁有讀寫許可權,設定許可權:chown sftpuser:sftpuser /home/sftp/sftpuser)
        chmod 755 /sftp/sftpuser   注:這裡的目錄sftpuser  許可權也只能是755,否則無法限制目錄。
7、配置sshd_config
        vi /etc/ssh/sshd_config
8、修改如下內容,並儲存退出
        #註釋掉這行
        #Subsystem sftp /usr/libexec/openssh/sftp-server
        新增這行:
        Subsystem sftp internal-sftp  #指定使用sftp服務使用系統自帶的internal-sftp,如果不新增,使用者無法透過sftp登入。
        #新增在配置檔案末尾
        Match User sftpuser#匹配使用者,如果要匹配多個組,多個組之間用逗號分割
        ChrootDirectory /sftp/%u #用chroot將指定使用者的根目錄,chroot的含義:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/;
             #這裡的%u指的是賬號名,/home/sftp/%u 含義是:/sftp/sftpuser
        ForceCommand internal-sftp #指定sftp命令
        X11Forwarding no #這兩行,如果不希望該使用者能使用埠轉發的話就加上,否則刪掉
        AllowTcpForwarding no
 9、重啟sshd伺服器
        systemctl restart sshd.service
        #查詢sshd啟動狀態命令:
        systemctl status sshd.service
10、sftpuser使用者登入測試:
        sftp -oPort=22 sftpuser@127.0.0.1
至此已經完成了sftp建立使用者,並修改許可權,限制根目錄。
 
在使用者登入測試過程中,可能會遇到如下錯誤:
         Couldn't read packet: Connection reset by peer
這是什麼原因導致的呢,當時我一直很困惑,後來發現,是目錄許可權導致了該問題,具體解決方案,回看以上4、5、6步驟!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2711704/,如需轉載,請註明出處,否則將追究法律責任。

相關文章