您好,登錄后才能下訂單哦!
一、虛擬用戶概述
vsftpd使用虛擬用戶時,需要為所有的虛擬用戶創建一個系統用戶,因為無論vsftpd使用的是哪一種用戶類型(匿名用戶、系統用戶、虛擬用戶),最終都是要映射為操作系統上的一個用戶,而每一個文件資源都有各自的權限,只有操作系統上的用戶才能根據權限模型判斷是否能夠訪問該文件資源。這里僅介紹vsftpd基于pam_mysql的虛擬用戶機制的使用。
二、vsftpd基于pam_mysql的虛擬用戶機制
1、編譯安裝pam_mysql
(1) 編譯pam_mysql前要提供開發環境,并安裝其依賴的程序包的開發包
[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官網上下載其壓縮包
(3) 解壓縮后進行編譯安裝
[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創建用于存放用戶賬號密碼的表
(1)啟動mysql服務,并設置為開機自動啟動
[root@ftp ~]# systemctl start mariadb.service [root@ftp ~]# systemctl enable mariadb.service
(2)創建數據庫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()函數加密后的結果有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)為表插入數據
mysql> INSERT INTO usrs(name,password) VALUES ('tom',password('mageedu')),('jerry',password('mageedu.com'));
(4)授權
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、創建一個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、創建系統用戶,作為所有虛擬用戶的映射用戶
[root@ftp ~]# useradd -s /sbin/nologin -d /ftproot vuser [root@ftp ~]# ll -d /ftproot/ drwx------. 4 vuser vuser 87 Jun 9 21:48 /ftproot/ # 組用戶和其它用戶是沒有任何權限的 [root@ftp ~]# chmod go+rx /ftproot/ # 為組用戶和其他用戶添加讀和執行權限 [root@ftp ~]# chmod -w /ftproot # 映射用戶vuser的家目錄不能有寫權限 [root@ftp ~]# mkdir /ftproot/{pub,upload} # 如果要想有寫權限,可在家目錄下創建具有寫權限的子目錄
5、編輯vsftpd配置文件,修改相關配置
[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf guest_enable=YES # 是否允許來賓賬號訪問 guest_username=vuser # 把所有來賓賬號都映射為系統用戶vuser pam_service_name=vsftpd.mysql # 修改對應的pam配置文件
6、啟動服務
[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、如何讓虛擬用戶具有上傳文件的權限?
(1)確保vsftpd配置中匿名用戶具有寫權限
[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf anon_upload_enable=YES # 這一項需要啟用,因為虛擬用戶也是匿名用戶
(2)確保虛擬用戶的系統映射用戶vuer對文件系統具有寫權限
[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 # 切換至有用戶具有寫權限的目錄 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 # 切換至有用戶具有寫權限的目錄 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都映射為系統上的一個用戶vuser,能夠設置tom和jerry的權限不一致,例如設置為tom能夠上傳文件,而jerry不能上傳文件?
1、分別為每個虛擬用戶添加單獨一個配置文件
#vsftpd支持每個虛擬用戶單獨使用一個配置文件,并且配置文件必須和用戶名相同
[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)設置不允許匿名用戶上傳
[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf #anon_upload_enable=YES # 注釋掉主配置文件中的該行配置
(2)明確設置加載vusers.conf.d目錄中的配置文件
[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.conf.d
3、重啟vsftpd服務
[root@ftp ~]# systemctl restart vsftpd.service
4、測試
#預期虛擬用戶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. # 權限被拒絕!
測試成功。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。