Sftp配置


5.1、sftp簡介:

1、sftp是Secure FileTransferProtocol的縮寫,安全文件傳送協議,可以為傳輸文件提供一種安全的加密方法。

(1)sftp 與 ftp 有着幾乎一樣的語法和功能

(2)SFTP 為 SSH的一部分,是一種傳輸文件至服務器的安全方式

(3)SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接操作

(4)SFTP安全性非常高

(5)SSH軟件已經包含SFTP安全文件傳輸子系統


2、sftp和ftp是兩種不同的文件傳輸協議,sftp是基於ssh協議的加密ftp傳輸協議,是作為SSH2的一個子服務工

作的,只要sshd服務器啟動了它就可用。vsftpd是一款ftp服務器,支持ftp協議,不支持sftp協議。


3、基於對線上服務器的保密和安全,不希望開發人員直接登錄線上服務器,因為登錄服務器的權限太多難以管控,

如直接修改代碼、系統配置等,希望能限制開發人員ssh登錄機器,但是通過ftp/sftp上傳代碼文件。


4、Sftp參數說明:

在/etc/ssh/sshd_config配置文件末尾追加的配置:

Match User dev01

#匹配用戶,如果要匹配多個用戶,多個用戶之間用逗號分割

ChrootDirectory /sftp/developer

#指定登陸用戶到自己的用戶目錄

ForceCommand internal-sftp

#指定 sftp 命令

X11Forwarding no

AllowTcpForwarding no

#不允許用戶能使用端口轉發

PasswordAuthentication yes

#使用密碼驗證


5、常見問題:

如果你鏈接服務器的時候出現下面的提示:

錯誤: Network error: Software caused connection abort

錯誤: 無法連接到服務器

(1)這個問題的原因是ChrootDirectory的權限問題,所以請確保sftp用戶從根目錄開始一直往上到系統根目錄

為止的目錄權限是755,所有人是root,用戶組可以不是 root。

(2)如果屬組或者其他用戶需要上傳文件,可以在FTP的根目錄下創建個上傳文件夾,這個文件夾權限可以根據

實際情況修改。


5.2、需求:

有個開發組sftp,這個組中有兩個用戶,dev01、dev02。其中dev01對"/sftp/developer/upload_dir"文件夾中

的內容有所有的權限。dev02只能查看、下載"/sftp/developer/upload_dir"文件夾中的內容。不屬於sftp組的用

戶查看不到任何信息。


5.3、sftp軟件安裝:

#默認情況下linux操作系統安裝了 ssh 后,就安裝了openssh-server、openssh-clients軟件包了。

[root@slavenode1 ~]# cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

[root@slavenode1 ~]# rpm -qa openssh-server openssh-clients

openssh-clients-7.4p1-16.el7.x86_64

openssh-server-7.4p1-16.el7.x86_64

[root@slavenode1 ~]# ssh -V

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

#注:openssh-server 版本至少得 4.8p1, 因為配置權限需要版本添加的新配置項 ChrootDirectory 來完成。


5.4、創建用戶和ftp文件夾:

1、創建sftp組:

[root@slavenode1 ~]# groupadd sftp


2、創建dev01、dev02、用戶:

[root@slavenode1 ~]# useradd -g sftp -M -s /bin/false dev01

[root@slavenode1 ~]# useradd -g sftp -M -s /bin/false dev02

#設置密碼

[root@slavenode1 ~]# echo "dev01" | passwd --stdin dev01

[root@slavenode1 ~]# echo "dev02" | passwd --stdin dev02


3、創建"/sftp/developer/upload_dir/"目錄並授權:

[root@slavenode1 ~]# mkdir -p /sftp/developer/upload_dir/

[root@slavenode1 ~]# chown dev01.sftp /sftp/developer/upload_dir/

[root@slavenode1 ~]# chmod 750 /sftp/developer/upload_dir/

[root@slavenode1 ~]# ls -ld /sftp/developer/upload_dir/

drwxr-x--- 3 dev01 sftp 20 5月 26 16:41 /sftp/developer/upload_dir/


5.5、配置Sftp:

[root@slavenode1 ~]# vim /etc/ssh/sshd_config


1、將"Subsystem sftp /usr/libexec/openssh/sftp-server"注釋掉,在其下方重新添加一行

"Subsystem sftp internal-sftp"


說明:

(1)如果這行文字存在且沒有被注釋掉,那么SFTP已經開啟,所有可使用ssh的用戶都可使用SFTP,但是這

種方式有一個缺陷,就是用戶在SFTP軟件里面可以cd / 從而看到系統所有文件。


(2)使用internal-sftp的好處:

1)性能更好,在連接sftp的時候,系統不會fork出一個新的sftp進程,可使用ps -e | grep sftp命令查看sftp

進程。

2)可以在ssh的配置文件/etc/ssh/sshd_config中,使用ChrootDirectory,Match,ForceCommand等指

令來限制登錄sftp用戶的行為。


2、在配置文件的末尾追加如下內容:

(1)dev01用戶:

Match User dev01

ChrootDirectory /sftp/developer

ForceCommand internal-sftp

X11Forwarding no

AllowTcpForwarding no

PasswordAuthentication yes


(2)dev02用戶:

Match User dev02

ChrootDirectory /sftp/developer

ForceCommand internal-sftp

X11Forwarding no

AllowTcpForwarding no

PasswordAuthentication yes


3、解決ssh連接慢的問題:

GSSAPIAuthentication no

UseDNS no

#關閉ssh連接時的DNS解析


5.6、重啟ssh服務(即重啟Sftp服務):

[root@slavenode1 ~]# systemctl restart sshd.service


5.7、測試:

我這里使用ftp開源連接工具FileZilla進行測試。

1、使用dev01用戶登陸:

(1)連接服務器:



(2)上傳內容:

#在服務器中查看

[root@slavenode1 ~]# ls -l /sftp/developer/upload_dir/

總用量 0

drwxr-xr-x 2 dev01 sftp 150 5月 26 17:04 照片


(3)刪除內容:


#刪除內容成功


2、使用dev02用戶登陸:

(1)連接服務器:



(2)內容操縱:

1)

2)

3)










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM