FTP作為最常見的文件共享服務,可提供文件的上傳,下載等服務;其用戶可分為三類:
匿名用戶:即不需要用戶賬號與密碼即可登錄FTP服務器,此時登錄用戶將會被映射為系統上的ftp用戶。
系統用戶:即用FTP服務器上的用戶賬號與密碼登錄FTP服務器。此種方法雖然在一定程度上對登錄做出了限制,但由于系統賬號的相關權限,則增大了FTP服務器的系統風險;
虛擬用戶:用戶需要利用專為FTP服務創建的用戶賬號與密碼進行登錄;如此,既能限制FTP的登錄用戶,又盡量保證了FTP服務器的系統安全;
下面我們就以CentOS7為例來實現基于mysql對FTP服務設置虛擬用戶登錄。
1、環境搭建;
首先,我們需要在系統上安裝vsftpd與mariadb-server,由于需要實現虛擬用戶認證,所以我們還需要安裝pam。
yum –y install vsftpd mariadb-server pam
由于基于mysql數據庫實現虛擬用戶認證,所以我們需要將虛擬用戶的相關數據存放在mysql中,如此一來,我們還需要安裝pam_mysql。由于CentOS7上沒有pam_mysql的rpm包,所以我們需要編譯安裝。具體步驟如下:
yum –y groupinstall “Development Tools” “Server Platform Development” #安裝開發包組 yum –y install –y pam-devel mairadb-devel #安裝所需開發包 ./configure –with-pam=/usr –with-mysql=/usr –with-pam-mods-dir=/usr/lib64/security make mke install
至此,我們需要的環境搭建完成。
2、vsftpd常用選項;
vsftpd的配置文件主要為/etc/vsftpd/vsftpd.conf,我們以用戶相關作為分類來了解一下其常見配置;
匿名用戶相關配置:
anonymous_enable=YES|NO #是否允許匿名用戶登錄; anon_upload_enable=YES|NO #是否允許匿名用戶上傳; anon_mkdir_write_enable=YES|NO #是否允許匿名用戶創建文件夾; anon_other_write_enable=YES|NO #是否允許匿名用戶擁有其他寫權限,如刪除、新建文件等;
系統用戶相關配置:
local_enable=YES|NO #是否允許系統用戶登錄; write_enable=YES|NO #是否允許系統用戶具有寫權限;
3、mysql相關配置;
我們需要在mysql中配置vsftpd服務所需的一些數據庫及內容;
a、啟動mysql服務;
systemctl start mariadb.service
b、初始化mysql;
mysql_secure_installation
c、創建所需數據庫及表格;
mysql> create database vsftpd; mysql> use vsftpd; mysql> create table user (id int unsigned not null auto_increment primary key,name char(10) not null,password char(48)); mysql> insert into user (name,password) values (‘tom’,password(‘mageedu’)),(‘jerry’,password(‘mageedu’)); mysql> grant all on vsftpd.* to ‘vsftpd’@’localhost’ identified by ‘mageedu’; mysql> grant all on vsftpd.* to ‘vsftpd’@’127.0.0.1’ identified by ‘mageedu’; mysql> flush privileges;
可以看到,我們創建了tom與jerry兩個用戶,且密碼都為mageedu,如此,我們在mysql中需要創建的相關數據已經完成;
4、創建所需用戶與目錄;
由于FTP的虛擬用戶機制是將虛擬用戶映射為本機的一個來賓用戶,因此我們先在本機新建一個用戶作為虛擬用戶的映射用戶;
ueradd –d /ftproot vuser chown root:root /ftproot mkdir /ftproot/{upload,pub} setfacl –m u:vuser:rwx /ftproot/upload
5、配置pam與vsftpd;
首先我們需要修改vsftpd的幾項配置選項如下:
pam_server_name=vsftpd.mysql #指定pam的相關配置文件; guest_enable=YES #啟用來賓賬戶; guest_username=vuser #指定虛擬用戶映射的來賓賬戶名; user_config_dir=/etc/vsftpd/user_conf #指定虛擬用戶配置文件目錄;
然后我們在/etc/pam.d/目錄下新建文件vsftpd.myslq,內容如下:
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2 account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2
下面即為此文件中一些字段的意義:
user:連接mysql服務器的用戶名,此用戶要有權限訪問認證vsftpd服務的數據庫;
passwd:連接mysql服務器用戶的密碼;
host:mysql服務器主機地址;
db:認證vsftpd服務的數據庫名稱;
table:存放了用戶和密碼的表;
usercolumn:用戶名對應的字段;
passwdcolumn:密碼對應的字段;
crypt:密碼加密方法
6、創建各虛擬用戶配置文件
首先我們新建vsftpd.conf配置文件中指定的用戶配置文件存放目錄。
mkdir /etc/vsftpd/user_conf
然后在此目錄下創建tom與jerry兩個虛擬用戶同名的權限配置文件。對于權限配置文件我們可根據需要給予相應的權限,在此,我們為兩位用戶給予相同的權限,內容如下:
vim –o /etc/vsftpd/user_conf/{tom,jerry} anon_upload=YES anon_mkdir_enable=YES anon_other_enable=YES
至此,我們所需的服務以配置完畢。
設置好防火墻與SELinux后,啟動服務即可。
iptables –F setenforce 0 systemctl start vsftpd
原創文章,作者:luoliumeng,如若轉載,請注明出處:http://www.www58058.com/53777