說明:本實驗在兩臺CentOS主機上實現,一臺作爲FTP服務器,一臺作數據庫服務器 **實驗:實現基於mysql驗證的vsftpd虛擬用戶** 1、安裝所須要包和包組: 在數據庫服務器上安裝包: •Centos7:在數據庫服務器上安裝 yum –y install mariadb-server systemctl start mariadb.service systemctl enable mariadb •Centos6:在數據庫服務器上安裝 yum –y install mysql-server 在FTP服務器上安裝vsftpd和pam_mysql包 centos6:pam_mysql由epel6的源中提供 yum install vsftpd pam_mysql centos7:無對應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
2、在數據庫服務器上建立虛擬用戶帳號 # 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;
3、在FTP服務器上配置vsftpd服務 # 1.在FTP服務器上創建pam認證所需文件 vi /etc/pam.d/vsftpd.mysql 添加以下兩行 auth required pam_mysql.so user=vsftpdpasswd=magedu host=mysqlserver db=vsftpd table=usersusercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpdpasswd=magedu host=mysqlserver db=vsftpd table=usersusercolumn=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
4、啓動vsftpd服務 service vsftpd start;systemctl start vsftpd chkconfig vsftpd on;systemctl enable vsftpd 查看端口開啓狀況 netstat -tnlp |grep :21
5、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/
6、測試:利用FTP客戶端工具,以虛擬用戶登陸驗證結果 •tail /var/log/secure
自動掛載 可以使用autofs按須要掛載NFS共享,在空閒時自動卸載 由autofs包提供 系統管理器指定由/etc/auto.master自動掛載器守護進程控制的掛載點 自動掛載監視器訪問這些目錄並按要求掛載文件系統 文件系統在失活的指定間隔5分鐘後會自動卸載 爲全部導出到網絡中的NFS啓用特殊匹配 -host 至「browse」 參看幫助:man 5 autofs 支持含通配符的目錄名 * server:/export/& 自動掛載依賴autofs服務 yum install autofs 主配置文件 /etc/auto.master /dev/cdrom /misc/cd vim /etc/auto.master 1 相對路徑法 文件路徑:/d1/d2/d3/nfsdir2 兩部分 dirname /d1/d2/d3 basename nfsdir2 vim /etc/auto.master 只定義dirname(文件的路徑名) /d1/d2/d3 /etc/nfsmount(與定義basename文件對應) vim /etc/nfsmount 只定義basename(路徑的具體文件名) nfsdir2 -fstype=nfs,vers=3 192.168.27.7:/app/nfs2 例子 /misc/cd虛擬目錄實現自動掛載 vim /etc/auto.misc cd -fstype=iso9660,ro :/dev/cdrom 總結:dirname和basename都不須要手工建立,啓動autofs服務自動生成dirname,訪問basename目錄時自動生成這個目錄 2 絕對路徑法:直接匹配包括本地路徑名稱,不會影響本地目錄結構(home目錄下其它用戶文件夾可見) vim /etc/auto.master /- /etc/wanghome vim /etc/wanghome /home/wang -fstype=nfs,rw 192.168.27.7:/data/wanghome home目錄下的mage文件夾將不受影響
遠程用戶的家目錄經過nfs服務共享 vim /etc/exports.d/nfs.exports data/wanghome *(rw) setfacl -m u:wang(uid 1000):rwx /data/wanghome cp /etc/skel/.[^.]* /data/wanghome/ useradd -u 500 nfsuser -M 建立用戶時不建立家目錄 setfacl -m u:500(nfsuser):rwx /data/wanghome 指定uid受權 客戶端測試 手工掛載方式: mount 192.168.27.7:/data/wanghome /home/wang su - wang(uid 1000) su - mage(uid 500) 不一樣客戶端建立賬號uid最好統一 autofs自動掛載方式: vim /etc/auto.master dirname=/home /home /etc/wanghome 自動掛載方式:home目錄下的文件將由/etc/wanghome文件掛載決定 vim /etc/wanghome wang -fstype=nfs,rw 192.168.27.7:/data/wanghome
nfs服務:僞根方式將多個不一樣的文件夾組織成根目錄mysql
nfs服務器配置 yum install nfs-utils mkdir /nfsroot/nfsdir{1,2,3} –pv 僞根目錄 mkdir /app/data{1,2,3} –pv 存放數據目錄 掛載: mount –B /app/data1 /nfsroot/nfsdir1/ mount -B /app/data2 /nfsroot/nfsdir2/ mount –B /app/data3 /nfsroot/nfsdir3/ nfs服務默認是以nfsnobody身份運行的 setfacl -m u:nobody:rwx /app/data2 exportfs –r exportfs -v vim /etc/exports /nfsroot *(fsid=0,ro,crossmnt) /nfsroot/nfsdir1 *(ro) /nfsroot/nfsdir2 192.168.64.103(rw) 除了192.168.64.103主機外 繼承父目錄的只讀權限 /nfsroot/nfsdir3 *(rw) systemctl restart nfs-server 客戶端配置 只讀:nfs服務設置的權限 拒絕訪問:文件系統設置的權限 mkdir /mnt/nfs mount 192.168.64.7:/ /mnt/nfs 寫的是根,其實掛載的是 192.168.64.7:/nfsroot 僞根目錄 ![](https://s1.51cto.com/images/blog/201802/04/fd93a63616583f7063d30d30a26b1bdc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)