由于需要,公司網站目錄需要把上傳權限開通,并且同一個目錄需要不同的人給與不同的權限。但是上傳隻能通過ftp進行上傳。而網站伺服器上的ftp伺服器使用的是vsftpd。
具體要求如下:
網站根目錄/www,對使用者ailanni具有所有權,能上傳、下載下傳、删除、建立目錄權限。對bilanni使用者具有下載下傳、浏覽權限。其他使用者直接跳轉到ftp公共目錄下。
根據這個要求我們需要使用到vsftpd的虛拟使用者。
vsftp虛拟使用者的原理是:把虛拟使用者的權限映射到系統使用者上。而虛拟使用者的權限是有系統使用者對目錄的控制達到的。
如果安裝上述要求的話,我們的思路是這樣的。
在系統中建立使用者ailanni,使其對/www目錄具有所有權。而修改其使用者組,使其使用者組對/www目錄隻具有檢視、浏覽權限。即可。
下面把相關的操作步驟記錄如下:
首先、安裝vsftpd軟體。
yum –y install vsftpd

安裝完畢,我們先來建立所需要的使用者。注意該系統使用者一定要建立家目錄,否則在後邊無法登陸ftp伺服器。
useradd ailanni
useradd bilanni
檢視使用者所屬的使用者組:
id ailanni
id bilanni
可以看到目前ailanni使用者屬于ailanni使用者組,bilanni使用者屬于bilanni使用者組。剛剛我們在前邊就說過,要達到bilanni對www目錄具有浏覽、上傳權限。我們需要把該使用者加入到ailanni使用者組,通過這樣控制相關權限。
現在來把bilanni使用者,加入到ailanni使用者組。
usermod -g ailanni bilanni
使用者建立完畢,我們現在來建立/www目錄,并修改其相關的屬性。
mkdir /www
通過上圖,我們可以看到目前www目錄,所屬的使用者及使用者組為root。現在來進行修改,修改ailanni使用者具有所有權限,ailanni使用者組具有浏覽、權限,其他使用者組沒有任何權限。把www目錄的權限修改為750如下圖:
chown –r ailanni:ailanni /www
chmod –r 750
以上我們把有關系統使用者及其相關權限設定完畢,下面就來配置vsftpd。
切換到vsftpd的安裝目錄,編輯vsftpd.conf檔案。如下圖:
vim /etc/vsftpd/vsftpd.conf
添加如下的内容:
pasv_enable=yes
pasv_min_port=30000
pasv_max_port=31000
chroot_local_user=yes
chroot_list_enable=no
guest_enable=yes
user_config_dir=/etc/vsftpd/vu
pam_service_name=vsftpd.virtual
其中
pasv_enable=yes 指定開啟vsftpd被動模式,在被動模式下隻需要vsftpd伺服器開啟相應端口即可,用戶端無需再開啟端口。
pasv_min_port=30000 指定被動模式最低端口
pasv_max_port=31000 指定模式最高端口
guest_enable表示是否開啟vsftpd虛拟使用者的功能,yes表示開啟,no表示不開啟。
user_config_dir指定每個虛拟使用者賬号配置目錄。
pam_service_name設定pam使用的名稱,該名稱就是/etc/pam.d/目錄下vsftpd.virtual的檔案。
chroot_local_user=yes是否将所有使用者鎖定在主目錄,yes為啟用,no禁用.(包括注釋掉也為禁用)。
chroot_list_enable=no是否啟動鎖定使用者的名單,yes為啟用,no禁用(包括注釋掉也為禁用)。
chroot_local_user=yes和chroot_list_enable=no一起使用表示禁止所有使用者切換到上級目錄。
配置完畢後,我們需要建立vsftpd虛拟使用者賬号的配置目錄,如下圖:
mkdir /etc/vsftpd/vu
建立vsftpd的虛拟使用者,把這些使用者名和密碼存放在一個檔案中。該檔案内容格式是:使用者名占用一行,密碼占一行。如下圖:
vim /etc/vsftpd/login.txt
這個檔案中ilannia與ilannib是vsftpd虛拟的使用者名,ilanni為密碼。
這個檔案的虛拟使用者和密碼的文本檔案無法被系統帳号直接調用,是以我們需要使用db_load指令生成db密碼資料庫檔案,指令如下:
db_load -t -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
為了使伺服器能夠使用上述生成的資料庫檔案,對用戶端進行身份驗證,需要調用系統的pam子產品。pam(plugable authentication module)為可插拔認證子產品,不必重新安裝應用系統,通過修改指定的配置檔案,調整對該程式的認證方式。pam子產品配置檔案路徑為/etc/pam.d/目錄,此目錄下儲存着大量與認證有關的配置檔案,并以服務名稱命名。
我們現在切換到/etc/pam.d/ 目錄下,編輯vsftpd.virtual檔案。如下圖:
vim /etc/pam.d/vsftpd.virtual
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
把該檔案預設的内容注釋掉,添加如下内容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
auth是指對使用者的使用者名密碼進行驗證。
accout是指對使用者的帳戶有哪些權限哪些限制進行驗證。
再後面的/lib/security/pam_userdb.so表示該條稽核将調用pam_userdb.so這個庫函數進行。
注意該函數會根據系統的位數而所在位置不同。
如果是32bit系統,該檔案所在位置是/lib/security/pam_userdb.so,如下圖:
如果是64bit系統,該檔案所在位置是/lib64/security/pam_userdb.so,如下圖:
最後db=/etc/vsftpd/login則指定了驗證庫函數将到這個指定的資料庫中調用資料進行驗證。其實該檔案指的是/etc/vsftpd/login.db檔案。
<b>注意:</b><b>db=/etc/vsftpd/login</b><b>格式是這樣的,去掉.db字尾。</b>
pam配置完畢後,我們現在開始建立虛拟使用者與系統使用者對應的檔案。切換到/etc/vsftpd/vu目錄下,并建立ilannia檔案。注意該檔案名稱一定要與login.txt中的虛拟使用者要對應。比如現在login.txt檔案有ilannia使用者,那麼在 /etc/vsftpd/vu目錄下建立一個檔案名為ilannia的檔案。
如下圖:
檔案内容如下:
vim /etc/vsftpd/vu/ilannia
guest_username=ailanni
local_root=/www/
virtual_use_local_privs=yes
anon_umask=133
其中guest_username=ailanni表示的是設定ftp對應的系統使用者為ailanni
local_root=/www/表示使用本地使用者登入到ftp時的預設目錄
virtual_use_local_privs=yes虛拟使用者和本地使用者有相同的權限
anon_umask表示檔案上傳的預設掩碼。計算方式是777減去anon_umask就是上傳檔案的權限。在此我們設定的是133,也就是說上傳後檔案的權限是644。即上傳的檔案對所屬使用者來說隻有讀寫權限,沒有執行權限。
以同樣的方法建立檔案ilannib,内容與上述相同。
以上配置完畢後,現在我們來啟動vsftpd服務。如下圖:
/etc/init.d/vsftpd start
現在我們來使用ilannia這賬号來連接配接ftp看看實際的情況:
通過上圖我們可以看到,vsftpd虛拟使用者ilannia、ilannib都已經可以正常登陸到ftp伺服器。
測試使用者ilannia的相關權限,如下圖:
登入成功
下載下傳及列出目錄權限
上傳權限
删除權限
建立目錄權限
切換目錄權限
可以看到ilannia使用者具有管理者權限。
下面測試使用者ilannib的相關權限,如下圖:
登入權限
下載下傳權限
删除檔案權限
通過上述截圖,我們可以很容易發現ftp使用者ilannib隻具有下載下傳和切換目錄權限,其他的權限是沒有的。剛好到達我們的要求。
以上全部是在防火牆iptables關閉的情況下,進行測試的。如果iptables開啟的話,隻需要開放vsftpd相關的端口即可。如下:
-a input -p tcp -m tcp –dport 2121 -j accept
-a input -p tcp -m tcp –dport 30000:31000 -j accept
有關ftp使用者權限控制,這個隻是一部分。以後如果有機會,我會在寫一寫這方面的文章。