構建分別基於mysql服務器存儲、文本存儲用戶賬號密碼的vsftpd服務器

構建基於mysql數據庫存儲虛擬用戶賬號密碼的vsftpd服務。

實驗環境:

centos6:安裝vsftpd服務、lftp客戶端、pam_mysql

注意:pam_mysql包由epel源提供

centos7:安裝mariadb-servermariadb-devel

[root@localhost yum.repos.d]# yum install mysql-devel

步驟一:準備數據庫。

在數據庫中添加mysql的用戶和實驗用的存儲的用戶和密碼

[root@localhost ~]# mysql -uroot -h 127.0.0.1 -p

Enter password: 

MariaDB [(none)]> 

創建用戶ftp服務器連接mariadb服務器的用戶和專用數據庫及表

MariaDB [(none)]> create database vsftpd;

Query OK, 1 row affected (0.00 sec)

 

MariaDB [(none)]> create user vsftpd;

Query OK, 0 rows affected (0.02 sec)

 

MariaDB [(none)]> grant select on vsftpd.* to [email protected] identified by "111111";

Query OK, 0 rows affected (0.03 sec)

 

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.01 sec)

創建表ftpuser

MariaDB [vsftpd]> create table ftpuser (id int AUTO_INCREMENT NOT NULL,name char(20) binary NOT NULL,password char(48) binary NOT NULL, primary key(id));

Query OK, 0 rows affected (0.08 sec)

爲實驗準備數據,在ftpuser表中插入兩條記錄

MariaDB [vsftpd]> insert into ftpuser(name,password) values ("lp1","111111");

Query OK, 1 row affected (0.03 sec)

 

MariaDB [vsftpd]> insert into ftpuser(name,password) values ("lp2","111111");

數據庫環節準本完畢。

在另一臺主機上安裝vsftpd服務和pam-mysql。因爲vsftpd是基於pam機制來認證的,所有要實現基於mysql來存儲虛擬用戶的的賬號和密碼,必須使用pam-mysql模塊來完成。

[root@bogon ~]# rpm -q pam_mysql

pam_mysql-0.7-0.12.rc1.el6.x86_64

[root@bogon ~]# rpm -q vsftpd

vsftpd-2.2.2-11.el6_3.1.x86_64

 

首先測試本主機能夠連接另一臺mariadb服務器。(注意:測試環境中沒有涉及到iptables防火牆策略,所有請確保數據庫端的iptables能夠通過。同時,請確保selinux處於關閉狀態或者permissive狀態)

 

 

步驟二:建立pam認證所需要的文件。

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

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=172.16.249.209 db=vsftpd table=ftpuser

usercolumn=name passwdcolumn=password crypt=0

account required /lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=172.16.249.209 db=vsftpd table=ftpus

er usercolumn=name passwdcolumn=password crypt=0

 

注意:這裏的crypt的值有5種,0表示明文,13表示使用MD5加密,4表示使用sha1加密,2表示使用mysql數據庫的password()函數加密,但是可能出現的問題就是此處的加密方式和數據庫處的加密方式不同從而導致認證不會通過。此處的host有三種方式:

 1. absolute path to the unix socket (e.g. "/tmp/mysql.sock")  // vsftpdmysal在同一主機

 2. host name (e.g. "somewhere.example.com")  //vsftpdmysal不在同一主機

 3. host name + port number (e.g. "somewhere.example.com:3306")//vsftpdmysal不在同一主機

第三步:配置vsftpd

建立虛擬用戶映射的系統賬號以及對應的目錄。

[root@bogon var]# useradd -d /var/ftproot -s /sbin/nologin vuser

默認創建的家目錄其他用戶是沒有任何權限的,所以給其相應的權限

[root@bogon var]# ll -d /var/ftproot

drwx------. 3 vuser vuser 4096 9月  23 21:53 /var/ftproot

[root@bogon var]# chmod go+rx /var/ftproot

 

修改配置文件中的以下幾項:

anonymous_enable=NO   //開啓虛擬用戶此項可以禁用

local_enable=YES     //此項必須開啓,因爲虛擬用戶必須映射爲一個本地用戶來訪問數據

write_enable=YES  //本地用戶有寫權限

xferlog_enable=YES   //開啓日誌功能

xferlog_file=/var/log/xferlog  //日誌文件

