本文由ilanniweb提供友情贊助,首發(fā)于爛泥行天下
想要獲得更多的文章,可以關(guān)注我微信ilanniweb。
以前搭建vsftpd都是在centos下,本以為在Ubuntu按照以前的步驟搭建即可。可是實(shí)際情況告訴我是,我太想當(dāng)然了。經(jīng)過(guò)一番的折騰終于把ubuntu下vsftpd虛擬用戶的配置搞定了,下面就把我的配置步驟貼出來(lái)供得為參考。
一、業(yè)務(wù)要求
現(xiàn)在要求創(chuàng)建一個(gè)FTP賬號(hào)ailanni,該賬號(hào)只能登錄到/www目錄下,不能切換到上級(jí)目錄。同時(shí)處于安全考慮還要求該賬號(hào)上傳的文件權(quán)限為644,即上傳的文件具有可讀可寫權(quán)限,但是沒(méi)有可執(zhí)行權(quán)限。
除此之外還要求該用戶不能是系統(tǒng)用戶,即使用vsftpd的虛擬用戶。
要求看起來(lái)比較簡(jiǎn)單,下面我們開(kāi)始進(jìn)行配置。
PS:以下實(shí)驗(yàn)全部在ubuntu server 14.04 X64上進(jìn)行。有關(guān)centos的操作可以參考這篇文章《爛泥:Vsftpd使用虛擬用戶,訪問(wèn)FTP》。
二、vsftpd安裝
在配置vsftpd之前,我們先安裝vsftpd,vsftpd的安裝比較簡(jiǎn)單。我們?cè)俅沃苯邮褂胊pt-get進(jìn)行安裝,如下:
sudo apt-get -y install vsftpd
vsftpd的安裝很簡(jiǎn)單,我們現(xiàn)在來(lái)查看下vsftpd都安裝了那些文件。如下:
dpkg -L vsftpd |tac
通過(guò)上圖,我們可以看出vsftpd在安裝時(shí),生成了很多文件,其中/etc/init/vsftpd.conf、/etc/vsftpd.conf比較重要。
/etc/init/vsftpd.conf是vsftpd的初始化文件,而/etc/vsftpd.conf是vsftpd的配置文件。
現(xiàn)在我們來(lái)查看下/etc/init/vsftpd.conf文件。如下:
cat /etc/init/vsftpd.conf
通過(guò)上圖,我們可以很明顯的看出vsftpd初始化時(shí)使用的配置文件就是/etc/vsftpd.conf文件。
為什么在此我要指出這一點(diǎn)呢?是因?yàn)槲以詾閡buntu下vsftpd和centos下的一樣,可以把vsftpd的配置文件存放到/etc/vsftpd/目錄下。這一點(diǎn)是和centos不同的。
除此之外,還有一點(diǎn)不同,就是vsftpd的啟動(dòng)、停止、重啟腳本。
在ubuntu下要啟動(dòng)、停止、重啟vsftpd,我們必須使用以下命令:
sudo service vsftpd stop
sudo service vsftpd start
sudo service vsftpd restart
而在centos下,我們可以使用以下命令:
service vsftpd stop
/etc/init.d/vsftpd stop
最后,我們?cè)賮?lái)查看下vsftpd的服務(wù)腳本。如下:
cat /lib/systemd/system/vsftpd.service
三、vsftpd配置
vsftpd安裝完畢后,我們現(xiàn)在開(kāi)始配置vsftpd,不過(guò)在正式配置之前,我們還有幾步工作要做。
3.1 用戶相關(guān)配置
因?yàn)槭鞘褂胿sftpd的虛擬用戶,所以我們需要先在系統(tǒng)中創(chuàng)建一個(gè)用戶,并且該用戶對(duì)/www目錄具有可讀可寫可執(zhí)行權(quán)限。
創(chuàng)建用戶,如下:
sudo useradd -m -s /bin/bash ftpilanni
cat /etc/passwd |grep ftpilanni
注意:創(chuàng)建的用戶ftpilanni現(xiàn)在是無(wú)法登錄到系統(tǒng)的,因?yàn)闆](méi)有給該用戶設(shè)置密碼。在此,我們也無(wú)需ftpilanni登錄到系統(tǒng),這樣相對(duì)來(lái)說(shuō)比較安全。
用戶創(chuàng)建完畢后,我們來(lái)創(chuàng)建對(duì)應(yīng)的目錄并修改其所屬用戶,如下:
sudo mkdir /www
sudo chown -R ftpilanni:ftpilanni /www/
有關(guān)用戶相關(guān)配置結(jié)束后,我們開(kāi)始設(shè)置登錄vsftp的用戶與密碼文件login.txt。如下:
sudo mkdir /etc/vsftpd/
sudo vim /etc/vsftpd/login.txt
ailanni
ailannipassWord
login.txt為登錄vsftpd的用戶與密碼文件。
login.txt設(shè)置完畢后,我們要使用db_load進(jìn)行加密。而db_load需要db-util這個(gè)軟件。所以需要我們現(xiàn)在安裝db-util,如下:
sudo apt-get -y install db-util
db-util安裝完畢后,現(xiàn)在開(kāi)始使用db_load對(duì)loginx.txt進(jìn)行加密。如下:
sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
loginx.txt加密完成后,我們現(xiàn)在開(kāi)始配置vsftpd的PAM驗(yàn)證。
3.2 PAM驗(yàn)證配置
vsftpd的PAM驗(yàn)證,在此我沒(méi)有使用vsftpd安裝時(shí)所生成的/etc/pam.d/vsftpd文件。
因?yàn)榻?jīng)過(guò)我多次的測(cè)試,發(fā)現(xiàn)如果使用該文件進(jìn)行驗(yàn)證的話,無(wú)法驗(yàn)證通過(guò)。不知道為什么,猜想很有可能是vsftpd的一個(gè)BUG。
創(chuàng)建驗(yàn)證文件,如下:
sudo vim /etc/pam.d/vsftpd.virtual
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
vsftpd.virtual文件的內(nèi)容,也可以根據(jù)OS的版本進(jìn)行調(diào)整。我現(xiàn)在使用的是ubuntu x64,所以也可以填寫為:
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
其中/etc/vsftpd/login對(duì)應(yīng)/etc/vsftpd/login.db文件
3.3 vsftp權(quán)限配置
現(xiàn)在正式配置vsftpd,vsftpd的幾乎所有配置項(xiàng)都在/etc/vsftpd.conf文件中進(jìn)行。
根據(jù)業(yè)務(wù)要求vsftpd.conf配置內(nèi)容如下:
grep -vE "^#|^$" /etc/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_PRivate_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
在以上配置文件中,有幾點(diǎn)需要重點(diǎn)指出。
local_enable=YES
write_enable=YES
local_umask=022
這兩項(xiàng)是啟用系統(tǒng)用戶的寫權(quán)限。特別是write_enable=YES項(xiàng)一定要啟用,否則vsftpd虛擬用戶將無(wú)法登錄vsftpd。
為什么會(huì)是這樣?因?yàn)樘摂M用戶依賴與系統(tǒng)用戶。
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
這三項(xiàng)是配置vsftpd用戶禁止切換上級(jí)目錄的權(quán)限。
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
這三項(xiàng)是啟用vsftpd虛擬用以及虛擬用戶賬號(hào)配置目錄。
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
這三項(xiàng)是啟用vsftpd被動(dòng)模式及相關(guān)端口。
3.4 虛擬用戶相關(guān)配置
vsftpd配置文件修改文件后,現(xiàn)在開(kāi)始配置虛擬用戶的相關(guān)權(quán)限。如下:
sudo mkdir /etc/vsftpd/vu
sudo vim /etc/vsftpd/vu/ailanni
guest_username=ftpilanni
local_root=/www/
virtual_use_local_privs=YES
anon_umask=133
以上配置參數(shù),其中g(shù)uest_username=ftpilanni表示的是設(shè)置FTP對(duì)應(yīng)的系統(tǒng)用戶為ftpilanni
local_root=/www/表示使用本地用戶登錄到ftp時(shí)的默認(rèn)目錄。
virtual_use_local_privs=YES虛擬用戶和本地用戶有相同的權(quán)限。
anon_umask表示文件上傳的默認(rèn)掩碼。計(jì)算方式是777減去anon_umask就是上傳文件的權(quán)限。在此我們?cè)O(shè)置的是133,也就是說(shuō)上傳后文件的權(quán)限是644。即上傳的文件對(duì)所屬用戶來(lái)說(shuō)只有讀寫權(quán)限,沒(méi)有執(zhí)行權(quán)限。
以上全部配置完畢后,我們來(lái)重啟vsftpd,如下:
sudo service vsftpd restart
四、測(cè)試
現(xiàn)在我們來(lái)使用ailanni用戶登錄vsftpd進(jìn)行測(cè)試。
通過(guò)以上兩張圖,我們可以很明顯的看到vsftpd的配置已經(jīng)達(dá)到了業(yè)務(wù)的要求。
五、IPtables配置
在實(shí)際生產(chǎn)環(huán)境中,為了安全起見(jiàn),我們一般是開(kāi)啟防火墻的。
在ubuntu上,我們也可以使用IPtables來(lái)進(jìn)行防護(hù)。
IPtables配置如下:
sudo iptables-save >/home/ilanni/iptables.rule
sudo iptables-restore < /home/ilanni/iptables.rule
sudo iptables -nL
sudo vim /etc/network/interfaces
pre-up iptables-restore < /home/ilanni/iptables.rule
post-down iptables-save < /home/ilanni/iptables.rule
新聞熱點(diǎn)
疑難解答
圖片精選