爛泥:ubuntu下vsftpd虛擬用戶配置


本文由ilanniweb提供友情贊助,首發爛泥行天下

想要獲得更多的文章,可以關注我微信ilanniweb。

以前搭建vsftpd都是在centos下,本以為在ubuntu按照以前的步驟搭建即可。可是實際情況告訴我是,我太想當然了。經過一番的折騰終於把ubuntu下vsftpd虛擬用戶的配置搞定了,下面就把我的配置步驟貼出來供得為參考。

一、業務要求

現在要求創建一個FTP賬號ailanni,該賬號只能登錄到/www目錄下,不能切換到上級目錄。同時處於安全考慮還要求該賬號上傳的文件權限為644,即上傳的文件具有可讀可寫權限,但是沒有可執行權限。

除此之外還要求該用戶不能是系統用戶,即使用vsftpd的虛擬用戶。

要求看起來比較簡單,下面我們開始進行配置。

PS:以下實驗全部在ubuntu server 14.04 X64上進行。有關centos的操作可以參考這篇文章《爛泥:Vsftpd使用虛擬用戶,訪問FTP》。

二、vsftpd安裝

在配置vsftpd之前,我們先安裝vsftpd,vsftpd的安裝比較簡單。我們再次直接使用apt-get進行安裝,如下:

sudo apt-get -y install vsftpd

clip_image002

vsftpd的安裝很簡單,我們現在來查看下vsftpd都安裝了那些文件。如下:

dpkg -L vsftpd |tac

clip_image003

通過上圖,我們可以看出vsftpd在安裝時,生成了很多文件,其中/etc/init/vsftpd.conf、/etc/vsftpd.conf比較重要。

/etc/init/vsftpd.conf是vsftpd的初始化文件,而/etc/vsftpd.conf是vsftpd的配置文件。

現在我們來查看下/etc/init/vsftpd.conf文件。如下:

cat /etc/init/vsftpd.conf

clip_image004

通過上圖,我們可以很明顯的看出vsftpd初始化時使用的配置文件就是/etc/vsftpd.conf文件。

為什么在此我要指出這一點呢?是因為我原以為ubuntu下vsftpd和centos下的一樣,可以把vsftpd的配置文件存放到/etc/vsftpd/目錄下。這一點是和centos不同的。

除此之外,還有一點不同,就是vsftpd的啟動、停止、重啟腳本。

在ubuntu下要啟動、停止、重啟vsftpd,我們必須使用以下命令:

sudo service vsftpd stop

sudo service vsftpd start

sudo service vsftpd restart

而在centos下,我們可以使用以下命令:

service vsftpd stop

/etc/init.d/vsftpd stop

最后,我們再來查看下vsftpd的服務腳本。如下:

cat /lib/systemd/system/vsftpd.service

clip_image005

三、vsftpd配置

vsftpd安裝完畢后,我們現在開始配置vsftpd,不過在正式配置之前,我們還有幾步工作要做。

3.1 用戶相關配置

因為是使用vsftpd的虛擬用戶,所以我們需要先在系統中創建一個用戶,並且該用戶對/www目錄具有可讀可寫可執行權限。

創建用戶,如下:

sudo useradd -m -s /bin/bash ftpilanni

cat /etc/passwd |grep ftpilanni

clip_image006

注意:創建的用戶ftpilanni現在是無法登錄到系統的,因為沒有給該用戶設置密碼。在此,我們也無需ftpilanni登錄到系統,這樣相對來說比較安全。

用戶創建完畢后,我們來創建對應的目錄並修改其所屬用戶,如下:

sudo mkdir /www

sudo chown -R ftpilanni:ftpilanni /www/

clip_image007

有關用戶相關配置結束后,我們開始設置登錄vsftp的用戶與密碼文件login.txt。如下:

sudo mkdir /etc/vsftpd/

sudo vim /etc/vsftpd/login.txt

ailanni

ailannipassword

clip_image008

login.txt為登錄vsftpd的用戶與密碼文件。

login.txt設置完畢后,我們要使用db_load進行加密。而db_load需要db-util這個軟件。所以需要我們現在安裝db-util,如下:

sudo apt-get -y install db-util

clip_image009

db-util安裝完畢后,現在開始使用db_load對loginx.txt進行加密。如下:

sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

clip_image010

loginx.txt加密完成后,我們現在開始配置vsftpd的PAM驗證。

3.2 PAM驗證配置

vsftpd的PAM驗證,在此我沒有使用vsftpd安裝時所生成的/etc/pam.d/vsftpd文件。

因為經過我多次的測試,發現如果使用該文件進行驗證的話,無法驗證通過。不知道為什么,猜想很有可能是vsftpd的一個BUG。

創建驗證文件,如下:

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

clip_image011

vsftpd.virtual文件的內容,也可以根據OS的版本進行調整。我現在使用的是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對應/etc/vsftpd/login.db文件

3.3 vsftp權限配置

現在正式配置vsftpd,vsftpd的幾乎所有配置項都在/etc/vsftpd.conf文件中進行。

根據業務要求vsftpd.conf配置內容如下:

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

clip_image012

在以上配置文件中,有幾點需要重點指出。

local_enable=YES

write_enable=YES

local_umask=022

這兩項是啟用系統用戶的寫權限。特別是write_enable=YES項一定要啟用,否則vsftpd虛擬用戶將無法登錄vsftpd。

為什么會是這樣?因為虛擬用戶依賴與系統用戶。

chroot_local_user=YES

chroot_list_enable=NO

allow_writeable_chroot=YES

這三項是配置vsftpd用戶禁止切換上級目錄的權限。

guest_enable=YES

pam_service_name=vsftpd.virtual

user_config_dir=/etc/vsftpd/vu

這三項是啟用vsftpd虛擬用以及虛擬用戶賬號配置目錄。

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=31000

這三項是啟用vsftpd被動模式及相關端口。

3.4 虛擬用戶相關配置

vsftpd配置文件修改文件后,現在開始配置虛擬用戶的相關權限。如下:

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

clip_image013

以上配置參數,其中guest_username=ftpilanni表示的是設置FTP對應的系統用戶為ftpilanni

local_root=/www/表示使用本地用戶登錄到ftp時的默認目錄。

virtual_use_local_privs=YES虛擬用戶和本地用戶有相同的權限。

anon_umask表示文件上傳的默認掩碼。計算方式是777減去anon_umask就是上傳文件的權限。在此我們設置的是133,也就是說上傳后文件的權限是644。即上傳的文件對所屬用戶來說只有讀寫權限,沒有執行權限。

以上全部配置完畢后,我們來重啟vsftpd,如下:

sudo service vsftpd restart

clip_image014

四、測試

現在我們來使用ailanni用戶登錄vsftpd進行測試。

clip_image015

clip_image016

通過以上兩張圖,我們可以很明顯的看到vsftpd的配置已經達到了業務的要求。

五、IPtables配置

在實際生產環境中,為了安全起見,我們一般是開啟防火牆的。

在ubuntu上,我們也可以使用IPtables來進行防護。

IPtables配置如下:

sudo iptables-save >/home/ilanni/iptables.rule

clip_image017

sudo iptables-restore < /home/ilanni/iptables.rule

sudo iptables -nL

clip_image018

sudo vim /etc/network/interfaces

pre-up iptables-restore < /home/ilanni/iptables.rule

post-down iptables-save < /home/ilanni/iptables.rule

clip_image019


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM