溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vsftpd基于pam_mysql的虛擬用戶機(jī)制

發(fā)布時間:2020-06-19 12:22:10 來源:網(wǎng)絡(luò) 閱讀:1555 作者:iTab 欄目:MySQL數(shù)據(jù)庫

一、虛擬用戶概述


vsftpd使用虛擬用戶時,需要為所有的虛擬用戶創(chuàng)建一個系統(tǒng)用戶,因?yàn)闊o論vsftpd使用的是哪一種用戶類型(匿名用戶、系統(tǒng)用戶、虛擬用戶),最終都是要映射為操作系統(tǒng)上的一個用戶,而每一個文件資源都有各自的權(quán)限,只有操作系統(tǒng)上的用戶才能根據(jù)權(quán)限模型判斷是否能夠訪問該文件資源。這里僅介紹vsftpd基于pam_mysql的虛擬用戶機(jī)制的使用。


二、vsftpd基于pam_mysql的虛擬用戶機(jī)制


1、編譯安裝pam_mysql


(1) 編譯pam_mysql前要提供開發(fā)環(huán)境,并安裝其依賴的程序包的開發(fā)包

[root@ftp ~]# yum -y groupinstall "Development Tools" "Server Platform Development"
[root@ftp ~]# yum -y install pam-devel openssl-devel mariadb-devel


(2) 下載pam_mysql的源碼壓縮包


#在pam_mysql官網(wǎng)上下載其壓縮包

vsftpd基于pam_mysql的虛擬用戶機(jī)制


(3) 解壓縮后進(jìn)行編譯安裝

