1. 程式人生 > 其它 >Linux-實現基於mysql驗證的vsftpd虛擬使用者

Linux-實現基於mysql驗證的vsftpd虛擬使用者

實驗環境

centos7     10.0.0.17     ftp-server

centos7     10.0.0.37     mysql-server

1、mysql-server配置操作

1.1 安裝資料庫

MySQL8.0由於取消了PASSWORD()函式不支援,因此選擇mariadb

[root@mysql-server ~]#yum -y install mariadb-server
[root@mysql-server ~]#systemctl enable --now mariadb.service

1.2在資料庫服務上配置資料庫支援vsftpd服務

MariaDB [(none)]> create database vsftpd; 
#建立資料庫 Query OK,
1 row affected (0.00 sec) MariaDB [(none)]> use vsftpd; Database changed MariaDB [vsftpd]> create table users( #建立表,欄位name存放使用者,password存放密碼 -> id int auto_increment not null primary key, -> name char(50) binary not null, -> password char(48) binary not null ->
); Query OK, 0 rows affected (0.00 sec)
MariaDB [vsftpd]> insert into users(name,password) values('li',password('123456'));    新增虛擬使用者和密碼
Query OK, 1 row affected (0.00 sec)

MariaDB [vsftpd]> insert into users(name,password) values('yan',password('654321'));
Query OK, 1 row affected (0.00 sec)

MariaDB [vsftpd]
> select * from users; +----+------+-------------------------------------------+ | id | name | password | +----+------+-------------------------------------------+ | 1 | li | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 2 | yan | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 | +----+------+-------------------------------------------+ 2 rows in set (0.00 sec)
MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%'  identified by '123456';  建立連線的資料庫使用者
Query OK, 0 rows affected (0.00 sec)

MariaDB [vsftpd]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2、ftp-server配置

2.1 centos7上pam_mysql無對應的rpm包,需手動編譯安裝

安裝vsftpd   編譯安裝相關包
[root@ftp-server ~]#yum -y vsftpd install gcc gcc-c++ make mariadb-devel pam-devel

2.2 下載pam_mysql原始碼包

建議window下載好,上傳到虛擬機器

[root@ftp-server ~]#wget https://sourceforge.net/projects/pam-mysql/files/latest/download

2.3 檔案解析壓縮

[root@ftp-server ~]#ls
anaconda-ks.cfg  pam_mysql-0.7RC1.tar.gz
[root@ftp-server ~]#tar xf pam_mysql-0.7RC1.tar.gz 

2.4 編譯模組

[root@ftp-server ~]#cd pam_mysql-0.7RC1
[root@ftp-server ~/pam_mysql-0.7RC1]#ls
acinclude.m4  config.guess  configure     CREDITS     ltmain.sh    missing        pam_mysql.c        pkg.m4
aclocal.m4    config.h.in   configure.in  INSTALL     Makefile.am  mkinstalldirs  pam_mysql.spec     README
ChangeLog     config.sub    COPYING       install-sh  Makefile.in  NEWS           pam_mysql.spec.in  stamp-h.in
[root@ftp-server ~/pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security

2.5 安裝

[root@ftp-server ~/pam_mysql-0.7RC1]#echo $?
0
[root@ftp-server ~/pam_mysql-0.7RC1]#make install

[root@ftp-server ~/pam_mysql-0.7RC1]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root 882 May 28 10:38 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 May 28 10:38 /lib64/security/pam_mysql.so

2.6 在FTP伺服器上建立pam認證所需檔案

新增以下兩行

[root@ftp-server ~]#vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.37 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.37 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
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.7 建立相應使用者和修改vsftpd配置檔案

[root@ftp-server ~]#useradd -s /sbim/nologin -d /data/ftproot -r vuser    #建立虛擬使用者對映的系統使用者
[root@ftp-server ~]#mkdir -pv /data/ftproot/upload                        #建立對應的目錄
mkdir: created directory ‘/data/ftproot’
mkdir: created directory ‘/data/ftproot/upload’
[root@ftp-server ~]#setfacl -m u:vuser:rwx /data/ftproot/upload           #給予vuser使用者特殊許可權,讀寫執行     

2.8 編輯配置檔案

[root@ftp-server ~]#vim /etc/vsftpd/vsftpd.conf 
pam_service_name=vsftpd.mysql     #修改問價為,vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES

guest_enable=yes                  #啟用虛擬使用者對映
guest_username=vuser              #對映賬號為vuser

[root@ftp-server ~]#systemctl enable --now vsftpd        #啟動vsftpd服務
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

2.9客戶端測試

登入成功

[root@centos7-liyj ~]#ftp 10.0.0.17
Connected to 10.0.0.17 (10.0.0.17).
220 (vsFTPd 3.0.2)
Name (10.0.0.17:root): yan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.


[root@centos7-liyj ~]#ftp 10.0.0.17
Connected to 10.0.0.17 (10.0.0.17).
220 (vsFTPd 3.0.2)
Name (10.0.0.17:root): li
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

3、在FTP伺服器上配置虛擬使用者具有不同的訪問許可權

vsftpd可以在配置檔案目錄中為每個使用者提供單獨的配置檔案以定義其ftp伺服器訪問許可權,每個虛擬使用者的配置檔名稱同虛擬使用者的使用者名稱,配置問價你目錄可以是任意未使用目錄,只需要在vsftpd.conf 指定其路徑及名稱即可

3.1 建立conf.d目錄,編輯配置檔案新增   user_config_dir=/etc/vsftpd/conf.d/

[root@centos7 ~]#mkdir /etc/vsftpd/conf.d/
[root@ftp-server ~]#vim /etc/vsftpd/vsftpd.conf 

user_config_dir=/etc/vsftpd/conf.d/

3.2 編輯使用者許可權 在/etc/vsftpd/conf.d/目錄建立登入使用者同名的檔案

[root@ftp-server ~]#vim /etc/vsftpd/conf.d/li
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftproot1

3.3 建立對應的ftproot1目錄

[root@ftp-server /data]#mkdir -p /data/ftproot1/upload   #upload為使用者的讀寫目錄

3.4 修改upload屬性為vuser,vuser使用者可以讀寫這個目錄

[root@ftp-server /data]#chown -R vuser.vuser /data/ftproot1/

3.5 客戶端測試

[root@centos7-liyj ~]#ftp 10.0.0.17
Connected to 10.0.0.17 (10.0.0.17).
220 (vsFTPd 3.0.2)
Name (10.0.0.17:root): li
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (10,0,0,17,101,216).
150 Here comes the directory listing.
drwxr-xr-x    2 998      996             6 May 28 03:49 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> lcd /etc
Local directory now /etc
ftp> put passwd
local: passwd remote: passwd
227 Entering Passive Mode (10,0,0,17,244,234).
150 Ok to send data.
226 Transfer complete.
1006 bytes sent in 5.1e-05 secs (19725.49 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (10,0,0,17,201,130).
150 Here comes the directory listing.
-rw-------    1 998      996          1006 May 28 03:57 passwd
226 Directory send OK.

3.6 vsftp-server檢查

[root@ftp-server ~]#ll /data/ftproot1/upload/
total 4
-rw------- 1 vuser vuser 1006 May 28 11:57 passwd