標籤:vsftpd 虛擬使用者 mysql認證
簡單羅列基礎命令,只分享我的想法!
一、目的
要求:配置允許虛擬使用者訪問的vsftpd伺服器,虛擬使用者儲存在另一台MySQL的伺服器上面,虛擬使用者帳號有兩個分別是tom和jerry,密碼是tom和jerry,要求對這兩個賬戶的許可權做一下限制(根據實際的要求,自己調節)。
環境:MySQL伺服器(172.16.49.1),CentOS 6.6和MariaDB-5.5.43。另一台是通過yum安裝vsftpd(192.168.0.22),OS是CentOS 6.6。
1、介紹vsftpd
Vsftpd是ftp協議實現的一種方式,在應用程式層,不依賴於通訊子網,也就是不依賴於核心,所以,Windows使用者也可以使用。本身基於C/S模式,伺服器端始終監聽在21連接埠,因為21連接埠是命令串連連接埠,而20連接埠是資料轉送的連接埠,需要資料轉送的時候建立,之後拆除,而不是一致處於監聽狀態,所以,client和server之前的資料轉送的串連又可以分為“主動”和“被動”兩個模式。
“主動”:由server端主動建立的串連。就是首先client的隨機連接埠串連server的21連接埠,當收到下載資料的命令之後,server端主動會開啟20連接埠,串連client的隨機+1連接埠,傳輸完畢20連接埠將被“拆除”,一般不用“主動”串連的模式,因為如果client有防火牆的話,一般需要client手動去允許存取或設定。
“被動”:由client建立的串連。就是首先client的隨機連接埠串連server的21連接埠,在21連接埠client和server已經“協商”完畢,server端使用哪個隨機連接埠去串連client的隨機+1連接埠(注意:為什麼client不主動串連server的20連接埠,因為server的20連接埠不會像21連接埠那樣,vsftpd一直在監聽,按需要建立然後關閉)。
ftp的傳輸格式是看資料,如果資料是文本就文本傳輸,如果資料是二進位的程式,那就是以二進位傳輸,這一點不同於http協議,只能是以文字資料流進行傳輸。
ftp也有資訊碼:
1系列:資訊碼。
2系列:成功。
3系類:需要進一步提示補充的狀態代碼(當你輸入賬戶之後,會有,因為還有密碼)。
4系類:用戶端錯誤。
5系列:伺服器端錯誤。
因為vsftpd只有在類unix伺服器上實現,所以認證主要是通過OS自己的pam模組認證,OS的系統使用者,匿名使用者(沒有使用者和密碼),虛擬使用者(在資料庫或其它檔案中儲存的帳號和密碼)認證。
2、yum安裝vsftpd之後產生的主要檔案。
使用者認證(pam)設定檔:/etc/pam.d/vsftpd(注意:主設定檔中的pam_service_name=vsftpd,就是調用這個設定檔)。
主應用程式:/user/sbin/vsftpd
匿名使用者共用的資源:/var/ftp(注意:所有的匿名的使用者都需要映射到OS中的使用者,為了安全起見,最好是系統使用者,但是需要建立系統使用者的時候建立家目錄,因為模式開放的就是家目錄,只有映射到OS中的使用者你才能夠訪問檔案,因為local file也是需要許可權的,但是不能更改/var/ftp的許可權,可以建立一個目錄,然後修改可寫的許可權)。
系統使用者就是使用者的家目錄。
設定檔目錄:/etc/vsftpd
主設定檔:/etc/vsftpd/vsftpd.conf
3、對於主設定檔的部分內容進行說明
anonymous_enable=YES //是否啟用匿名使用者anon_upload_enable=YES //是否開啟匿名使用者上傳anon_mkdir_write_enable=YES //是否允許匿名使用者建立目錄anon_ohter_write_enable=YES //是否允許匿名使用者刪除檔案local_enable=YES //是否啟用本地系統使用者write_enable=YES //是否允許本地系統使用者刪除、建立local_umask=022 //限制許可權
禁錮所有的ftp本機使用者於其家目錄中:
chroot_local_user=YES
禁錮檔案中指定的ftp本機使用者於其家目錄中:
chroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list
日誌:
xferlog_enable=YESxferlog_std_format=YESxferlog_file=/var/log/xferlog
改變上傳檔案的屬主:
chown_uploads=YESchown_username=whoever
是否啟用控制使用者登入的列表檔案/etc/vsftpd/user_list
userlist_enable=YESuserlist_deny=YES|NO
串連限制:
max_clients: //最大並發串連數max_per_ip: //每個IP可同時發起的並發請求數
傳輸速率:
anon_max_rate: //匿名使用者的最大傳輸速率, 單位是“位元組/秒”local_max_rate: //本機使用者的最大傳輸速率, 單位是“位元組/秒”
強制啟動文字資料流傳輸,有可能用戶端開啟的檔案是亂碼
ascii_upload_enable=YESascii_download_enable=YES
4、配置
A、安裝所需要的程式
1、安裝vsftpd、pam_mysql和mysql_server
注意:pam_mysql是由epel源提供
B、建立虛擬使用者帳號
1、準備資料庫及相關的表格
mysql>CREATE DATABASE vsftpd;//mysql>GRANT SELECT ON vsftpd.* TO [email protected] IDENTIFIED BY‘mima‘; 資料庫在原生時候可以使用mysql>GRANT SELECT ON vsftpd.* TO [email protected]‘172.16.%.%‘ IDENTIFIEDBY ‘mima‘;mysql>FLUSH PRIVILEGES; mysql>use vsftp; mysql>CREATE TABLE users (id INT UNSIGNED AUTO_INCREMENT NOT NULLPRIMARY KEY,name CHAR(20) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);
2、添加測試的虛擬賬戶
為了密碼的安全使用mysql內部的函數進行加密,之後密碼的位元是48位。
mysql>INSERT INTO users (name,password) VALUES(’tom‘,password(‘tom‘)),(’jerry‘,password(‘jerry‘)
);
C、配置vsftpd
1、建立pam認證所需的檔案
vim /etc/pam.d/vsftpd.mysql //為了不與原來的vsftpd的認證檔案衝突,所以進行重新命名添加如下兩行(可以直接寫pam_mysql.so,會自動去/lib64/security這個目錄下面去找):auth required /lib64/security/pam_mysql.so user=vsftp passwd=mima host=MYSQL那台機器的IP db=vsftpd table=users usercolumn=name passwdcolumn=passwordcrypt=2 //認證帳號,為什麼是crypt=2,rpm-ql pam_mysql中的README解決account required /lib64/security/pam_mysql.so user=vsftp passwd=mima host=MYSQL那台機器的IP db=vsftpd table=users usercolumn=name passwdcolumn=passwordcrypt=2 //檢查帳號是否在有效期間之內
2、修改vsftpd的設定檔,使其適應mysql的認證
建立虛擬使用者映射的系統使用者及對應的家目錄
useradd -s /sbin/nologin -d /var/ftproot vuserchmod go+rx /var/ftproot
確保主設定檔/etc/vsftpd/vsftpd.conf中有,可以根據需要臨時修改
anonymous_enable=YESlocal_enable=YESwrite_enable=YESanon_upload_enable=NOanon_mkdir_write_enable=NOchroot_local_user=YES
而後添加以下選項
guest_enable=YESguest_username=vuser
確保pam_service_name的值
pam_service_name=vsftpd.mysql //只能通過mysql認證登陸
D、啟動vsftpd服務
/etc/init.d/vsftpd startchkconfig vsftpd on
使用虛擬使用者登陸,驗證配置結果,你可以通過win的IE或者cmd等
E、配置虛擬使用者具有不同的存取權限
vsftpd可以在設定檔目錄中為每個使用者提供單獨的設定檔已定義其ftp服務存取權限,每個虛擬使用者的設定檔名桐虛擬使用者的使用者名稱。設定檔目錄可以是任意未使用目錄,只需要在vsftpd.conf指定路徑及名稱即可。
1、配置vsftpd為虛擬使用者使用設定檔目錄
vim /etc/vsftpd/vsftpd.conf
添加如下
user_config_dir=/etc/vsftpd/vusers_config
2、建立所需要的目錄,並為虛擬使用者提供設定檔
mkdir /etc/vsftpd/vusers_configtouch /etc/vsftpd/vusers_config/{tom,jerry}
3、配置虛擬使用者的存取權限
虛擬使用者對vsftpd服務的存取權限是通過匿名使用者的相關指令進行的。比如,如果需要讓tom使用者具有上傳下載的許可權,可以修改/etc/vsftpd/vuser_config/tom檔案,在裡面添加
anon_upload_enable={YES|NO}anon_mkdir_write_enable={YES|NO}anon_other_write_enable={YES|NO}
四、如下
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6C/D7/wKiom1VTPVPicnRkAALL_GjMNY0011.jpg" title="虛擬使用者在資料庫中建立.jpg" alt="wKiom1VTPVPicnRkAALL_GjMNY0011.jpg" />
圖1、資料庫的建立
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6C/D2/wKioL1VTPwHiH84FAANNQKbCny4686.jpg" title="通過windows的cmd登陸.jpg" alt="wKioL1VTPwHiH84FAANNQKbCny4686.jpg" />
圖2、虛擬使用者tom登陸
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6C/D2/wKioL1VTP5qw1ArsAAHCS30FI9c371.jpg" title="虛擬使用者上傳檔案和下載檔案.jpg" alt="wKioL1VTP5qw1ArsAAHCS30FI9c371.jpg" />
圖3、tom使用者上傳和建立目錄
注意:圖3中227 EnteringPassive Mode (192,168,0,22,28,236)告訴你是被動模式下載的資料,其實伺服器的連接埠號碼就是28*256+236。
有志同道合的“戰友”可以加我qq:865765761。(註明:Linux)
本文出自 “唯寫感受!” 部落格,請務必保留此出處http://damihua.blog.51cto.com/6537272/1651073
建立vsftpd伺服器基於mysql的虛擬使用者認證