FTP工作模式介紹與VFTPD服務


一澎嚣、FTP基礎

FTP(File Transfer Protocol击吱,文件傳輸協(xié)議)網(wǎng)上文章很多淋淀,我就不說了,重點說明下覆醇,使用FTP協(xié)議傳輸數(shù)據(jù)時朵纷,命令和數(shù)據(jù)是分開使用不同的端口傳輸?shù)模纾菏褂肍TP命令get(下載)一個文件永脓,get這個命令默認是通過TCP 21號端口號來傳遞的袍辞;而數(shù)據(jù)請求的傳遞,則通過其他端口來完成常摧。這個用于傳遞數(shù)據(jù)的端口搅吁,是通過兩種工作模式來定義的,不同的工作模式落午,數(shù)據(jù)傳輸?shù)亩丝谑怯袇^(qū)別的谎懦;但是~命令的傳輸端口是不會變化的,默認是21溃斋。下面來說說FTP兩種工作模式界拦。

二、FTP的工作模式

FTP的工作模式有兩種梗劫,有主動連接和被動連接;所謂主動或被動這是相對于服務器來講的

第一個:主動模式(POST)
在這個模式下享甸,F(xiàn)TP客戶端會通過2個端口來完成此次FTP任務;
第一個端口在跳,用于連接FTP服務端的21端口枪萄,一般會任意選擇一個高端口,如40001猫妙。第二個端口FTP客戶端也會監(jiān)聽40002端口(40001+1)瓷翻,默認是用于傳輸命令的端口+1,如果該端口剛好被占用,則再+1齐帚,如此類推妒牙,這個端口是用于和服務端進行數(shù)據(jù)傳輸?shù)摹K对妄,現(xiàn)在兩個端口都準備妥當了湘今,接下來,客戶端發(fā)送POST請求剪菱,該請求攜帶自己正在監(jiān)聽的40002端口摩瞎,服務端收到POST請求后,會使用本地20號端口孝常,主動去連接客戶端的40002端口旗们,最后客戶端返回確定。
主動模式的缺點在于构灸,不容易連接到客戶端的端口上上渴,默認大多數(shù)的客戶端防火墻是禁止外部主機隨意訪問的,所以出現(xiàn)了被動模式喜颁。

第二個:被動模式(PASV)
在被動模式中稠氮,命令的傳輸和數(shù)據(jù)的傳輸連接都是由客戶端發(fā)起的,這樣就可以避免客戶端的防火墻拒絕了半开,畢竟用戶可能并不知道防火墻是干嘛用的隔披。
客戶端使用任意高端口(如40001)發(fā)起一個PSAV請求給服務端,服務端收到后稿茉,返回一個用于傳輸數(shù)據(jù)的端口锹锰,如(5678)給客戶端,客戶端收到后漓库,再使用本地任意端口號再去連接服務器端的5678端口恃慧,最后服務返回確認信息。

三渺蒿、VSFTPD服務

簡介
VSFTPD服務網(wǎng)上教程也很多痢士,本地賬戶認證和匿名認證就不細說了,主要說說MYSQL+PAM+VSFTP的虛擬用戶認證實現(xiàn)

實驗環(huán)境:Centos7_X64

  • VSFTPD服務基礎
    安裝vsftpd:

    [root@test2 ~]# yum install -y vsftpd

VSFTPD程序環(huán)境:

主程序:/usr/sbin/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
數(shù)據(jù)根目錄:/var/ftp
Systemd Unit File: /usr/lib/systemd/system/vsftpd.service

  • 配置VSFTPD
    VFTPD的用戶類別:
    VSFTPD的用戶類別分為兩類茂装,一類是本地用戶怠蹂,一類是虛擬用戶;
    本地用戶可以是本地的系統(tǒng)用戶和普通用戶少态,匿名用戶也是系統(tǒng)用戶城侧,匿名用戶映射到本地系統(tǒng)用戶叫ftp;默認登陸ftp后彼妻,所處位置是賬戶對應的家目錄嫌佑,由于ftp用戶的家目錄在/var/ftp豆茫,所以匿名用戶登陸后,默認的所處位置則在/var/ftp屋摇;默認可以自己有權限訪問的所有路徑間切換揩魂,所以如果使用本地賬戶登陸ftp,如果全選允許,是可以切換到其他目錄上的炮温,如/etc火脉,為了安全,應該禁錮用戶于其家目錄中柒啤。

VSFTPD的配置文件
主配置文件是/etc/vsftpd/vsftpd.conf倦挂,配置格式為:
指令 值,注意指令前面不能有多余字符白修;
配置詳細說明能通過man vsftpd.conf來查看妒峦。
命令分類:
系統(tǒng)用戶命名作用于能通過本地登陸的用戶,而匿名用戶命令作用與虛擬用戶和匿名用戶

針對匿名用戶的配置:

anonymous_enable=YES    #是否開啟匿名用戶
anon_upload_enable=YES  #是否運行匿名用戶上傳文件
anon_mkdir_write_enable=YES #是否允許匿名用戶mkdir文件夾
anon_other_write_enable=YES #是否運行匿名用戶創(chuàng)建或刪除文件
anon_umask=077    #匿名用戶創(chuàng)建的文件umask

針對系統(tǒng)用戶的配置:

local_enable=YES    #是否開啟本地用戶登陸
write_enable=YES    #是否允許寫入操作
local_umask=022     #創(chuàng)建文件的默認權限

其他配置:

上傳下載速率限制:
anon_max_rate=0     #限制匿名用戶的速率兵睛,0為不限制
local_max_rate=0    #限制本地用戶的速率,0為不限制

并發(fā)連接數(shù)限制:
max_clients=2000    #最大能并發(fā)多少個連接
max_per_ip=50       #單個IP最大的連接數(shù)窥浪,即一個主機最大能建立多少個連接

控制可登錄vsftpd服務的用戶列表
userlist_enable=YES  #啟用/etc/vsftpd/user_list文件來控制可登錄用戶
userlist_deny=YES|NO    #YES即黑名單祖很,NO即白名單


輔助配置文件
/etc/vsftpd/ftpusers    #列在此文件中的用戶 均禁止使用ftp服務

禁錮用戶于其家目錄中
chroot_local_user=YES   #禁錮所有本地用戶 于其家目錄;需要事先去除用戶對家目錄的寫權限漾脂;
也可以寫一個文件假颇,只對文件中的用戶做禁錮
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #禁錮列表中文件存在的用戶于其家目錄中;需要事先去除用戶對家目錄的寫權限骨稿;

傳輸日志(不常用):
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES  

  • PAM模塊簡單介紹
    簡介:
    PAM笨鸡,Pluggable Authentication Modules,可插拔認證模塊坦冠,是一套共享庫形耗,如果編寫應用時,需要用到身份驗證功能時辙浑,可以選擇自己寫認證功能激涤,又或者調(diào)用由PAM提供的公共庫,完成用戶驗證判呕,簡單來說倦踢,程序員可以調(diào)用PAM模塊實現(xiàn)用戶驗證功能,而不用自己重新編寫侠草,這種方式下,就算升級本地認證機制,也不用修改程序.PAM使用配置/etc/pam.d/下的文件來管理對程序的認證方式辱挥,程序員只要在對應目錄下創(chuàng)建對應的配置文件,就可以調(diào)用本地的認證模塊.模塊放置在/lib/security下,以加載動態(tài)庫的形式進行边涕。包括系統(tǒng)登陸的程序login,su命令晤碘,也是調(diào)用了PAM模塊實現(xiàn)用戶驗證褂微。

VSFTPD的用戶身份驗證,也是由PAM模塊實現(xiàn)的哼蛆;在/etc/vsftpd/vsftpd.conf這個主配文件中蕊梧,有1條指令指指明vsftpd的PAM配置文件路徑的,如:pam_service_name=vsftpd指明認證時候腮介,讀取/etc/pam.d/vsftpd這個配置文件肥矢。配置文件內(nèi)容

[root@test2 ~]# cat /etc/pam.d/vsftpd 
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required pam_shells.so
auth       include  password-auth
account    include  password-auth
session    required     pam_loginuid.so
session    include  password-auth

實現(xiàn)vsftpd通過mysql數(shù)據(jù)庫來完成虛擬用戶登陸,只需要配置pam能夠支持數(shù)據(jù)庫驗證就可以了叠洗,默認pam是不支持的甘改,可以通過安裝一個第三方模塊:pam_mysql,使得pam能夠通過mysql是完成用戶驗證灭抑。

VSFTPD+PAM+MYSQL實現(xiàn)步驟:

  1. 安裝所需要程序mysql和pam_mysql

    安裝mysql

    [root@test2 ~]# yum install mariadb-server
    //配置mysql十艾,新建一個用戶vsftpd,和一個數(shù)據(jù)庫vsftpd
    [root@test2 ~]# systemctl restart mariadb
    [root@test2 ~]# mysql 
    
    MariaDB [(none)]> CREATE DATABASE vsftp;
    MariaDB [(none)]> GRANT SELECT ON vsftp.* TO 'vsftp'@'localhost' IDENTIFIED BY '523569';  //給定SELECT權限
    //創(chuàng)建一個用于保存用戶密碼的表
    MariaDB [vsftp]> CREATE TABLE user(id INT NOT NULL AUTO_INCREMENT,name CHAR(30) NOT NULL,password CHAR(48) NOT NULL,PRIMARY KEY(id));
    
    

//查看表結(jié)構
MariaDB [vsftp]> DESC user;
+----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(30) | NO | | NULL | |
| password | char(48) | NO | | NULL | |
+----------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

    //添加2個測試的虛擬用戶腾节,根據(jù)需要添加所需要的用戶忘嫉,需要說明的是,這里將其密碼為了安全起見應該使用PASSWORD函數(shù)加密后存儲案腺。
MariaDB [vsftp]> INSERT INTO user(name,password)VALUES('tom',password('523569'));
MariaDB [vsftp]> INSERT INTO user(name,password)VALUES('sun',password('523569'));

至此庆冕,MYSQL配置完成,接下來劈榨,則

  1. 安裝pam_mysql模塊
    下載pam_mysql模塊访递,地址:http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
 [root@test2 ~]# tar -xf pam_mysql-0.7RC1.tar.gz //解壓
 [root@test2 ~]# cd pam_mysql-0.7RC1
 [root@test2 pam_mysql-0.7RC1]# ./configure --help  //可以查看安裝幫助
 重點以下幾項:
 --with-mysql=PREFIX     specify MySQL installation prefix
 //指定mysql的安裝路徑,我是通過yum安裝的同辣,所以默認是在/usr下
 --with-pam=PREFIX       specify PAM installation prefix
 //默認也在/usr下
 --with-pam-mods-dir=DIR specify PAM module installation path
 //指定PAM模塊安裝的位置拷姿,默認在/usr/lib64/security
 
 #下面開始安裝pam_mysql
 在開始安裝之前,需要安裝2個開發(fā)包旱函。
 [root@test2 pam_mysql-0.7RC1]# yum install mariadb-devel pam-devel
 //pam.mysql編譯需要依賴到這2個包
 
 ./configure安裝配置如下:

