CentOS 配置 vsftpd 搭建 ftp 服務(wù)

需求:

要在公司內(nèi)網(wǎng)搭建一個 ftp 服務(wù),基本滿足以下場景即可:

  • 研發(fā)同學(xué)可以使用自己的賬號上傳/下載文件到各自的 home 目錄
  • 大家都可以將某些文件放在某個公共目錄,所有人都可以免密碼通過 ftp 協(xié)議在瀏覽器查看這些公共目錄及其中的文件.

第二個需求主要是為了方便美工妹妹: 美工可以登錄自己的ftp賬號上傳原型圖,切圖等文件,然后將 ftp 協(xié)議的 url 發(fā)給研發(fā)同學(xué)們. 研發(fā)同學(xué)可以在瀏覽器打開這個 url,或者使用 ftp 軟件查看,但不能修改其中的內(nèi)容.

另1: 美工妹妹用了 Marketch 這個東西做原型,可以把原型做成網(wǎng)頁,可以直接在原型圖上下載切圖,配合瀏覽器使用,還是很方便的.
另2: 公司內(nèi)網(wǎng)服務(wù)器安裝了 CentOs 6.5

搭建:

大家各自訪問各自的 home 目錄容易實(shí)現(xiàn),網(wǎng)上很多配置vsftp的文章,這里不再贅述.

公共目錄的建立也容易,就是修改 /etc/vsftpd/vsftpd.conf 設(shè)置匿名用戶訪問有只讀權(quán)限即可.

所有實(shí)名用戶都可以往公共目錄仍東西,是受網(wǎng)上某篇大牛的文章啟發(fā),在每個人的 home 目錄下,建立一個 ftp_public 目錄,并用 mount --bind 命令將公共目錄綁定到大家的這個目錄下.

mount --bind /ftp_public /home/user/ftp_public

這樣就可以實(shí)現(xiàn)第二個需求了.再利用 linux 權(quán)限管理,就可以實(shí)現(xiàn)公共目錄中的各種文件權(quán)限設(shè)置了.

因?yàn)檫@個策略隨時會有調(diào)整,因此并沒有把掛載信息寫進(jìn) fstab 里面去.寫了個腳本,每次開機(jī)的時候執(zhí)行下就可以了:

#!/bin/bash

#       AUTHOR : liuxu
#       DATE   : 2016-11-23
#       mount public ftp directory for each developer

FTP_DIR=/ftp_public
FTP_DIR_NAME=ftp_public

if [ $UID -ne 0 ]; then
    echo "only root can run this script"
else
    # 這里執(zhí)行了一個外部腳本,將用戶賬號列表導(dǎo)入進(jìn)來.
    # 這樣做是為了將腳本與人員配置分開.
    source developer_list
    for u in ${DEVELOPERS[@]}; do
        if [ -d /home/$u ]; then
            echo "setup public ftp dir for $u"
            d=/home/$u/$FTP_DIR_NAME;
            if [ ! -d $d ]; then
                mkdir $d
                # 因?yàn)槭怯?root 等賬戶運(yùn)行該腳本,因此需要把目錄權(quán)限改成各個賬號的
                # 開發(fā)賬號都在一個叫 techops 的組里,因此把屬主也改了,便于后續(xù)管理
                chown "$u:techops" $d
            fi  
            mount --bind $FTP_DIR $d
        else
            echo "setup public ftp dir for $u, home dir not found"
        fi  
    done
fi

# 下面這兩句后面會有介紹的,都與 selinux 的權(quán)限有關(guān)
setsebool allow_ftpd_full_access on
chcon -R -t public_content_t /ftp_public

人員配置信息被放在了另外的文件,目的是將配置和羅輯分開. 配置文件如下:

#!/bin/bash
#       AUTHOR : liuxu
#       DATE   : 2016-11-23

DEVELOPERS=(\
    JonSnow\
    RobStark\
    SansaStark\
    AryaStark\
    BrandonStark\
    RickonStark\
    JaimeLannister\
    TyrionLannister\
    CeiseLannister\
)

當(dāng)然我可以這么做是因?yàn)橛脩舨欢?所以沒有開啟 vsftpd 虛擬用戶功能.
如果開啟的虛擬用戶,還要建立公共目錄,就沒再繼續(xù)研究了.

但是:

豈能盡如人意...似乎沒有啥東西能一帆風(fēng)順的搞下來.(好吧,其實(shí)是好搞的大家記不住).
主要是各種權(quán)限問題.一開始看 vsftpd 配置文件沒錯,沒有頭緒.后來查到,奇怪的權(quán)限問題,多半是 SeLinux 的設(shè)置問題導(dǎo)致的.
網(wǎng)上有說直接關(guān)掉 SeLinux 的,一了百了.其實(shí)在我的使用場景上也是可以這么做的.因?yàn)楣拘?人少,又是內(nèi)網(wǎng),關(guān)了完全沒問題.
但作為一個文(zhuang)藝(bi)程序員,怎么能干這么不優(yōu)雅的事情呢.還是要動手解決.

權(quán)限問題:

遇到了很多權(quán)限問題,當(dāng)時沒有記錄下來,大體有

  • "550 Permission Deny" 問題
  • 瀏覽器不能列出公共目錄問題
  • 文件瀏覽器 (both windows and ubuntu) 不能瀏覽ftp目錄問題

