Ubuntu 14.04 配置vsftpd實(shí)現(xiàn)FTP服務(wù)器 - 通過(guò)FTP連接AWS

測(cè)試主機(jī):亞馬遜AWS EC2
系統(tǒng):Ubuntu 14.04

想用AWS來(lái)做服務(wù)器玩,結(jié)果發(fā)現(xiàn)其不能像簡(jiǎn)單使用阿里云服務(wù)器那樣用ftp連接流济,反正也不熟悉ftp服務(wù)器搭建,那就乘這個(gè)機(jī)會(huì)學(xué)習(xí)一下如何利用vsftpd配置FTP服務(wù)器,網(wǎng)上大多的教程是基于CentOS的莉钙,但給了我關(guān)于Ubuntu下配置的很多參考嵌莉。

0.vsftpd是啥玩意

都不知道安裝了個(gè)啥東西进萄,那就沒(méi)意思了,所以先去了解下什么是vsftpd锐峭。vsftpd意思為“very secure FTP daemon(非常安全的FTP進(jìn)程)”中鼠,當(dāng)然只有更安全沒(méi)有最安全。

那它到底安全在哪里呢沿癞,主要體現(xiàn)在以下兩點(diǎn):

  • 權(quán)限控制援雇,vsftpd以一般用戶登錄,用戶權(quán)限相對(duì)較小椎扬,對(duì)于系統(tǒng)就越安全惫搏,對(duì)于用戶需要的系統(tǒng)級(jí)指令大部分被整合到vsftpd中了,用戶不需要申請(qǐng)更高權(quán)限就足以完成絕大部分ftp指令蚕涤;此外對(duì)于ftp本身內(nèi)部的讀寫控制筐赔,vsftpd也足以通過(guò)配置文件控制了;
  • 目錄限制揖铜,vsftpd通過(guò)chroot可以控制ftp登錄用戶所能看到的目錄范圍茴丰,即限定ftp用戶看到的根目錄為系統(tǒng)中某一個(gè)目錄,如此一個(gè)ftp用戶就除了看到自己的ftp根目錄不能看到其他比如配置文件、系統(tǒng)更目錄等贿肩,保護(hù)了系統(tǒng)峦椰。

1.安裝vsftpd

sudo apt-get install vsftpd

至于要不要通過(guò)sudo apt-get update就看你的源本身夠不夠新了

2.配置vsftpd

ubuntu的vsftpd配置文件在\etc\vsftpd.conf

配置文件的詳細(xì)配置項(xiàng)如下(那么多我們其實(shí)按需配置很少的幾項(xiàng)就好):

listen=<YES/NO> :設(shè)置為YES時(shí)vsftpd以獨(dú)立運(yùn)行方式啟動(dòng),設(shè)置為NO時(shí)以xinetd方式啟動(dòng)(xinetd是管理守護(hù)進(jìn)程的汰规,將服務(wù)集中管理汤功,可以減少大量服務(wù)的資源消耗)
listen_port=<port> :設(shè)置控制連接的監(jiān)聽(tīng)端口號(hào),默認(rèn)為21
listen_address=<ip address> :將在綁定到指定IP地址運(yùn)行控轿,適合多網(wǎng)卡
connect_from_port_20=<YES/NO> :若為YES冤竹,則強(qiáng)迫FTP-DATA的數(shù)據(jù)傳送使用port 20,默認(rèn)YES
pasv_enable=<YES/NO> :是否使用被動(dòng)模式的數(shù)據(jù)連接茬射,如果客戶機(jī)在防火墻后鹦蠕,請(qǐng)開(kāi)啟為YES
pasv_min_port=<n>
pasv_max_port=<m> :設(shè)置被動(dòng)模式后的數(shù)據(jù)連接端口范圍在n和m之間,建議為50000-60000端口
message_file=<filename> :設(shè)置使用者進(jìn)入某個(gè)目錄時(shí)顯示的文件內(nèi)容,默認(rèn)為 .message
dirmessage_enable=<YES/NO> :設(shè)置使用者進(jìn)入某個(gè)目錄時(shí)是否顯示由message_file指定的文件內(nèi)容
ftpd_banner=<message> :設(shè)置用戶連接服務(wù)器后的顯示信息在抛,就是歡迎信息
banner_file=<filename> :設(shè)置用戶連接服務(wù)器后的顯示信息存放在指定的filename文件中
connect_timeout=<n> :如果客戶機(jī)連接服務(wù)器超過(guò)N秒钟病,則強(qiáng)制斷線,默認(rèn)60
accept_timeout=<n> :當(dāng)使用者以被動(dòng)模式進(jìn)行數(shù)據(jù)傳輸時(shí)刚梭,服務(wù)器發(fā)出passive port指令等待客戶機(jī)超過(guò)N秒肠阱,則強(qiáng)制斷線,默認(rèn)60
accept_connection_timeout=<n> :設(shè)置空閑的數(shù)據(jù)連接在N秒后中斷朴读,默認(rèn)120
data_connection_timeout=<n> : 設(shè)置空閑的用戶會(huì)話在N秒后中斷屹徘,默認(rèn)300
max_clients=<n> : 在獨(dú)立啟動(dòng)時(shí)限制服務(wù)器的連接數(shù),0表示無(wú)限制
max_per_ip=<n> :在獨(dú)立啟動(dòng)時(shí)限制客戶機(jī)每IP的連接數(shù)衅金,0表示無(wú)限制(不知道是否跟多線程下載有沒(méi)干系)
local_enable=<YES/NO> :設(shè)置是否支持本地用戶帳號(hào)訪問(wèn)
guest_enable=<YES/NO> :設(shè)置是否支持虛擬用戶帳號(hào)訪問(wèn)
write_enable=<YES/NO> :是否開(kāi)放本地用戶的寫權(quán)限
local_umask=<nnn> :設(shè)置本地用戶上傳的文件的生成掩碼噪伊,默認(rèn)為077
local_max_rate<n> :設(shè)置本地用戶最大的傳輸速率,單位為bytes/sec氮唯,值為0表示不限制
local_root=<file> :設(shè)置本地用戶登陸后的目錄鉴吹,默認(rèn)為本地用戶的主目錄
chroot_local_user=<YES/NO> :當(dāng)為YES時(shí),所有本地用戶可以執(zhí)行chroot
chroot_list_enable=<YES/NO> 
chroot_list_file=<filename> :當(dāng)chroot_local_user=NO 且 chroot_list_enable=YES時(shí)惩琉,只有filename文件指定的用戶可以執(zhí)行chroot
anonymous_enable=<YES/NO> :設(shè)置是否支持匿名用戶訪問(wèn)
anon_max_rate=<n> :設(shè)置匿名用戶的最大傳輸速率豆励,單位為B/s,值為0表示不限制
anon_world_readable_only=<YES/NO> 是否開(kāi)放匿名用戶的瀏覽權(quán)限
anon_upload_enable=<YES/NO> 設(shè)置是否允許匿名用戶上傳
anon_mkdir_write_enable=<YES/NO> :設(shè)置是否允許匿名用戶創(chuàng)建目錄
anon_other_write_enable=<YES/NO> :設(shè)置是否允許匿名用戶其他的寫權(quán)限(注意瞒渠,這個(gè)在安全上比較重要良蒸,一般不建議開(kāi),不過(guò)關(guān)閉會(huì)不支持續(xù)傳)
anon_umask=<nnn> :設(shè)置匿名用戶上傳的文件的生成掩碼伍玖,默認(rèn)為077

我們來(lái)定一個(gè)目標(biāo)吧诚啃,目標(biāo)是禁止匿名訪問(wèn),限制用戶ftp目錄私沮,允許用戶上傳,使用FTP被動(dòng)模式。

打開(kāi)配置文件sudo vim /etc/vsftpd.conf仔燕,如下修改

#禁止匿名訪問(wèn)
anonymous_enable=NO
#接受本地用戶
local_enable=YES
#允許上傳
write_enable=YES
#用戶只能訪問(wèn)限制的目錄
chroot_local_user=YES
#設(shè)置固定目錄造垛,在結(jié)尾添加。如果不添加這一行晰搀,各用戶對(duì)應(yīng)自己的目錄(用戶家目錄)五辽,當(dāng)然這個(gè)文件夾自己建
local_root=/home/ftp

#如果使用主動(dòng)模式,下面幾行可以不配置
#使用被動(dòng)模式
pasv_enable=YES
#端口設(shè)置
pasv_min_port=1024
pasv_max_port=1048
pasv_address=你的訪問(wèn)IP(服務(wù)器外網(wǎng)IP)