[root@test2 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/usr/lib64/security/
[root@test2 pam_mysql-0.7RC1]# make && make install
[root@test2 pam_mysql-0.7RC1]# ls /usr/lib64/security/pam_mysql.so #安裝成功后响巢,可以看到該模塊

 
3.  **配置VSFTPD**

1.建立pam認證配置文件,寫入配置內(nèi)容
[root@test2 pam_mysql-0.7RC1]# vim /etc/pam.d/vsftpd_vuse

auth required /lib/security/pam_mysql.so user=vsftp passwd=523569 host=localhost db=vsftp table=user usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftp passwd=523569 host=localhost db=vsftp table=user usercolumn=name passwdcolumn=password crypt=2

注意:由于mysql的安裝方式不同,pam_mysql.so基于unix sock連接mysql服務器時可能會出問題陡舅,此時抵乓,建議授權一個可遠程連接的mysql并訪問vsftpd數(shù)據(jù)庫的用戶。

2.修改vsftpd配置靶衍,配置PAM認證文件為我們新建的PAM配置文件:vsftpd_vuse灾炭。
添加以下選項
guest_enable=YES #虛擬用戶需要啟用來賓賬戶并映射到一個本地用戶
guest_username=vuser #虛擬賬戶映射到的本地用戶

請確保/etc/vsftpd.conf中已經(jīng)啟用了以下選項
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

配置好后,新建對應用戶颅眶,并把家目錄指定為/var/vsftpd蜈出。
[root@test2 pam_mysql-0.7RC1]# useradd -d /var/vsftpd vuser
重啟服務
[root@test2 pam_mysql-0.7RC1]# systemctl restart vsftpd
為了不影響實驗,關閉防火墻和關閉SELINUX:
[root@test2 pam_mysql-0.7RC1]# systemctl stop firewalld
[root@test2 pam_mysql-0.7RC1]# setenforce 0
修改文件夾權限:

chmod go+rx /var/ftproot

驗證
[root@test2 pam_mysql-0.7RC1]# ftp localhost
Name (localhost:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

    
 

4. 配置虛擬用戶具有不同的訪問權限
    vsftpd可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp服務訪問權限涛酗,每個虛擬用戶的配置文件名同虛擬用戶的用戶名铡原。配置文件目錄可以是任意未使用目錄偷厦,只需要在vsftpd.conf指定其路徑及名稱即可。虛擬用戶的配置命令和匿名用戶命令是一樣的
    ```
    1燕刻、為虛擬用戶定義配置文件目錄
    [root@test2 pam_mysql-0.7RC1]# vim /etc/vsftpd/vsftpd.conf     user_config_dir=/etc/vsftpd/vuser_config
    
    2只泼、創(chuàng)建所需要目錄,并為虛擬用戶提供配置文件
    [root@test2 pam_mysql-0.7RC1]# mkdir /etc/vsftpd/vuser_config
    //創(chuàng)建與用戶同名的配置文件
    [root@test2 pam_mysql-0.7RC1]# vim /etc/vsftpd/vuser_config/tom
anon_upload_enable=YES   
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
    //tom用戶擁有上傳卵洗,刪除请唱,新建文件夾操作
        

    
    
    ```

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市过蹂,隨后出現(xiàn)的幾起案子十绑,更是在濱河造成了極大的恐慌,老刑警劉巖酷勺,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件本橙,死亡現(xiàn)場離奇詭異,居然都是意外死亡脆诉,警方通過查閱死者的電腦和手機甚亭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來击胜,“玉大人狂鞋,你說我怎么就攤上這事∏钡模” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵字管,是天一觀的道長啰挪。 經(jīng)常有香客問我,道長嘲叔,這世上最難降的妖魔是什么亡呵? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮硫戈,結(jié)果婚禮上锰什,老公的妹妹穿的比我還像新娘。我一直安慰自己丁逝,他們只是感情好汁胆,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霜幼,像睡著了一般嫩码。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罪既,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天铸题,我揣著相機與錄音铡恕,去河邊找鬼。 笑死丢间,一個胖子當著我的面吹牛探熔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烘挫,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诀艰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了墙牌?” 一聲冷哼從身側(cè)響起涡驮,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喜滨,沒想到半個月后捉捅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡虽风,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年棒口,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辜膝。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡无牵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厂抖,到底是詐尸還是另有隱情茎毁,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布忱辅,位于F島的核電站鸽素,受9級特大地震影響达椰,放射性物質(zhì)發(fā)生泄漏喘鸟。R本人自食惡果不足惜盈罐,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望损搬。 院中可真熱鬧碧库,春花似錦、人聲如沸巧勤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踢关。三九已至伞鲫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間签舞,已是汗流浹背秕脓。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工柒瓣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吠架。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓芙贫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親傍药。 傳聞我的和親對象是個殘疾皇子磺平,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容