前幾篇介紹了基礎,這篇將具體實現幾個案例
實現基於文件驗證的vsftpd虛擬用戶,每個用戶獨立一個文件夾
1、創建用戶數據庫文件
vim /etc/vsftpd/vusers.txt qq centos momo centos
備注:文件內容格式為奇數行為用戶名,偶數行為密碼
2、設置權限與編譯此文件
cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db ##編譯文件 chmod 600 vusers.db
備注:修改權限是為了安全
3、創建linux用戶和ftp目錄(這個賬號將來虛擬賬號映射成它)
useradd -s /sbin/nologin vftpuser chmod 555 /home/vftpuser/ ###把用戶家目錄的寫權限去掉
備注:映射賬號對根要沒有寫權限
mkdir upload ##創建上傳用的文件夾 chown vftpuser upload/
備注:把這個文件夾的所屬人改為vftpuser用戶,次用戶雖然對 /home/vftpuser/ 就也是根,沒有寫權限,但是對根下的目錄有寫權限。
把匿名寫權限打開
4、修改pam配置文件
vim /etc/pam.d/vusers.db #這個名字叫什么都可
auth required pam_userdb.so db=/etc/vsftpd/vusers
注意:這個vusers名字一定要和第二步中創建的xxxx.db名字一樣
account required pam_userdb.so db=/etc/vsftpd/vusers
5、讓主配置文件知道你要用自己修改的pam模塊
備注:放在vusers.txt里面的就是合法用戶,可以登陸
6、把所有系統賬號映射成我們創建的vftpuser賬號,並關閉linux系統賬號登陸
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES guest_username=vftpuser
7、虛擬用戶建立獨立的配置文件
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vftpuser.d/
創建上面這個文件夾創建出來
mkdir /etc/vsftpd/vftpuser.d/
在這個文件夾目錄下創建針對虛擬用戶的配置
[root@centos7_77 vftpuser.d]# cat > qq anon_upload_enable=YES anon_mkdir_write_enable=YES 備注:意思是說虛擬用戶qq有匿名寫權限
8、讓兩個虛擬用戶進來時看到的文件夾不一樣
vim /etc/vsftpd/vftpuser.d/qq
local_root=/data/qq
備注:要是這個文件夾不存在就創建
mkdir /data/qq
備注:在qq目錄下創建個文件用於測試
touch /data/qq/qq.txt
重啟,測試
備注:想要增加用戶,在vusers.txt文件中寫入,再生成db文件
實現:基於MYSQL驗證的vsftpd虛擬用戶
說明:本實驗在兩台CentOS主機上實現,一台做為FTP服務器,一台做數據庫服務器
一、安裝所需要包和包組
在數據庫服務器上安裝包:
Centos7:在數據庫服務器上安裝
yum –y install mariadb-server systemctl start mariadb.service systemctl enable mariadb
Centos6:在數據庫服務器上安裝
yum –y install mysql-server
在FTP服務器上安裝vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
yum install vsftpd pam_mysql
centos7:無對應rpm包,需手動編譯安裝
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下載pam_mysql-0.7RC1.tar.gz
https://sourceforge.net/projects/pam-mysql/
1、解壓縮pam模塊
[root@centos7_77 ~]# tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
2、編譯
[root@centos7_77 pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr
備注:這樣需要注意指定的位置,mysql
現在還沒有pam_mysql.so
開始make
[root@centos7_77 pam_mysql-0.7RC1]# make && make install
3、創建數據庫和表
1)創建ftpdb數據庫
MariaDB [(none)]> create database ftpdb;
2)授權一個用戶可以連這個數據庫(有讀權限就行)
MariaDB [(none)]> grant select on ftpdb.* to vsftpd@'localhost' identified by 'centos';
3)創建一個表
MariaDB [ftpdb]> create table users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL );
4)往表里增加虛擬用戶
MariaDB [ftpdb]> INSERT INTO users(name,password) values('gg',password('centos'));
MariaDB [ftpdb]> INSERT INTO users(name,password) values('mm',password('centos'));
3、准備一個pam配置文件(在FTP服務器上建立pam認證所需文件)
cd /etc/pam.d/ vim vsftpd.mysql auth required pam_mysql.so user=vsftpd passwd=centos host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpd passwd=centos host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=passw ord crypt=2
備注:
配置字段說明
• auth 表示認證
• account 驗證賬號密碼正常使用
• required 表示認證要通過
• pam_mysql.so模塊是默認的相對路徑,是相對/lib64/security/路徑而言,也可以寫絕
對路徑;后面為給此模塊傳遞的參數
• user=vsftpd為登錄mysql的用戶
• passwd=magedu 登錄mysql的的密碼
• host=mysqlserver mysql服務器的主機名或ip地址
• db=vsftpd 指定連接msyql的數據庫名稱
• table=users 指定連接數據庫中的表名
• usercolumn=name 當做用戶名的字段
• passwdcolumn=password 當做用戶名字段的密碼
• crypt=2 密碼的加密方式為mysql password()函數加密
4、讓ftp服務器知道調用我們配置的pam模塊配置文件
vim /etc/vsftpd/vsftpd.conf
5、映射為系統賬號vftpuser
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES guest_username=vftpuser
備注:意思說,啟動guest用戶,系統用戶映射為guest用戶,而guest用戶是vftpuser,
別忘了去掉此用戶的家目錄的讀W權限
6、讓登陸的賬號權限不一樣(針對每個用戶都有自己的配置文件)
指定用戶存放配置的文件夾
vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vftpuser.d cd /etc/vsftpd/vftpuser.d [root@centos7_77 vftpuser.d]# cat > mm local_root=/data/mm cat > gg local_root=/data/gg
備注:要想gg mm 充當虛擬用戶的根必須沒有寫權限
[root@centos7_77 data]# chmod a=rx mm [root@centos7_77 data]# chmod a=rx gg 再gg、mm目錄下創建個文件好測試 [root@centos7_77 gg]# touch gg.txt [root@centos7_77 mm]# touch mm.txt
重啟
測試
備注:要想讓gg用戶有寫權限,在/etc/vsftpd/vftpuser.d/gg文件中加入
anon_upload_enable=YES
anon_mkdir_write_enable=YES
還要對/data/gg這個目錄要有寫權限
setfacl -m u:vftpuser:rwx /data/gg