FTP(六)實現基於MYSQL驗證的FTP虛擬用戶
阿新 • • 發佈:2018-02-27
實現MYSQL驗證的vsftpd虛擬用戶實驗準備:本實驗在兩臺CentOS主機上實現,一臺做為FTP服務 器,一臺做數據庫服務器
- 一臺CentOS-7當MYSQL服務器
- 一臺CentOS-6當FTP服務器
註意,這裏誰當FTP服務器很關鍵,因為有一個PAM模塊包是CentOS-7上沒有的,需要源碼編譯,pam_mysql,下面我先演示CentOS-6當FTP服務器的例子
CentOS-6當FTP服務器
一,配置數據庫服務器
1,在數據庫服務器端安裝mariadb-server包
yum –y install mariadb-server systemctl start mariadb # 設為開機自動啟動 systemctl enable mariadb
2,為了安全起見可以運行一下mariadb安全腳本
"mysql_secure_installation"
第一項問你:輸入root密碼 回車即可,因為沒有
第二項問你:需要設置root密碼麽,當然要 敲Y
第三項問你:需要刪除空賬號用戶麽,當然要 敲Y
第四項問你:禁止root用戶遠程登入麽,根據你們公司的需要
第五項問你:需要刪除test測試數據哭麽,我不需要
第六項問你:現在重新加載權限表嗎 ,當然
3,在mariadb服務器端建立虛擬用戶賬號
1,創建存儲虛擬用戶數據庫和連接的數據庫用戶(帶有mysql>的就表示需要連接到數據庫執行操作) #創建數據庫 mysql> CREATE DATABASE vsftpd; #查看數據庫是否創建成功 mysql> SHOW DATABASES; 2,創建管理vsftpd數據庫的用戶。 mysql> GRANT all ON vsftpd.* TO vsftpd@‘192.168.136.6‘ IDENTIFIED BY ‘centos‘; 命令解析: GRANT: 創建授權用戶關鍵字 all : 表示擁有對vsftpd這個數據庫的所有權限 vsftpd.*: 表示指定vsftpd的所有表 vsftpd@‘192.168.136.6‘: @ 前的vsftpd表示用戶名,@ 後面的表示該用戶只能在192.168.136.6這個主機登入,如果想表示一個網段可以加百分號:192.168.136.% IDENTIFIED BY ‘centos‘: 作用設置密碼,centos就是該用戶的密碼。
準備存放用戶的相關表
#切表 mysql> USE vsftpd; #查看表 Mysql> SHOW TABLES; #創建users表 mysql>create table users (id int auto_increment not null primary key,name varchar(30) binary not null, password varchar(50) binary not null); 命令解析: create table users:創建表名為users子句 口號裏的就表結構,用逗號分開的表示字段例如:第一個字段為id,第二個字段為name,第三個字段為password 修飾符: int: 表示該字段為數字, auto_increment:表示該字段是整數自動增長 not null: 表示該字段不能為空 primary key: 表示該字段為主鍵 varchar(30): 表示該字段可以是任意字符長度為30個 binary: 作用是讓字段能夠用於登入驗證
在user表中添加虛擬用戶
根據需要添加所需要的用戶,為了安全應該使用PASSWORD 函數加密其密碼後存儲
#查看表結構
mysql>DESC users;
#插入內容
mysql> INSERT INTO users(name,password) values(‘wang‘,password(‘wang‘));
#插入內容
mysql> INSERT INTO users(name,password) values(‘li‘,password(‘li‘));
#查看表內容
mysql> SELECT * FROM users;
二,配置FTP服務器
1,在FTP服務器上安裝vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
配置epel源:
[epel]
name=centos-epel
baseurl=http://mirrors.aliyun.com/epel/6/x86_64/
gpgcheck=0
enable=1
#安裝模塊,以及FTP服務器端包
yum install vsftpd pam_mysql
2,創建FTP所需PAM模塊認證文件
因為需要連接數據庫所以之前的PAM塊已經不能用了,需要自己配置
在/etc/pam.d/目錄下創建一個名為vsftpd.mysql存放PAM模塊的配置文件
cd /etc/pam.d/
touch vsftpd.mysql
vim vsftpd.mysql
添加如下幾行:
auth required pam_mysql.so user=vsftpd passwd=centos host=數據庫IP地址 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=centos host=數據庫IP地址 db=vsftpd table=users usercolumn=name passwdcolumn=password 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()函數加密
註意 :crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函數加密,3表示md5加密,4表示sha1 加密
3,建立系統普通用戶,用作於虛擬用戶映射的用戶
一,創建用戶,共享目錄
#創建虛擬用戶映射的系統用戶及對應的目錄
useradd -s /sbin/nologin -d /var/ftproot vuser
#修改對應的目錄權限,因為FTP共享根目錄不能有寫權限
chmod 555 /var/ftproot
#創建可以上傳下載的共享目錄
mkdir /var/ftproot/{upload,pub}
#並給vuser用戶ACL權限
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
4,啟動FTP服務
#啟動服務
service vsftpd start
#開機自動啟動
chkconfig vsftpd on
#查看端口打開情況
ss -ntlp|grep :21
5,SELinux相關配置
1,restorecon -R /lib64/security
2,setsebool -P ftpd_connect_db 1
3,setsebool -P ftp_home_dir 1
4,chcon -R -t public_content_rw_t /var/ftproot/
最後測試
1,li用戶登入測試:成功
[root@ansible-7 ~]# ftp 192.168.136.6
Connected to 192.168.136.6 (192.168.136.6).
220 (vsFTPd 2.2.2)
Name (192.168.136.6:root): li
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
2,wang用戶登入測試:成功
[root@ansible-7 ~]# ftp 192.168.136.6
Connected to 192.168.136.6 (192.168.136.6).
220 (vsFTPd 2.2.2)
Name (192.168.136.6:root): wang
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
三,實現每個虛擬用戶具有各自不同的權限
1,修改主配置文件
vim /etc/vsftpd/vsftpd.conf
添加如下選項,作用是讓虛擬用戶支持獨立權限配置文件,可以自定義存放目錄。
user_config_dir=/etc/vsftpd/vusers_config/
2,在/etc/vsftpd/vusers_config/目錄下創建每個虛擬用戶的權限配置文件,文件名對應用戶名
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang
touch li
"註意:虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關 指令進行的。 "
下面的權限都可以添加至文件中,需要什麽權限添加什麽權限
#是否支持上傳功能
anon_upload_enable={YES|NO}
#是否支持創建文件功能
anon_mkdir_write_enable={YES|NO}
#是否支持刪除文件功能
anon_other_write_enable={YES|NO}
#指定虛擬賬戶登入的共享目錄
local_root=/ftproot
例如:讓wang用戶支持上傳,下載,刪除文件的權限那麽只需要在wang的權限配置文件中添加如下幾行
"註意:需確保對應的映射用戶對於文件系統有寫權限"
vim wang
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
CentOS-7當FTP服務器只有一個地方不同,就是需要編譯安裝pam_mysql模塊,其他概略相同。
步驟:
# 安裝開發包組
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/
# 解壓縮包
tar xvf pam_mysql-0.7RC1.tar.gz
# 進入pam_mysql-0.7RC1/目錄開始編譯
cd pam_mysql-0.7RC1/
# 運行configure腳本
./configure --with-mysql=/usr \
--with-pam=/usr --with-pam-mods-dir=/lib64/security
# 編譯開始
make -j 4
# 安裝程序
make install
FTP(六)實現基於MYSQL驗證的FTP虛擬用戶