這里補(bǔ)充一個(gè)知識(shí)點(diǎn)關(guān)于主動(dòng)模式被動(dòng)模式外恕,F(xiàn)TP是基于TCP的服務(wù)杆逗,使用2個(gè)端口,一個(gè)數(shù)據(jù)端口和一個(gè)命令端口(也可叫做控制端口)鳞疲。通常來(lái)說(shuō)這兩個(gè)端口是21(命令端口)和20(數(shù)據(jù)端口)罪郊。但FTP工作方式的不同,數(shù)據(jù)端口并不總是20尚洽。這就是主動(dòng)與被動(dòng)FTP的最大不同之處悔橄。

  • 主動(dòng)模式:數(shù)據(jù)連接上,服務(wù)端從20端口去連接客戶端大于1024的端口
    命令連接:客戶端 (>1024端口) -> 服務(wù)器 21端口
    數(shù)據(jù)連接:客戶端 (>1024端口) <- 服務(wù)器 20端口

    優(yōu)勢(shì):主動(dòng)FTP對(duì)FTP服務(wù)器的管理有利腺毫,但對(duì)客戶端的管理不利癣疟。因?yàn)镕TP服務(wù)器企圖與客戶端的高位隨機(jī)端口建立連接,而這個(gè)端口很有可能被客戶端的防火墻阻塞掉潮酒。

  • 被動(dòng)模式:數(shù)據(jù)連接上睛挚,客戶端從大于1024端口去連接服務(wù)端大于1024的端口
    命令連接:客戶端 (>1024端口) -> 服務(wù)器 21端
    數(shù)據(jù)連接:客戶端 (>1024端口) -> 服務(wù)器 (>1024端口)

    優(yōu)勢(shì):被動(dòng)FTP對(duì)FTP客戶端的管理有利,但對(duì)服務(wù)器端的管理不利急黎。因?yàn)榭蛻舳艘c服務(wù)器端建立兩個(gè)連接扎狱,其中一個(gè)連到一個(gè)高位隨機(jī)端口,而這個(gè)端口很有可能被服務(wù)器端的防火墻阻塞掉叁熔。

3.為ftp服務(wù)器新建ftp用戶并新建ftp根目錄

新建用戶委乌,專門用于登錄ftp服務(wù)器進(jìn)行操作,并且新建配置文件中指定的ftp根目錄荣回,這里就有很多BUG了遭贸。

建立ftp根目錄

mkdir /home/ftp

建立新用戶和密碼

sudo useradd -d /home/ftp -M ftptest
sudo passwd ftptest

滿懷信心地測(cè)試一下,利用命令行連接一下心软,結(jié)果出現(xiàn)==530 login incorrect==錯(cuò)誤壕吹,解決方式如下:

sudo vim /etc/pam.d/vsftpd

注釋掉

#auth    required pam_shells.so

然后sudo service vsftpd restart重啟服務(wù)生效.

原因:
這是因?yàn)閱⒂昧诉@個(gè)模塊,只有帶有shell的用戶才能訪問(wèn)删铃,什么是帶有shell呢耳贬?你可以看一下\etc\shells文件,這里列出的就是可用的shell列表猎唁,然后你再執(zhí)行一下cat \etc\passwd咒劲,最后一行你可以看到你新添加的用戶,比對(duì)一下你可以看到新用戶沒(méi)有指定shell,因此不帶有shell腐魂,就被這個(gè)生效的模塊發(fā)好人卡了帐偎。

于是再次ftp連接一下,wtf蛔屹,結(jié)果出現(xiàn)==500 OOPS: vsftpd: refusing to run with writable root inside chroot()==削樊,解決方式:

sudo chmod a-w /home/ftp
sudo mkdir /home/ftp/data

原因:這是因?yàn)関sftpd的chroot不允許根目錄具有可寫權(quán)限,ftp根目錄下的目錄可以有寫權(quán)限兔毒,所以就只能這么解決漫贞。

連接成功進(jìn)入可以看到data目錄,并且你只能看到/home/ftp下的內(nèi)容育叁,你發(fā)現(xiàn)你所在的根目錄就是它迅脐,不可能跳到其他目錄去,很安全

4.利用vsftpd的chroot

