注意:
- 小心防火墻和SELinux的阻攔;
- 小心FTP服務(wù)器其他配置的影響宴卖,這些配置你并不知道赖欣;
- 小心Linux系統(tǒng)本身用戶權(quán)限,文件權(quán)限的限制撞蚕;
昨天因?yàn)樵贚inux上搭建FTP服務(wù)器润梯,又整整栽進(jìn)去了一下午的時(shí)間,本來(lái)早上一直聯(lián)系開(kāi)通遠(yuǎn)程服務(wù)ssh登錄的事情甥厦。但是溝通來(lái)溝通去纺铭,最后結(jié)果還是不可用,感覺(jué)非常惱火刀疙。最終還是要自己搭建一個(gè)FTP服務(wù)器來(lái)做測(cè)試舶赔。既然,決定自己搭建FTP服務(wù)器了谦秧,就要開(kāi)始動(dòng)手干竟纳。之前遠(yuǎn)程服務(wù)器也是我自己搭建的FTP服務(wù)器,過(guò)程雖然也是很曲折疚鲤,但是好歹也是程工了锥累。有了上次的經(jīng)驗(yàn),我就覺(jué)得應(yīng)該沒(méi)什么問(wèn)題石咬。但是,沒(méi)想到還是陰溝里翻了船卖哎。在搭建的過(guò)程中鬼悠,遇到了很多很多在我看來(lái)熟悉而又陌生的問(wèn)題,這些問(wèn)題曾經(jīng)遇到過(guò)亏娜,但是著手解決的時(shí)候焕窝,還是丈二和尚摸不著頭腦,完全是一頭霧水维贺,就是在瞎鼓搗它掂,上網(wǎng)查資料,自己根據(jù)僅有的印象瞎配置一通溯泣。耗到晚上8,9點(diǎn)依然沒(méi)有成功虐秋。就說(shuō)明一個(gè)問(wèn)題:
- 之前的那次完全就是瞎貓碰找了死耗子,撞了大運(yùn)垃沦,還以為自己啥都懂了客给。
- 做完之后,沒(méi)有做一個(gè)復(fù)盤(pán)總結(jié)肢簿,完成了就扔到一邊去靶剑。
吸取了之前的教訓(xùn)蜻拨,就不得不在這里做一個(gè)復(fù)盤(pán)。以防下一次在同樣的地方栽跟頭桩引。那到時(shí)候就只能說(shuō)明自己是在是愚蠢與活該了缎讼。
正文
1. 啥是FTP服務(wù)器
FTP是一個(gè)協(xié)議,就像HTTP協(xié)議一樣坑匠,也是為了網(wǎng)絡(luò)連通交互血崭。FTP就是要完成遠(yuǎn)程的上傳下載這么個(gè)功能。在Linux好像本身就有個(gè)Sftp的服務(wù)笛辟。我沒(méi)有用功氨,因?yàn)閺木W(wǎng)上抄的話,這方面的資料太少手幢,不好抄捷凄。可能也有其他類似的服務(wù)吧围来,實(shí)在沒(méi)工夫去尋根問(wèn)底了跺涤。我就用流行的vsftp。
注意:說(shuō)上面一段廢話是有目的的监透。第一個(gè)linux中本身就有sftp服務(wù)桶错,意思就是這個(gè)玩意兒和linux深度集成的,這是不同于其他的服務(wù)胀蛮,要有這個(gè)認(rèn)識(shí)院刁,我們才能夠理解他的好多配置文件本身就在系統(tǒng)之中,然后粪狼,他使用的登錄賬戶本身就是linux系統(tǒng)的賬戶退腥。這一點(diǎn),我剛開(kāi)始做的時(shí)候再榄,就沒(méi)有理解狡刘,總認(rèn)為vsftp本身要去哪里配置登錄用戶信息,其實(shí)困鸥,根本不用嗅蔬。直接創(chuàng)建系統(tǒng)用戶就可以了。
2.安裝FTP客戶端
之前測(cè)試ftp服務(wù)是否正常運(yùn)行疾就,我都用谷歌瀏覽器澜术,或者windows的文件資源管理器,來(lái)輸入ftp協(xié)議路徑猬腰。
但是呢瘪板,谷歌瀏覽器總是不成功,后來(lái)發(fā)現(xiàn)是在版本80以后漆诽,不再支持了侮攀。這是我踩的一個(gè)大坑啊锣枝。windows的文件資源管理器也有詭異的地方,就是有緩存兰英,往往還莫名其妙的連接失敗撇叁,報(bào)一些不知所云的錯(cuò)誤,讓人大為光火畦贸。所以陨闹,在爬坑的過(guò)程中,找到了一個(gè)國(guó)人做的ftp客戶端FileZilla薄坏。還是很好用的趋厉。本身ftp協(xié)議慢慢的要被淘汰,被很多人所嫌棄胶坠,為此做服務(wù)的就變少了君账。
每次踩坑之后,復(fù)盤(pán)發(fā)現(xiàn)沈善,這些所謂的坑不過(guò)是自己相關(guān)知識(shí)塊的短缺造成的乡数,在相關(guān)知識(shí)領(lǐng)域的人來(lái)說(shuō),這都是司空見(jiàn)慣的闻牡,如果我專注于研究谷歌瀏覽器版本差異净赴,那么不再支持ftp協(xié)議,不就是一條很簡(jiǎn)單的信息嘛罩润。但是玖翅,不知道的人,會(huì)為此付出很多的代價(jià)割以。咋樣才能做到不踩坑呢金度。其實(shí),就是我們?cè)谕瓿梢粋€(gè)功能的時(shí)候拳球,首先要意識(shí)到這個(gè)任務(wù)涉及到龐雜的知識(shí)塊审姓,很多知識(shí)塊又是不言自明的珍特。我們執(zhí)著于把每個(gè)知識(shí)塊都搞懂是不可能的祝峻,所以,就要有撞了南墻快回頭的本領(lǐng)扎筒。我總是執(zhí)著于一些挫敗莱找,非要搞個(gè)水落石出,最終的結(jié)果就是魚(yú)死網(wǎng)破嗜桌。
FileZilla這個(gè)ftp客戶端軟件安裝簡(jiǎn)單奥溺,在這里就不多贅述了。
2. 安裝vsftp服務(wù)器
- 查看系統(tǒng)中是否安裝了vsftp
rpm -qa|grep vsftpd
- 安裝vsftpd
yum install -y vsftpd
- 進(jìn)入vsftp配置文件目錄
cd /etc/vsftpd/
- 創(chuàng)建vsftp配置備份文件
mv vsftpd.conf vsftpd.conf_bak
- 創(chuàng)建vsftp刪掉#注釋的配置文件
cat vsftpd.conf_bak |grep -v "#" > vsftpd.conf
關(guān)閉防火墻和SELinux
這是慣用套路了骨宠,每次有服務(wù)需要從外部網(wǎng)絡(luò)請(qǐng)求的時(shí)候浮定,我們都要事先檢查這兩個(gè)服務(wù)的情況相满,否則也是栽坑不斷啊。
- 關(guān)閉防火墻
firewall-cmd --state
systemctl stop firewalld.service
#暫時(shí)關(guān)閉
systemctl disable firewalld.service
#永久關(guān)閉 - 關(guān)閉SELinux
getenforce
setenforce 0
#暫時(shí)關(guān)閉
vim /etc/selinux/config
#永久關(guān)閉
3. 配置匿名登錄
上面桦卒,我們把準(zhǔn)備工作都做足了立美,下面,我們開(kāi)始實(shí)現(xiàn)第一種情況:配置匿名用戶訪問(wèn)ftp服務(wù)方灾。
- vsftpd.conf配置如下
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
這段配置了就加了極端關(guān)于匿名用戶權(quán)限的配置建蹄,注意哪些anon開(kāi)頭的配置項(xiàng)。
注意:在用vim打開(kāi)文件的時(shí)候裕偿,竟然沒(méi)有vim洞慎。一個(gè)小插曲,我用如下命令解決:
yum install -y install vim*
- 重啟ftp服務(wù)
service vsftpd restart
- 測(cè)試連接ftp服務(wù)
我們使用FileZilla客戶端工具來(lái)連接ftp服務(wù)嘿棘,發(fā)現(xiàn)正常劲腿,直接進(jìn)入的是/var/ftp
這個(gè)匿名用戶默認(rèn)的文件夾。
但是蔫巩,我們要?jiǎng)?chuàng)建目錄的時(shí)候谆棱,是失敗的。為啥捏圆仔?那是因?yàn)槲覀兣渲梦募m然開(kāi)啟了權(quán)限垃瞧,但是linux系統(tǒng)文件夾是沒(méi)有給我們匿名用戶操作的權(quán)限的,那我們就來(lái)授權(quán):
chmod 777 /var/ftp/pub/
經(jīng)過(guò)上面的一系列的騷操作坪郭,我們就實(shí)現(xiàn)了匿名用戶登錄的功能了个从。
4.配置本地用戶登錄
我們實(shí)際使用的過(guò)程中,當(dāng)然不是簡(jiǎn)單的匿名登錄這么簡(jiǎn)單了歪沃,必須要使用賬戶才可以登錄嗦锐。而這里的本地用戶登錄,就是我們?cè)俚卿涍B接ftp服務(wù)的過(guò)程中沪曙,使用的賬戶是linux系統(tǒng)的本地用戶奕污,這兩個(gè)用戶是用的一套賬戶,就是linux的賬戶系統(tǒng)液走。
- 修改vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
關(guān)注上面的配置碳默,我們把關(guān)于匿名的權(quán)限刪除,并不允許匿名登錄缘眶。就這樣嘱根?是的。
- 刪除ftpusers配置文件中相關(guān)登錄用戶名稱
- 刪除user_list配置文件中相關(guān)登錄用戶名稱
比如巷懈,我們打算用root用戶登錄该抒,那就把root這個(gè)名稱刪掉。
注意:每次修改配置文件顶燕,都要重啟ftp服務(wù)凑保。
使用root用戶登錄操作ftp冈爹,風(fēng)險(xiǎn)很大。我們可以創(chuàng)建一個(gè)專門(mén)的用戶來(lái)操作ftp欧引。
- 創(chuàng)建一個(gè)用戶犯助,這個(gè)用戶不能登錄系統(tǒng)。
useradd -s /sbin/nologin zhangsan
坑點(diǎn):如果發(fā)現(xiàn)使用
不能登錄系統(tǒng)的用戶
登錄時(shí)報(bào)錯(cuò)维咸,那么就是vsftpd過(guò)度驗(yàn)證導(dǎo)致的剂买。需要修改/etc/pam.d/vsftp里的配置,注釋掉#auth required pam_shells.so
感悟:照著視屏操作癌蓖,依舊是坑點(diǎn)不斷瞬哼。無(wú)法躲避啊。
收尾
通過(guò)上面的一系列的騷操作租副,我們完成ftp服務(wù)的部署坐慰。但是,就因此有了很大的成長(zhǎng)了嗎用僧?沒(méi)有结胀,我還是照葫蘆畫(huà)瓢。這也不是我的獨(dú)創(chuàng)责循。我只能說(shuō)點(diǎn)我的體會(huì)糟港。上手安裝一個(gè)服務(wù),我遇到的困境:
- 我本身對(duì)于linux環(huán)境不熟悉院仿,那么在操作的時(shí)候難免就會(huì)很心虛秸抚。不信任我輸入的每一條命令。所以歹垫,這個(gè)對(duì)linux的學(xué)習(xí)還要加強(qiáng)剥汤。
- 對(duì)于vsftp這個(gè)服務(wù),我也是完全不熟悉排惨,在看很多的人文章中吭敢,很多人也是不了解的。對(duì)匿名用戶的配置應(yīng)該怎么樣配置暮芭;對(duì)于登錄用戶的配置鹿驼,要修改哪些,刪除哪些谴麦,就沒(méi)有人提到過(guò)蠢沿;在客戶端操作文件夾的時(shí)候伸头,權(quán)限的問(wèn)題匾效,也沒(méi)有人提。這里有些是關(guān)于linux系統(tǒng)需要進(jìn)一步配置恤磷,有些還是要對(duì)vsftp服務(wù)本身要進(jìn)一步配置面哼。當(dāng)二者交叉結(jié)合的時(shí)候野宜,我更是懵逼了。
回過(guò)頭去看網(wǎng)絡(luò)上的文章魔策,真是令人作嘔匈子,不知所云,連這個(gè)簡(jiǎn)單的需求都講不清楚闯袒,云山霧罩的虎敦。
本來(lái)想去官網(wǎng)看看的,但是官網(wǎng)還被粉刷打不開(kāi)政敢。哎其徙。。喷户。
轉(zhuǎn)頭在內(nèi)網(wǎng)尋找唾那,也都是二道販子的文章。這不就陷入了兩難的絕境了嘛褪尝。
但是闹获,這也說(shuō)明一個(gè)問(wèn)題,這個(gè)事情應(yīng)該是太簡(jiǎn)單河哑,沒(méi)什么可說(shuō)的避诽。所以,還是要冷靜下來(lái)璃谨,分析問(wèn)題茎用,才能夠解決問(wèn)題。
附錄
- 將所有用戶禁錮在自己的家目錄下
chroot_local_user=YES
-
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot 錯(cuò)誤解決方法
從2.3.5之后睬罗,vsftpd增強(qiáng)了安全檢查轨功,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫(xiě)權(quán)限了容达!如果檢查發(fā)現(xiàn)還有寫(xiě)權(quán)限古涧,就會(huì)報(bào)該錯(cuò)誤。
https://blog.csdn.net/u013632755/article/details/83717695 - 開(kāi)啟某些用戶隨意切換目錄花盐,指定配置這些用戶配置文件的位置
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list