linux(centos6、centos7) 配置sftp服務器

0、sftp介紹

sftp是Secure FileTransferProtocol的縮寫,安全文件傳送協議。可以爲傳輸文件提供一種安全的加密方法。sftp與 ftp有着幾乎一樣的語法和功能。SFTP爲 SSH的一部分,是一種傳輸檔案至Blogger伺服器的安全方式。其實在SSH軟件包中,已經包含了一個叫作SFTP(Secure File TransferProtocol)的安全文件傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接操作,所以從某種意義上來說,SFTP並不像一個服務器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認證信息和傳輸的數據,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。

SFTP命令常用選項sftp即secure ftp,是一個交互式文件傳輸程式。它類似於ftp,但它進行加密傳輸,比FTP有更高的安全性。

1、sftp權限配置

1.1 創建sftp組

groupadd sftp  

創建完成之後使用cat /etc/group命令組的信息;

cat /etc/group

效果如下圖:
在這裏插入圖片描述

1.2 創建一個sftp用戶mysftp

創建一個sftp用戶mysftp,並加入到創建的sftp組中:
(使用-s /bin/false來禁止mysftp 這個賬戶ssh登錄權限)

useradd -g sftp -s /bin/false mysftp  

修改mysftp用戶的密碼:

passwd mysftp 

效果如下圖:
在這裏插入圖片描述

1.3 創建並配置mysftp的根目錄

新建/data/sftp/mysftp目錄(-p 創建多級目錄):

mkdir -p /data/sftp/mysftp  

並將它指定爲mysftp用戶的home目錄

usermod -d /data/sftp/mysftp mysftp

1.4 編輯配置文件/etc/ssh/sshd_config

vim /etc/ssh/sshd_config

將如下這行用#符號註釋掉

# Subsystem sftp /usr/libexec/openssh/sftp-server  

並在文件最後面添加如下幾行內容然後保存:

Subsystem sftp internal-sftp    
Match Group sftp    
ChrootDirectory /data/sftp/%u    
ForceCommand internal-sftp    
AllowTcpForwarding no    
X11Forwarding no  

效果如下圖:
在這裏插入圖片描述
這幾個配置的描述信息

  • Subsystem sftp internal-sftp
    配置一個外部子系統(例如,一個文件傳輸守護進程)。僅用於SSH-2協議。值是一個子系統的名字和對應的命令行(含選項和參數)。比如"sftp /usr/libexec/openssh/sftp-server"。,這裏配置爲內部的
  • Match Group sftp
    限定只有sftp組的才能訪問
  • ChrootDirectory /data/sftp/%u
    設定屬於用戶組sftp的用戶訪問的根文件夾
  • ForceCommand internal-sftp
    強制執行這裏指定的命令而忽略客戶端提供的任何命令。這個命令將使用用戶的登錄shell執行(shell -c)。這可以應用於 shell 、命令、子系統的完成,通常用於 Match 塊中。這個命令最初是在客戶端通過 SSH_ORIGINAL_COMMAND 環境變量來支持的。
  • AllowTcpForwarding no
    是否允許TCP轉發,默認值爲"yes", 禁止TCP轉發並不能增強安全性,除非禁止了用戶對shell的訪問,因爲用戶可以安裝他們自己的轉發器。
  • X11Forwarding no
    是否允許進行 X11 轉發。默認值是"no",設爲"yes"表示允許。如果允許X11轉發並且sshd(8)代理的顯示區被配置爲在含有通配符的地址(X11UseLocalhost)上監聽。那麼將可能有額外的信息被泄漏。由於使用X11轉發的可能帶來的風險,此指令默認值爲"no"。需要注意的是,禁止X11轉發並不能禁止用戶轉發X11通信,因爲用戶可以安裝他們自己的轉發器。
    如果啓用了 UseLogin ,那麼X11轉發將被自動禁止。

1.5 新建一個目錄供sftp用戶mysftp上傳文件

這個目錄所有者爲mysftp所有組爲sftp,所有者有寫入權限所有組無寫入權限

mkdir /data/sftp/mysftp/upload 
chown mysftp:sftp /data/sftp/mysftp/upload 
chmod 755 /data/sftp/mysftp/upload   

注意:修改權限這裏有個大坑,/data/sftp/mysftp 這些目錄必須都是root用戶的,只有upload才能是mysftp的(這裏建議upload所有者/組爲mysftp:sftp,sftp和mysftp所有者/組爲root:sftp,data的所有者/組爲root/root)。
這是由於/etc/ssh/sshd_config配置裏面ChrootDirectory有個主目錄權限問題,ChrootDirectory所指向的文件夾,屬主必須是root,屬組是sftp用戶所屬的用戶組。而且ChrootDirectory所指向的文件夾到系統根路徑上的所有途徑文件夾,屬主都必須是root,且權限不允許有羣組用戶寫入權限,即權限 只能爲750或755,如果任意一個是777,則會出現報錯。

centos6.5會報錯:

 client_loop: send disconnect: Broken pipe Connection
 closed.   Connection closed 

centos7會報錯:

Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

所以,用mysftp用戶連接的客戶端只能讀取mysftp文件夾下的內容,不能寫入,需要寫入的話得寫到有寫權限的upload文件夾下。

2、關閉selinux並重啓sshd服務

setenforce 0
systemctl restart sshd.service

上述命令截圖如下:
在這裏插入圖片描述
注意,如果是centos6.5,則重啓sshd命令爲:

setenforce 0
service sshd restart

效果如下圖:
在這裏插入圖片描述

3、遠程驗證sftp服務以及sftp常用命令

3.1 遠程連接

遠程測試sftp命令爲:sftp user@ip

sftp mysftp@192.168.77.135

3.2 上傳文件

命令格式: put [-Ppr] local [remote]

注意:由於上面設置了sftp的根目錄爲“/data/sftp/mysftp”,所以下面命令雖然寫的遠端路徑是“/upload”,但是實際傳到的地址爲“/data/sftp/mysftp/upload”

put /home/beyond/mysoftware/ftp-0.17-54.el6.x86_64.rpm /upload

3.3 下載文件

命令格式:get [-Ppr] remote [local]

 get java-demo.sh /home/beyond/

3.4 pwd和lpwd

  • pwd是看遠端服務器的目錄, 即sftp服務器默認的當前目錄。
  • lpwd是看linux本地目錄。

3.5 ls和lls

  • ls是看sftp服務器下當前目錄下的文件
  • lls是看linux當前目錄下的文件

3.6 !command

這個是指在linux上執行command這個命令。

比如!ls是列舉linux當前目錄下的東文件, !rm a.txt是刪除linux當前目錄下的a.txt文件。

這個命令非常非常有用, 因爲在sftp> 後輸入命令, 默認值針對sftp服務器的, 所以執行rm a.txt刪除的是sftp服務器上的a.txt文件, 而非本地的linux上的a.txt文件。

3.7 exit和quit

退出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章