天天看點

Vsftpd使用虛拟使用者,通路FTP

由于需要,公司網站目錄需要把上傳權限開通,并且同一個目錄需要不同的人給與不同的權限。但是上傳隻能通過ftp進行上傳。而網站伺服器上的ftp伺服器使用的是vsftpd。

具體要求如下:

網站根目錄/www,對使用者ailanni具有所有權,能上傳、下載下傳、删除、建立目錄權限。對bilanni使用者具有下載下傳、浏覽權限。其他使用者直接跳轉到ftp公共目錄下。

根據這個要求我們需要使用到vsftpd的虛拟使用者。

vsftp虛拟使用者的原理是:把虛拟使用者的權限映射到系統使用者上。而虛拟使用者的權限是有系統使用者對目錄的控制達到的。

如果安裝上述要求的話,我們的思路是這樣的。

在系統中建立使用者ailanni,使其對/www目錄具有所有權。而修改其使用者組,使其使用者組對/www目錄隻具有檢視、浏覽權限。即可。

下面把相關的操作步驟記錄如下:

首先、安裝vsftpd軟體。

yum –y install vsftpd

Vsftpd使用虛拟使用者,通路FTP

安裝完畢,我們先來建立所需要的使用者。注意該系統使用者一定要建立家目錄,否則在後邊無法登陸ftp伺服器。

useradd ailanni

useradd bilanni

Vsftpd使用虛拟使用者,通路FTP

檢視使用者所屬的使用者組:

id ailanni

id bilanni

Vsftpd使用虛拟使用者,通路FTP

可以看到目前ailanni使用者屬于ailanni使用者組,bilanni使用者屬于bilanni使用者組。剛剛我們在前邊就說過,要達到bilanni對www目錄具有浏覽、上傳權限。我們需要把該使用者加入到ailanni使用者組,通過這樣控制相關權限。

現在來把bilanni使用者,加入到ailanni使用者組。

usermod -g ailanni bilanni

Vsftpd使用虛拟使用者,通路FTP

使用者建立完畢,我們現在來建立/www目錄,并修改其相關的屬性。

mkdir /www

Vsftpd使用虛拟使用者,通路FTP

通過上圖,我們可以看到目前www目錄,所屬的使用者及使用者組為root。現在來進行修改,修改ailanni使用者具有所有權限,ailanni使用者組具有浏覽、權限,其他使用者組沒有任何權限。把www目錄的權限修改為750如下圖:

chown –r ailanni:ailanni /www

Vsftpd使用虛拟使用者,通路FTP

chmod –r 750

Vsftpd使用虛拟使用者,通路FTP

以上我們把有關系統使用者及其相關權限設定完畢,下面就來配置vsftpd。

切換到vsftpd的安裝目錄,編輯vsftpd.conf檔案。如下圖:

vim /etc/vsftpd/vsftpd.conf

Vsftpd使用虛拟使用者,通路FTP

添加如下的内容:

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

Vsftpd使用虛拟使用者,通路FTP

其中

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使用虛拟使用者,通路FTP

建立vsftpd的虛拟使用者,把這些使用者名和密碼存放在一個檔案中。該檔案内容格式是:使用者名占用一行,密碼占一行。如下圖:

vim /etc/vsftpd/login.txt

Vsftpd使用虛拟使用者,通路FTP

這個檔案中ilannia與ilannib是vsftpd虛拟的使用者名,ilanni為密碼。

這個檔案的虛拟使用者和密碼的文本檔案無法被系統帳号直接調用,是以我們需要使用db_load指令生成db密碼資料庫檔案,指令如下:

db_load -t -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

Vsftpd使用虛拟使用者,通路FTP

為了使伺服器能夠使用上述生成的資料庫檔案,對用戶端進行身份驗證,需要調用系統的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

Vsftpd使用虛拟使用者,通路FTP

把該檔案預設的内容注釋掉,添加如下内容:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login

account required /lib/security/pam_userdb.so db=/etc/vsftpd/login

Vsftpd使用虛拟使用者,通路FTP

auth是指對使用者的使用者名密碼進行驗證。

accout是指對使用者的帳戶有哪些權限哪些限制進行驗證。

再後面的/lib/security/pam_userdb.so表示該條稽核将調用pam_userdb.so這個庫函數進行。

注意該函數會根據系統的位數而所在位置不同。

如果是32bit系統,該檔案所在位置是/lib/security/pam_userdb.so,如下圖:

Vsftpd使用虛拟使用者,通路FTP

如果是64bit系統,該檔案所在位置是/lib64/security/pam_userdb.so,如下圖:

Vsftpd使用虛拟使用者,通路FTP

最後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的檔案。

如下圖:

Vsftpd使用虛拟使用者,通路FTP

檔案内容如下:

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。即上傳的檔案對所屬使用者來說隻有讀寫權限,沒有執行權限。

Vsftpd使用虛拟使用者,通路FTP

以同樣的方法建立檔案ilannib,内容與上述相同。

Vsftpd使用虛拟使用者,通路FTP

以上配置完畢後,現在我們來啟動vsftpd服務。如下圖:

Vsftpd使用虛拟使用者,通路FTP

/etc/init.d/vsftpd start

現在我們來使用ilannia這賬号來連接配接ftp看看實際的情況:

Vsftpd使用虛拟使用者,通路FTP
Vsftpd使用虛拟使用者,通路FTP

通過上圖我們可以看到,vsftpd虛拟使用者ilannia、ilannib都已經可以正常登陸到ftp伺服器。

測試使用者ilannia的相關權限,如下圖:

Vsftpd使用虛拟使用者,通路FTP

登入成功

Vsftpd使用虛拟使用者,通路FTP

下載下傳及列出目錄權限

Vsftpd使用虛拟使用者,通路FTP

上傳權限

Vsftpd使用虛拟使用者,通路FTP

删除權限

Vsftpd使用虛拟使用者,通路FTP

建立目錄權限

Vsftpd使用虛拟使用者,通路FTP

切換目錄權限

可以看到ilannia使用者具有管理者權限。

下面測試使用者ilannib的相關權限,如下圖:

Vsftpd使用虛拟使用者,通路FTP

登入權限

Vsftpd使用虛拟使用者,通路FTP
Vsftpd使用虛拟使用者,通路FTP

下載下傳權限

Vsftpd使用虛拟使用者,通路FTP
Vsftpd使用虛拟使用者,通路FTP

删除檔案權限

Vsftpd使用虛拟使用者,通路FTP

通過上述截圖,我們可以很容易發現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使用者權限控制,這個隻是一部分。以後如果有機會,我會在寫一寫這方面的文章。