但其實(shí)我們想讓一些用戶(如管理員級(jí)別的)可以訪問(wèn)所有目錄擂红,限制另外的只能訪問(wèn)ftp根目錄(如其他一般用戶)仪际,那么我們就需要vsftpd的chroot功能。

執(zhí)行sudo vim /etc/vsftpd.conf可以看到以下3行被注釋:

#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list

解了這3行的注釋昵骤,我們看到有指定一個(gè)用戶列表“vsftpd.chroot_list”树碱,但是這個(gè)文件初始是不存在的,我們需要自己建立变秦。

  • 如果是兩個(gè)YES(就上面那樣)成榜,那么是指,限制所有用戶蹦玫,開(kāi)放(列表中)特定赎婚,限制一切用戶,只解禁 /etc/vsftpd.chroot_list 的用戶樱溉,也即是只有這個(gè)列表中的用戶可以訪問(wèn)所有文件挣输,不在列表的只能訪問(wèn)指定目錄。

  • 如果是一個(gè)NO和一個(gè)YES福贞,那就是開(kāi)放所有撩嚼,限制特定,可指定一組用戶限制挖帘,即列表中的用戶受限完丽。

sudo vim /etc/vsftpd.chroot_list

一行一個(gè)用戶名,進(jìn)行添加拇舀,然后保存退出逻族,比如添加了我們剛才的ftptest用戶,并且設(shè)置兩個(gè)YES骄崩。

這時(shí)候你再去連接ftp時(shí)聘鳞,你會(huì)發(fā)現(xiàn)你居然能訪問(wèn)所有目錄了薄辅,為了驗(yàn)證有效性,你可以斷開(kāi)連接搁痛,再去設(shè)置chroot_local_user為NO時(shí)长搀,你會(huì)發(fā)現(xiàn),你又只能訪問(wèn)ftp目錄了鸡典。

這就是chroot的作用。

附. 通過(guò)FTP連接AWS EC2

因?yàn)槲矣玫臏y(cè)試服務(wù)器是AWS EC2枪芒,所有這里也提一下當(dāng)服務(wù)器端通過(guò)終端配置好vsftpd后如何連接AWS彻况。

打開(kāi)AWS的EC2控制臺(tái):

AWS EC2控制臺(tái)

添加自定義規(guī)則,1024-1048端口這里的配置要和vsftpd.conf文件的被動(dòng)模式配置端口一致舅踪,然后還要打開(kāi)20-21端口纽甘,否則就沒(méi)法進(jìn)行ftp連接了。

配置端口

配置好后就可以進(jìn)行ftp連接了抽碌,如果是SFTP悍赢,則需要添加ssh密鑰。

vsftpd詳細(xì)說(shuō)明參見(jiàn)這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末货徙,一起剝皮案震驚了整個(gè)濱河市左权,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痴颊,老刑警劉巖赏迟,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蠢棱,居然都是意外死亡锌杀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門泻仙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糕再,“玉大人,你說(shuō)我怎么就攤上這事玉转⊥幌耄” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵冤吨,是天一觀的道長(zhǎng)蒿柳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)漩蟆,這世上最難降的妖魔是什么垒探? 我笑而不...
    開(kāi)封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮怠李,結(jié)果婚禮上圾叼,老公的妹妹穿的比我還像新娘蛤克。我一直安慰自己,他們只是感情好夷蚊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布构挤。 她就那樣靜靜地躺著,像睡著了一般惕鼓。 火紅的嫁衣襯著肌膚如雪筋现。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天箱歧,我揣著相機(jī)與錄音矾飞,去河邊找鬼。 笑死呀邢,一個(gè)胖子當(dāng)著我的面吹牛洒沦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播价淌,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼申眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蝉衣?” 一聲冷哼從身側(cè)響起括尸,我...
    開(kāi)封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎买乃,沒(méi)想到半個(gè)月后姻氨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剪验,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年肴焊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片功戚。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娶眷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啸臀,到底是詐尸還是另有隱情届宠,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布乘粒,位于F島的核電站豌注,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灯萍。R本人自食惡果不足惜轧铁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旦棉。 院中可真熱鬧齿风,春花似錦药薯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至脸候,卻和暖如春穷娱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纪他。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工鄙煤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茶袒。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凉馆,于是被迫代替她去往敵國(guó)和親薪寓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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