1. 程式人生 > 實用技巧 >Sftp只允許使用者訪問指定的目錄,不能訪問其他目錄

Sftp只允許使用者訪問指定的目錄,不能訪問其他目錄

警告:在操作之前,先打個多個會話視窗,避免操作不當,引起無法登入伺服器,例如這樣

背景:

1.需要搭建sftp伺服器(一般伺服器自帶sftp服務,此處不再贅述)

2.sftp只允許訪問指定目錄,不能訪問其他目錄(重點)

在一些生產環境中,有時,使用者需要傳資料到伺服器,但是配置ftp服務比較麻煩,此時,我們可以為使用者建立sftp賬戶,讓使用者使用sftp來上傳下載所需的資料。Sftp賬號即為系統賬號,將賬戶密碼給使用者,使用者除了能登入sftp上傳下載資料外,還可以訪問系統中的其他目錄,由此,給我們的系統帶來了安全隱患,再次,我們需要配置使用者只能通過sftp登入系統下載上傳所需的資料。

1.建立sftp使用者joshua317

useradd joshua317
echo abc123 | passwd --stdin joshua317

2.設定sftp使用者joshua317的賬戶許可權

設定sftp的賬號許可權需要通過修改sshd_config配置檔案進行,sshd_config配置檔案修改內容如下:

vi /etc/ssh/sshd_config


#內容修改如下

# Subsystem     sftp    /usr/libexec/openssh/sftp-server   #註釋掉此行並新增一下行
Subsystem sftp internal-sftp
Match User joshua317                   #此處設定控制的使用者,也可以設定為組
ChrootDirectory /home/joshua317        #允許使用者訪問的目錄,此處我們設定為使用者家目錄,根據具體情況自己定義
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

配置完成後需要重啟服務:

service sshd reload
或者
systemctl restart sshd   #根據不同的作業系統選擇不同命令,這裡伺服器版本是centos7.X

此處配置完我們用另一臺機器測試登入,會出現錯誤,使用win系統sftp客戶端(FileZilla)同樣也不能正常登陸

[root@iz2ze60f904j9aetyxamj1z ~]# sftp [email protected]
Connecting to 172.17.16.89...
[email protected]'s password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

這是由於沒有配置目錄的正確許可權,我們需要設定使用者訪問的目錄的許可權

3.設定允許使用者訪問目錄的許可權

重點:sftp使用者訪問目錄需要設定所有者和所屬組的許可權均為root,並設定目錄的許可權為755,

但此目錄下的檔案及目錄的許可權我們可根據自己的需求任意設定。

chown root:root /home/joshua317/   #不要使用chown -R 
chmod 755 /home/joshua317/         #不要使用chmod -R

#設定該sftp賬號不允許登入
usermod joshua317 -s /sbin/nologin 

#然後重啟
service sshd reload

至此,我們的sftp配置已經完成,

4.測試

使用linux測試:

使用windows客戶端FileZilla測試:

5.設定使用者上傳檔案許可權

經過上面的設定後用戶可正常瀏覽下載目錄中的檔案,但是使用者無法上傳檔案。

此時需要在/home/joshua317/下建立屬主屬組為joshua317的目錄,並給/home/joshua317下的目錄設定acl許可權即可。

mkdir /home/joshua317/test
chown joshua317:joshua317 /home/joshua317/test
chmod 755 /home/joshua317/test

#檢視
getfacl /home/joshua317/test

測試是否可以在/homne/joshua317/test下面建立檔案或者目錄

6.額外:通過使用者組處理

如果又需要建立一個使用者joshua318,可以繼續通過匹配使用者的形式,只需要進行如下操作

首先建立一個使用者

#新增一個使用者,指定使用者組為joshua317,目錄為/home/joshua317,賬號不允許登入
useradd -g joshua317 -s /sbin/nologin -m joshua318
echo abc123 | passwd --stdin joshua318

調整sshd_config

vi /etc/ssh/sshd_config 

Match User joshua318
ChrootDirectory /home/joshua317

#重啟sshd
service sshd reload

但如果有很多個使用者,此時就需要通過組進行匹配

vi /etc/ssh/sshd_config 

Match Group joshua317
ChrootDirectory /home/joshua317

#然後重啟
service sshd reload