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


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

背景:

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

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

image.png

在一些生產環境中,有時,用戶需要傳數據到服務器,但是配置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@xxxxxxxxxxxxx ~]# sftp joshua317@172.17.xxx.xxx
Connecting to 172.17.xxx.xxx...
joshua317@172.17.xxx.xxx'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權限即可。

image.png

image.png

 

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

#查看
getfacl /home/joshua317/test

 

測試是否可以在/homne/joshua317/test下面創建文件或者目錄

image.png

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

 

測試是否成功: 

 


免責聲明!

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



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