Linux配置SFTP

需求:配置多個SFTP用戶,對應不同的SFTP路徑

1. 創建sftp根目錄

比如我配置 /data/sftp_datasftp根目錄,之後每個用戶都對應,該目錄下的子目錄

mkdir /data/sftp_data

2. 創建組

因爲有多個 sftp 用戶,所以需要建立一個組爲sftp,專門管理 sftp 用戶

groupadd sftp

3. 創建用戶

3.1 創建用戶

useradd -m -d /data/sftp_data/user1 -s /usr/sbin/nologin -g sftp user1
  • -m:自動創建 home 目錄

  • -d:指定 home 目錄爲 /data/sftp_data/user1

  • -s:shell 爲 /usr/sbin/nologin 禁止用戶使用SSH登錄,僅用於 SFTP

  • -g:指定組爲 sftp


3.2 配置用戶密碼

passwd user1

4. 配置SSH

4.1 修改/etc/ssh/sshd_config

vim /etc/ssh/sshd_config

註釋Subsystem sftp /usr/lib/openssh/sftp-server

新增Subsystem sftp internal-sftp,表示sftp服務使用系統自帶的internal-sftp

文件最後面新增內容:

Match Group sftp  			# 匹配組,多個組用逗號分隔
ChrootDirectory %h			# 指定用戶根目錄。%h表示用戶home目錄,%u表示用戶名
X11Forwarding no			# 禁止X11轉發
AllowTcpForwarding no		# 禁止TCP轉發
ForceCommand internal-sftp	# 強制使用系統internal-sftp

也可以Match User 用戶名,這樣就可以單獨爲指定用戶做配置


4.2 重啓SSH

service ssh restart

5. 配置目錄權限

在第4步,指定了ChrootDirectory,而ChrootDirectory權限要求有以下兩點:

  • ChrootDirectory指定的目錄及該目錄到系統根目錄爲止,目錄擁有者都只能是root
  • ChrootDirectory指定的目錄及該目錄到系統根目錄爲止,羣組用戶不能有寫入權限

因此/data/data/sftp_data/data/sftp_data/user1的擁有者必須爲root,且權限爲755

因爲我的/data目錄下有別的數據,所以我分別改權限

chown root:root /data
chown -R root:root /data/sftp_data

chmod 755 /data
chmod -R 755 /data/sftp_data

如果沒有按照以上規則配置權限,則用戶連接sftp會失敗,且有類似以下錯誤:

[email protected]'s password:
packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
Connection closed

6. 測試sftp連接

sftp [email protected]

7. sftp上傳

這個時候用戶訪問的是配置好的,僅對於該用戶的sftp根目錄,但這個目錄是沒有寫入權限的

比如user1連接sftp後,用戶看到的是/,對應實際機器上的 /data/sftp_data/user1,因此如果用戶需要上傳文件的話,需要再用戶sftp根目錄下建立一個所有者爲該用戶的目錄,比如:

mkdir /data/sftp_data/user1/upload
chown user1:sftp /data/sftp_data/user1/upload

此時用戶登錄sftp後,就可以將文件上傳到upload目錄下了


8. 配置多個用戶

由於/etc/ssh/sshd_config已經配置爲Match Group sftp,所以之後新增用戶,僅需要將新增用戶歸屬組爲sftp即可,而不需要每次都配置/etc/ssh/sshd_config,也不需要每次都重啓ssh


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