log_ftp_protocol=YES  //這項也是日誌功能,但要求xferlog_std_format=NO,這兩個日誌可以用來排錯。

chroot_local_user=YES //禁錮用戶家目錄,

chroot_list_enable=YES  

chroot_list_file=/etc/vsftpd/chroot_list

pam_service_name=vsftpd.mysql  //vsftpd.mysqlpam認證的文件

userlist_enable=NO   //用默認值

userlist_deny=YES  //用默認值

guest_enable=YES   //虛擬用戶登錄方式必須添加的選項

guest_username=vuser   //虛擬用戶登錄方式必須添加的選項

 

此外,要想對每個虛擬用戶都提供配置文件,只需要在配置文件中添加

user_config_dir=/etc/vsftpd/vusers_dir/

然後在在此目錄下創建以用戶名爲文件名的文件,並寫入響應的控制項即可。

 

 

構建基於文本文件認證的虛擬用戶登錄:

第一步:創建用於存儲賬號密碼的文件。(此文件有特殊格式,奇數行爲用戶名,偶數行爲密碼)

[root@localhost vsftpd]# vim vuser.list

keke

111111

lili

111111

第二步:使用db_load命令將此文件格式化爲數據庫文件(pam認證必須的,而db_load命令是由db4utils包提供的)

[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db

註釋The -T option allows non-Berkeley DB applications to easily load text files into databases選項-T允許應用程序能夠將文本文件轉譯載入進數據庫。由於我們之後是將虛擬用戶的信息以文件方式存儲在文件裏的,爲了讓Vsftpd這個應用程序能夠通過文本來載入用戶數據,必須要使用這個選項。如果指定了選項-T,那麼一定要追跟子選項-t

[root@localhost vsftpd]# file vuser.db

vuser.db: Berkeley DB (Hash, version 9, native byte-order)

爲了安全更其權限

[root@localhost vsftpd]# chown 600 /etc/vsftpd/vuser.*

創建ftp根目錄以及虛擬用戶映射的用戶

[root@bogon var]# useradd -d /var/ftproot -s /sbin/nologin vuser

默認創建的家目錄其他用戶是沒有任何權限的,所以給其相應的權限

[root@bogon var]# ll -d /var/ftproot

drwx------. 3 vuser vuser 4096 9月  23 21:53 /var/ftproot

[root@bogon var]# chmod go+rx /var/ftproot

建立支持虛擬用戶的pam認證文件

[root@localhost pam.d]# vim vuser

auth required  pam_userdb.so db=/etc/vsftpd/vuser

account required pam_userdb.so db=/etc/vsftpd/vuser

注意:文件中的db指向的是之前db_load命令創建的vuser.db,但在此處不能加.db後綴。

然後修改配置文件

anonymous_enable=NO

local_enable=YES

write_enable=YES

anon_umask=022

guest_enable=YES

guest_username=vuser

pam_service_name=vuser

user_config_dir=/etc/vsftpd/vusers_dir 

 

然後在/etc/vsftpd/vusers_dir 目錄下創建以用戶名爲文件名的文件

[root@localhost vsftpd]# mkdir vuser_dir

[root@localhost vsftpd]# cd vuser_dir

[root@localhost vuser_dir]# touch keke

[root@localhost vuser_dir]# touch lili

[root@localhost vuser_dir]# vim keke

anon_upload_enable=YES

anon_mkdir_write_enable=YES

 

 

 

注意:如果在實驗中遇到問題,可考慮下面的辦法:

selinux控制ftp的選項有:

[root@bogon ~]# getsebool -a | grep ftp

allow_ftpd_anon_write --> off

allow_ftpd_full_access --> off

allow_ftpd_use_cifs --> off

allow_ftpd_use_nfs --> off

ftp_home_dir --> off

ftpd_connect_db --> off

ftpd_use_passive_mode --> off

httpd_enable_ftp_server --> off

tftp_anon_write --> off

 

設置其中的選項

[root@bogon ~]# setsebool ftp_home_dir on

[root@bogon ~]# setsebool ftpd_connect_db on

[root@bogon ~]# setsebool alow_ftpd_anon_write on

[root@bogon ~]# setsebool allow_ftpd_full_access on

 

排錯可參看/var/log/secure文件的內容或者查看日誌。

 

 

 

 

 

 

 

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章