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)