[root@ftp ~]# tar xf pam_mysql-0.7RC1.tar.gz
[root@ftp ~]# cd pam_mysql-0.7RC1/
[root@ftp pam_mysql-0.7RC1]# 
[root@ftp pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
[root@ftp pam_mysql-0.7RC1]# make && make install



2、使用mysql創(chuàng)建用于存放用戶賬號密碼的表


(1)啟動mysql服務(wù),并設(shè)置為開機(jī)自動啟動

[root@ftp ~]# systemctl start mariadb.service
[root@ftp ~]# systemctl enable mariadb.service


(2)創(chuàng)建數(shù)據(jù)庫vsftpd和表users

[root@ftp ~]# mysql
mysql> CREATE DATABASE vsftpd;
mysql> use vsftpd;
mysql> CREATE TABLE users (
	id INT AUTO_INCREMENT NOT NULL PIRMARY KEY,
	name CHAR(30) NOT NULL,
	password CHAR(48) BINARY NOT NULL );
	# mysql使用password()函數(shù)加密后的結(jié)果有48個字符
mysql> DESC users;
+----------+------------+------+-----+---------+----------------+
| Field    | Type       | Null | Key | Default | Extra          |
+----------+------------+------+-----+---------+----------------+
| id       | int(11)    | NO   | PRI | NULL    | auto_increment |
| name     | char(30)   | NO   |     | NULL    |                |
| password | binary(48) | NO   |     | NULL    |                |
+----------+------------+------+-----+---------+----------------+


(3)為表插入數(shù)據(jù)

mysql> INSERT INTO usrs(name,password) VALUES ('tom',password('mageedu')),('jerry',password('mageedu.com'));

(4)授權(quán)

mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'mageedu';
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'mageedu';
mysql> FLUSH PRIVILEGES;


3、創(chuàng)建一個pam配置文件

[root@ftp ~]# vim /etc/pam.d/vsftpd.mysql

auth required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2



4、創(chuàng)建系統(tǒng)用戶,作為所有虛擬用戶的映射用戶


[root@ftp ~]#  useradd -s /sbin/nologin -d /ftproot vuser
[root@ftp ~]# ll -d /ftproot/
drwx------. 4 vuser vuser 87 Jun  9 21:48 /ftproot/    # 組用戶和其它用戶是沒有任何權(quán)限的
[root@ftp ~]# chmod go+rx /ftproot/    # 為組用戶和其他用戶添加讀和執(zhí)行權(quán)限
[root@ftp ~]# chmod -w /ftproot        # 映射用戶vuser的家目錄不能有寫權(quán)限
[root@ftp ~]# mkdir /ftproot/{pub,upload}    # 如果要想有寫權(quán)限,可在家目錄下創(chuàng)建具有寫權(quán)限的子目錄

5、編輯vsftpd配置文件,修改相關(guān)配置


[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES	         # 是否允許來賓賬號訪問
guest_username=vuser	         # 把所有來賓賬號都映射為系統(tǒng)用戶vuser
pam_service_name=vsftpd.mysql    # 修改對應(yīng)的pam配置文件



6、啟動服務(wù)


[root@ftp ~]# systemctl start vsftpd.service
[root@ftp ~]# ss -tnl | grep :21
LISTEN     0      32          :::21                      :::*


7、測試


(1)測試虛擬用戶tom

[root@ftp ~]# ftp 192.168.10.99
Connected to 192.168.10.99 (192.168.10.99).
220 (vsFTPd 3.0.2)
Name (192.168.10.99:root): tom    # 輸入虛擬用戶tom
331 Please specify the password.
Password:                           # 輸入虛擬用戶tom的密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
ftp> ls
227 Entering Passive Mode (192,168,10,99,223,134).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Jun 09 13:35 pub
drwxr-xr-x    2 1000     0              64 Jun 09 14:25 upload
226 Directory send OK.


(2)測試虛擬用戶jerry

[root@ftp ~]# ftp 192.168.10.99
Connected to 192.168.10.99 (192.168.10.99).
220 (vsFTPd 3.0.2)
Name (192.168.10.99:root): jerry    # 輸入虛擬用戶jerry
331 Please specify the password.
Password:                             # 輸入虛擬用戶jerry的密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,10,99,251,69).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Jun 09 13:35 pub
drwxr-xr-x    2 1000     0              64 Jun 09 14:25 upload
226 Directory send OK.

測試成功。


三、其它需求


1、如何讓虛擬用戶具有上傳文件的權(quán)限?


(1)確保vsftpd配置中匿名用戶具有寫權(quán)限

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES        # 這一項(xiàng)需要啟用,因?yàn)樘摂M用戶也是匿名用戶


(2)確保虛擬用戶的系統(tǒng)映射用戶vuer對文件系統(tǒng)具有寫權(quán)限

[root@ftp ~]# chown vuser /ftproot/upload


(3)測試

#測試虛擬用戶tom

[root@ftp ~]# ftp 192.168.10.99
Connected to 192.168.10.99 (192.168.10.99).
220 (vsFTPd 3.0.2)
Name (192.168.10.99:root): tom     # 輸入虛擬用戶tom
331 Please specify the password.
Password:                            # 輸入虛擬用戶tom的密碼
ftp> 
ftp> cd upload    # 切換至有用戶具有寫權(quán)限的目錄
ftp> lcd /etc     # 外部shell切換至/etc目錄
ftp> put fstab    # 上傳文件fstab
local: fstab remote: fstab
227 Entering Passive Mode (192,168,10,99,213,217).
150 Ok to send data.
226 Transfer complete.    # 傳輸完成
541 bytes sent in 0.000189 secs (2862.43 Kbytes/sec)
ftp> ls
-rw-------    1 1000     1000          541 Jun 09 15:08 fstab
226 Directory send OK.


#測試虛擬用戶jerry

[root@ftp ~]# ftp 192.168.10.99
Connected to 192.168.10.99 (192.168.10.99).
220 (vsFTPd 3.0.2)
Name (192.168.10.99:root): jerry     # 輸入虛擬用戶jerry
331 Please specify the password.
Password:                            # 輸入虛擬用戶jerry的密碼
ftp> 
ftp> cd upload    # 切換至有用戶具有寫權(quán)限的目錄
ftp> lcd /etc     # 外部shell切換至/etc目錄
ftp> put issue    # 上傳文件issue
local: issue remote: issue
227 Entering Passive Mode (192,168,10,99,169,197).
150 Ok to send data.
226 Transfer complete.    # 傳輸完成
23 bytes sent in 5.8e-05 secs (396.55 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,10,99,144,240).
150 Here comes the directory listing.
-rw-------    1 1000     1000          541 Jun 09 15:08 fstab
-rw-------    1 1000     1000           23 Jun 09 15:14 issue
226 Directory send OK.

測試成功。


2、虛擬用戶tom和jerry都映射為系統(tǒng)上的一個用戶vuser,能夠設(shè)置tom和jerry的權(quán)限不一致,例如設(shè)置為tom能夠上傳文件,而jerry不能上傳文件?



1、分別為每個虛擬用戶添加單獨(dú)一個配置文件

#vsftpd支持每個虛擬用戶單獨(dú)使用一個配置文件,并且配置文件必須和用戶名相同

[root@ftp ~]# mkdir /etc/vsftpd/vuser.conf.d
[root@ftp ~]# cd /etc/vsftpd/vuser.conf.d/
[root@ftp vuser.conf.d]# vim tom
anon_upload_enable=YES    # 允許tom上傳文件
[root@ftp vuser.conf.d]# vim jerry
anon_upload_enable=NO    # 不允許jerry上傳文件


2、編輯主配置文件/etc/vsftpd/vsftpd.conf

(1)設(shè)置不允許匿名用戶上傳

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
#anon_upload_enable=YES    # 注釋掉主配置文件中的該行配置


(2)明確設(shè)置加載vusers.conf.d目錄中的配置文件

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.conf.d



3、重啟vsftpd服務(wù)

[root@ftp ~]# systemctl restart vsftpd.service


4、測試


#預(yù)期虛擬用戶tom能夠上傳文件,而jerry則不能上傳文件

#測試虛擬用戶tom

[root@ftp ~]# ftp 192.168.10.99
Connected to 192.168.10.99 (192.168.10.99).
220 (vsFTPd 3.0.2)
Name (192.168.10.99:root): tom    # 輸入虛擬用戶tom
331 Please specify the password.
Password:                         # 輸入虛擬用戶tom的密碼
ftp> 
ftp> cd upload
ftp> lcd /etc/
ftp> put grub2.cfg    # 上傳文件grub2.cfg
local: grub2.cfg remote: grub2.cfg
227 Entering Passive Mode (192,168,10,99,220,164).
150 Ok to send data.
226 Transfer complete.    # 傳輸成功
4209 bytes sent in 0.000162 secs (25981.48 Kbytes/sec)


#測試虛擬用戶jerry

[root@ftp ~]# ftp 192.168.10.99
Connected to 192.168.10.99 (192.168.10.99).
220 (vsFTPd 3.0.2)
Name (192.168.10.99:root): jerry    # 輸入虛擬用戶jerry
331 Please specify the password.
Password:                           # 輸入虛擬用戶jerry的密碼
ftp> 
ftp> cd upload
ftp> lcd /etc/
ftp> put motd    # 上傳文件motd
local: motd remote: motd
227 Entering Passive Mode (192,168,10,99,188,33).
550 Permission denied.    # 權(quán)限被拒絕!

測試成功。



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI