1. 程式人生 > >Linux 限制SFTP使用者目錄和許可權

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/