Linux 限制SFTP使用者目錄和許可權
很多的系統在和外部其他系統交換檔案時,喜歡使用SFTP協議。對於SFTP的伺服器來說,我們不想給予SFTP使用者太多的許可權,更不想讓其隨意瀏覽伺服器上的其他檔案和執行shell命令,下面介紹如何通過配置SSH來限制SFTP使用者的目錄和許可權。
首先我們需要新建一個使用者,用來做sftp的登入使用者
groupadd zhongan -g 1000
useradd zhongan -u 1000 -g 1000 -d /home/zhongan
然後我們可以在/home下看到剛剛建立的家目錄
ls -l /home total 4 drwx------ 3 zhongan zhongan 4096 Sep 12 10:39 zhongan
現在有兩種選擇,一是讓ftp使用者ftp進入後為家目錄,或者為其他任何一個目錄,先介紹家目錄
我們首先要把/home/zhongan的許可權屬主設定為root:zhongan,換句話說就是使用者SFTP登入後的根目錄所在目錄,和這個目錄所有的上層目錄,其所屬主必須是root,屬組暫時還沒有限制。這個意思就是說
/home的所屬必須為root,如root:root或者root:zhongan都可以
/home 的許可權至少應為755,當然linux系統預設就是這個
標準情況下,/home的狀態應為下面這樣
drwxr-xr-x. 3 root root 4096 Sep 12 10:32 home
然後/home/zhongan預設情況下是zhongan:zhongan,許可權為700,現在應該改為root:zhongan 許可權755,如下
chown root:zhongan /home/zhongan
chmod 755 /home/zhongan
ls -l
total 4
drwxr-xr-x 3 root zhongan 4096 Sep 12 10:39 zhongan
然後需要去電ftp使用者的登入許可權,需要修改/etc/passwd檔案,將/bin/bash換成/bin/nologin
zhongan:x:1000:1000::/home/zhongan:/sbin/nologin
至於這裡家目錄可以隨便寫,可以填 /home/zhongan,或者/都可以,因為不登入之後這裡的家目錄已經沒有意義了,SFTP登入後的根目錄在/etc/ssh/sshd_config中指定,如下
首先我們要註釋掉一行,不然修改後啟動不了sshd服務
# Subsystem sftp /usr/libexec/openssh/sftp-server
然後加入後面這幾行
Subsystem sftp internal-sftp
UsePAM yes
Match User zhongan
ChrootDirectory /home/zhongan/
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
其中上面指定了SFTP登入後的根目錄,即/home/zhongan/
這裡再強調一遍,根目錄本身所屬必須是root,屬組為sftp使用者的屬組,許可權最小為755,意味著777是不行的,也意味著zhongan本身是不能在/home/zhongan中建立新檔案、資料夾或者修改檔案的。雖然ftp使用者對於登入後的根目錄沒有寫許可權,但是我們可以用root新建一個資料夾,比如叫upload,然後把這個資料夾所屬改為zhongan,這樣ftp使用者就對/home/zhongan/upload擁有完全的寫許可權了。上傳檔案不要放到根目錄而是放到“/upload”下面
修改完sshd的配置後需要重啟sshd
service sshd restart
下面介紹一下,如果不使用家目錄作為sftp的根目錄,使用其他目錄的方法。
但是有一個原則還是要遵守,就是sftp所在的根目錄,和其所有的上級目錄,所屬必須是root,不然就會碰到sftp連線馬上被關閉的情況。
比如我們想要登入後的根目錄為/data/haha/abc
那麼:
/data/haha/abc 應該為root:zhongan 755
/data/haha/ 應該為root:root 755
/data 應該為root:root 755
如果想要上傳檔案,應該建立/data/haha/abc/upload資料夾,所屬zhongan:zhongan , 755,然後上傳檔案的目標路徑為/upload
然後修改/etc/ssh/sshd_config ,修改ChrootDirectory後面的目錄為/data/haha/abc/