1. 程式人生 > >實驗——基於文件驗證和MYSQL驗證的vsftpd虛擬用戶

實驗——基於文件驗證和MYSQL驗證的vsftpd虛擬用戶

linux

實驗一、實現基於文件驗證的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配置文件路徑

技術分享

技術分享

重啟服務

技術分享

5SELinux設置:

禁用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服務器上安裝vsftpdpam_mysql

centos6pam_mysqlepel6的源中提供

yum install vsftpd pam_mysql

centos7pam無對應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虛擬用戶