實驗——基於文件驗證和MYSQL驗證的vsftpd虛擬用戶
實驗一、實現基於文件驗證的vsftpd虛擬用戶
1、創建用戶數據庫文件
vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db
chmod 600 vusers.db
·實驗操作:
db_load -T -t hash -f vusers.txt vusers.db
可以看到變成數據庫之後文件變大了很多
修改權限
2、創建用戶和訪問FTP目錄
useradd -d /var/ftproot -s /sbin/nologin vuser
chmod +rx /var/ftproot/
centos7 還需要執行以下操作:
chmod -w /var/ftproot/
mkdir /var/ftproot/upload
setfacl -m u:vuser:rwx /var/ftproot/upload
·實驗操作:
chmod +rx /app/ftpsite/ 給目錄添加權限
去掉寫權限:
創建一個子目錄,並改權限
3、創建pam配置文件
vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
·實驗操作:
我們需要建一個pam配置文件
4、指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
·實驗操作:
在ftp配置文件中添加剛才的pam配置文件路徑
重啟服務
5、SELinux設置:
禁用SELinux 或者 setsebool -P ftpd_full_access 1
6、虛擬用戶建立獨立的配置文件
mdkir /etc/vsftpd/vusers.d/ 創建配置文件存放的路徑
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/ 進入此目錄
允許wang用戶可讀寫,其它用戶只讀
vim wang 創建各用戶自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim mage 創建各用戶自已的配置文件
local_root=/ftproot 登錄目錄改變至指定的目錄
·實驗操作:
我們把這個目錄建起來,然後進入目錄
針對這三個人,創建三個配置文件:
ftp1可以上傳,可以建文件夾
測試ftp1上傳成功
ftp2由於沒有寫配置文件,默認不允許上傳:
目前設置的三個用戶登陸之後看到的目錄都是一樣的,我們想設置成每個用戶的目錄不一樣
於是我們先建三個目錄,分別放不同的文件
然後去掉寫權限
接下來我們建ftp2的配置文件
加上這句就可以讓看到的目錄變成ftpsite2目錄了
同理,ftp3也一樣
然後重啟服務
我們可以查看一下
設置成功
實驗二、實現基於MYSQL驗證的vsftpd虛擬用戶
說明:本實驗在兩臺CentOS主機上實現,一臺做為FTP服務器,一臺做數據庫服務器。我們本次都用centos7來實驗。還有一臺centos6來當客戶端。
一、安裝所需要包和包組:
1、在數據庫服務器上安裝包:
Centos7:在數據庫服務器上安裝
yum –y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb
Centos6:在數據庫服務器上安裝
yum –y install mysql-server
2、在FTP服務器上安裝vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
yum install vsftpd pam_mysql
centos7:pam無對應rpm包,需手動編譯安裝
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下載pam_mysql-0.7RC1.tar.gz
ftp://172.16.0.1/pub/Sources/sources/pam/
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
make
make install
·實驗操作:
在FTP服務器端(192.168.37.107)裝vsftpd
在數據庫服務器端(192.168.37.101)上裝mariadb包
啟動服務,跑安全腳本
二、在數據庫服務器上創建虛擬用戶賬號
1.建立存儲虛擬用戶數據庫和連接的數據庫用戶
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;
ftp服務和mysql不在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@‘172.16.%.%‘IDENTIFIED BY ‘magedu‘;
ftp服務和mysql在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY ‘magedu‘;
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@‘127.0.0.1‘ IDENTIFIED BY ‘magedu‘;
mysql> FLUSH PRIVILEGES;
2.準備相關表
mysql> USE vsftpd;
Mysql> SHOW TABLES;
mysql> CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);
mysql>DESC users;
測試連接
mysql -uvsftpd -h 172.16.200.200 -pmagedu
mysql> SHOW DATABASES;
3.添加虛擬用戶
根據需要添加所需要的用戶,為了安全應該使用PASSWORD函數加密其密碼後存儲
mysql>DESC users;
mysql> INSERT INTO users(name,password)
values(‘wang‘,password(‘magedu‘));
mysql> INSERT INTO users(name,password)
values(‘mage‘,password(‘magedu‘));
mysql> SELECT * FROM users;
·實驗操作:
登錄數據庫
創建新數據庫,並進入使用
創建表用來存放虛擬用戶的賬號和密碼
創建擁有查詢此表權限的用戶
在表中添加兩個虛擬賬號(password()函數用來加密密碼)
可以看到,已經被加密了
ftp想要連接MySQL,需要一個pam_mysql工具。但是7上沒有安裝包,需要編譯安裝。
先去官網找安裝包
下載安裝包:
將安裝包導入linux
解壓
可以進去查看一下說明文檔
安裝相關包組
編譯(指定路徑)
編譯安裝
三、在FTP服務器上配置vsftpd服務
1.在FTP服務器上建立pam認證所需文件
vi /etc/pam.d/vsftpd.mysql 添加如下兩行
auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
註意:參考README文檔,選擇正確的加密方式
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函數加密,3表示md5加密,4表示sha1加密
配置字段說明:
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()函數加密
2.建立相應用戶和修改vsftpd配置文件,使其適應mysql認證
建立虛擬用戶映射的系統用戶及對應的目錄
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去ftp根目錄的寫權限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
確保/etc/vsftpd.conf中已經啟用了以下選項
anonymous_enable=YES
添加下面兩項
guest_enable=YES
guest_username=vuser
修改下面一項,原系統用戶無法登錄
pam_service_name=vsftpd.mysql
·實驗操作:
新建一個配置文件:
添加兩行內容:
創建用戶,並去掉寫權限(擁有寫權限會導致用戶登陸的時候失敗),改成555:
創建個文件,然後還要建個文件夾,並將文件夾所有者改成tfpuser,客戶端那邊才能上傳:
然後還要改一下vsftpd的配置文件
四、啟動vsftpd服務
service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口開啟情況
netstat -tnlp |grep :21
五、Selinux相關設置:在FTP服務器上執行
restorecon -R/lib64/security
setsebool -P ftpd_connect_db 1
setsebool -P ftp_home_dir 1
chcon -R -t public_content_rw_t /var/ftproot/
六、測試:利用FTP客戶端工具,以虛擬用戶登錄驗證結果
tail /var/log/secure
七、在FTP服務器上配置虛擬用戶具有不同的訪問權限
vsftpd可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可
1、配置vsftpd為虛擬用戶使用配置文件目錄
vim /etc/vsftpd/vsftpd.conf
添加如下選項
user_config_dir=/etc/vsftpd/vusers_config
2、創建所需要目錄,並為虛擬用戶提供配置文件
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang mage
3、配置虛擬用戶的訪問權限
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關
指令進行的。如果需要讓用戶wang具有上傳文件的權限,可以
修改/etc/vsftpd/vusers_config/wang文件,在裏面添加如下
選項並設置為YES即可,只讀則設為NO
註意:需確保對應的映射用戶對於文件系統有寫權限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
·實驗操作:
之前在配置文件最後一行卸了用戶使用配置文件目錄
於是我們建個文件夾,在裏面分別寫上對兩個用戶的權限設置
設置ftp1用戶允許上傳
再建立ftp2
設置登錄目錄
把目錄建起來,再隨便建個文件f2用於測試
重啟服務:
然後在客戶端就可以連接了
先登錄ftp1
可以上傳
然後登陸ftp2
查看一下列表,可以看到f2
不能上傳
成功。
本文出自 “Ty_endless” 博客,請務必保留此出處http://tyendless.blog.51cto.com/12435756/1977038
實驗——基於文件驗證和MYSQL驗證的vsftpd虛擬用戶