因?yàn)橛龅絾栴}時沒有記錄,沒法分條寫下解決方案.但其實(shí)套路就是:

  1. 查看 /etc/vsftpd/vsftpd.conf 相關(guān)配置是否正確
  2. 打開默認(rèn)關(guān)閉的 SeLinux 相關(guān)選項(xiàng)
  3. 用戶登錄問題可能需要修改 PAM: /etc/pam.d/vsftpd . 因?yàn)闆]遇到類似問題,因此沒深入了解.

vsftpd 的配置方法網(wǎng)上鋪天蓋地,不贅述.
ftp 與 SeLinux 相關(guān)的內(nèi)容,個人覺得網(wǎng)上各位的敘述太雜亂了.不過這也沒辦法,大家遇到的問題各自不一樣,各自的環(huán)境也不一樣.
但其實(shí),沒必要那么麻煩遇到每個 SeLinux 相關(guān)問題都去網(wǎng)上找的.自己看看相關(guān)配置,很快就可以搞定的.

首先查看與 ftp 相關(guān)的選項(xiàng):

$ getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off

然后... 自己挨個查查每個選項(xiàng)的意思吧,然后試試,看看把哪個選項(xiàng)打開能解決自己的問題.
其實(shí)看著這些字段名,再稍微搜索下,各種權(quán)限問題就都可以很快解決的.

$ setsebool ftpd_use_passive_mode on
$ setsebool allow_ftpd_full_access on

配置防火墻端口問題:

主動模式下配置 iptables 開啟 20 及 21 端口即可:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT</pre>

被動模式下需要開一個端口號段:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7500:7600 -j ACCEPT</pre>

這段打算用到時再研究, 內(nèi)網(wǎng)安全不重要, 先保證能用就成.

公共目錄配置 SeLinux 權(quán)限問題:

然后就是遇到了一個怎么搜索都沒搜到解決辦法的問題:
某次服務(wù)器重啟后,無論實(shí)名還是匿名訪問公共目錄,目錄下的目錄可以顯示,但目錄下的文件都顯示不出來了.訪問其他目錄都正常.

各種地方都搜了,都沒有搜到有人碰到類似問題. 后來自己嘗試調(diào)了下上文列出的 SeLinux 參數(shù),實(shí)名用戶倒是可以正常訪問公共目錄了. 但匿名用戶依然有問題.
再后來,因?yàn)椴榱硪粋€問題,去了 redhat 官網(wǎng),順便搜了下這個問題. 這才解決掉.
其實(shí)就是執(zhí)行下面這句:

chcon -R -t public_content_t /ftp_public</pre>

chcon 用于修改某對象的安全上下文. 上面那句就是說,設(shè)置要把某目錄對匿名用戶 (nobody) 開放. 這還是 SeLinux 的相關(guān)設(shè)置.
但為什么 ftp 公共目錄在重啟服務(wù)器前是可以正常訪問的,我就不知道了. 有空還得詳細(xì)的研究下 SeLinux .

總結(jié):

上面遇到的全部問題,在 redhat 官網(wǎng)的這份文檔中都已經(jīng)給予解答了,只是我們總是想找快餐式答案,忽略了這些根基性的優(yōu)質(zhì)文檔.
建議各位想要在 CentOS 上搭建 vsftp, 之前又沒有經(jīng)驗(yàn)的同學(xué),先把這篇文檔讀通,多數(shù)問題就都知道怎么辦了. 文檔地址如下:
vsftpd deploy guide

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末她紫,一起剝皮案震驚了整個濱河市既绩,隨后出現(xiàn)的幾起案子油啤,更是在濱河造成了極大的恐慌突想,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谒兄,死亡現(xiàn)場離奇詭異徘郭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凄贩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袱讹,“玉大人疲扎,你說我怎么就攤上這事〗莸瘢” “怎么了椒丧?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長救巷。 經(jīng)常有香客問我壶熏,道長,這世上最難降的妖魔是什么浦译? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任棒假,我火速辦了婚禮,結(jié)果婚禮上精盅,老公的妹妹穿的比我還像新娘帽哑。我一直安慰自己,他們只是感情好叹俏,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布妻枕。 她就那樣靜靜地躺著,像睡著了一般粘驰。 火紅的嫁衣襯著肌膚如雪屡谐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天蝌数,我揣著相機(jī)與錄音愕掏,去河邊找鬼。 笑死顶伞,一個胖子當(dāng)著我的面吹牛饵撑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播枝哄,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼肄梨,長吁一口氣:“原來是場噩夢啊……” “哼阻荒!你這毒婦竟也來了挠锥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侨赡,失蹤者是張志新(化名)和其女友劉穎蓖租,沒想到半個月后粱侣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蓖宦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年齐婴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稠茂。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡柠偶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睬关,到底是詐尸還是另有隱情诱担,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布电爹,位于F島的核電站蔫仙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丐箩。R本人自食惡果不足惜摇邦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屎勘。 院中可真熱鬧施籍,春花似錦、人聲如沸挑秉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犀概。三九已至立哑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姻灶,已是汗流浹背铛绰。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留产喉,地道東北人捂掰。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像曾沈,于是被迫代替她去往敵國和親这嚣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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