需求:配置多個SFTP用戶,對應不同的SFTP路徑
1. 創建sftp根目錄
比如我配置 /data/sftp_data
爲sftp
根目錄,之後每個用戶都對應,該目錄下的子目錄
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