1. 程式人生 > >vsFTP安裝配置

vsFTP安裝配置

    OS:CentOS7.2
    ftp:vsFTP 3.0.2
    首先安裝vsftp
rpm -ivh vsftpd-3.0.2-10.el7.x86_64.rpm
    安裝完畢後建立ftp使用者:
    useradd -d /var/www -g ftp -s /sbin/nologin ftpuser 
    說明:
    -s /sbin/nologin 是讓其不能登陸系統
    -d 是指定使用者目錄為/var/www ,這裡可以替換成任何你需要的目錄。
    -g ftp 把使用者加入到ftp組中(vsftp已建立)
    ftpuser是ftp使用者名稱,在配置時把這個ftpuser換成你的ftp使用者名稱。

    執行該命令後,如果出現這樣的錯誤提示:
    useradd: warning: the home directory already exists.
    Not copying any file from skel directory into it.
    這說明使用者的目錄已經存在(/var/www,這個可以是任何你設定的目錄),不可再新建此目錄,並非新增使用者失敗,可以忽略。
    特別提醒:用useradd建立的使用者,如果後面不加–s /sbin/nologin引數,建立的使用者為普通系統使用者,有系統登陸centos伺服器的許可權,在虛擬主機環境下,這非常危險。所以要在useradd命令後面加上引數–s /sbin/nologin,為centos 伺服器虛擬主機新增不可以登入系統的ftp專用賬號(虛擬賬戶) 
    設定密碼
    # passwd ftpuser
    提示:重複輸入2次
    修改/var/www目錄屬性:(或任何自己定義的目錄)
    # chown -R ftpuser /var/www 遞迴把所有目錄及檔案的擁有者設為新新增的ftp使用者
    # chmod -R 755 /var/www 遞迴地設定擁護者全部許可權,其他使用者只有讀取和執行許可權
    這樣,如果網站執行時需要有寫入許可權,可以直接通過ftp的使用者名稱來修改配置檔案/etc/vsftpd/vsftpd.conf
    設定帳戶只能訪問自己的目錄,也就是上面建使用者的時候設定的目錄–d /var/www
    Chroot_local_user=yes
    關閉SELINUX:
vi /etc/selinux/config
#SELINUX=enforcing      這一行註釋掉
#SELINUXTYPE=targeted   這一行註釋掉
SELINUX=disabled        增加這一行


setenforce 0  使配置立即生效   
    如果不關閉SELINUX,登陸ftp可能會卡頓,登陸比較慢。
    注意別忘了關閉防火牆。否則會出現ftp: connect: 沒有到主機的路由這樣的提示。


    下面介紹下vsftp:
    一、vsftpd簡介 
    在穩定性方面:vsftpd可以在單機(非叢集)上支援4000個以上的併發使用者同時連線。據ftp.redhat.com的資料,vsftpd可以支援15000個併發使用者。 
    除了安全、高速、穩定之外,vsftpd還具有如下的特性: 
    支援基於IP的虛擬FTP伺服器 
    支援虛擬使用者 
    支援PAM或xinetd / tcp_wrappers的認證方式 
    支援兩種執行方式:獨立和Xinetd 
    支援每個虛擬用具有獨立的配置 
    支援頻寬限制等 
    vsftpd的配置檔案有三個,分別是: 
/etc/vsftpd.conf 
/etc/vsftpd.ftpusers 
/etc/vsftpd.user_list 
    其中,/etc/vsftpd.conf是主配置檔案。/etc/vsftpd.ftpusers中指定了哪些使用者不能訪問FTP伺服器。 /etc/vsftpd.user_list中指定的使用者預設情況下(即在/etc/vsftpd.conf中設定了userlist_deny= YES)不 能訪問FTP服務 器,當在/etc/vsftpd.conf中設定了userlist_deny=NO時,僅僅允許/etc/vsftpd.user_list中指定的用 戶訪問FTP伺服器。 

    二、vsftpd的預設主配置檔案 
    vsftpd的預設主配置檔案的內容如下:
 //允許匿名登入 
anonymous_enable=YES 
//允許本地使用者登入 
local_enable=YES 
//開放本地使用者的寫許可權 
write_enable=YES 
//設定本地使用者的檔案生成掩碼為022,預設值為077 
local_umask=022 
//當切換到目錄時,顯示該目錄下的.message隱含檔案的內容 
//這是由於預設情況下有message_file=.message的 設定 
dirmessage_enable=YES 
//啟用上傳和下載日誌 
xferlog_enable=YES 
//啟用FTP資料埠的連線請求 
connect_from_port_20=YES 
//使用標準的ftpd xferlog日誌格式 
xferlog_std_format=YES 
//設定PAM認證服務的配置檔名稱,該檔案存放 在/etc/pam.d/目錄下 
#pam_service_name=vsftpd 
    三、進一步配置vsftpd 
    1.允許匿名使用者上傳 
    為了使匿名使用者能夠上傳,需要在/etc/vsftpd中啟用兩個配置選項,分別是: 
anon_upload_enable=YES 
//允許匿名使用者上傳 
anon_mkdir_write_enable=YES 
//開 啟匿名使用者的寫和建立目錄的許可權 
若要以上兩項設定生效,同時還要求: 
write_enable=YES 
//匿名使用者對檔案系統的上傳目錄具有寫許可權 
新增如下的配置語句: 
anon_world_readable_only=NO 
//上面的配置語句用於放開匿名使用者的瀏覽許可權 
建立匿名上傳目錄: 
mkdir /var/ftp/incoming 
修改上傳目錄的許可權: 
chmod o+w /var/ftp/incoming/ 
    重新啟動vsftpd. 

    2.啟用ASCII傳輸方式 
    預設情況下,vsftpd為了安全,禁止了ASCII傳輸方式。雖然在ftp客戶軟體中可以使用asc命令,但是傳輸檔案時仍然使用二進位制傳輸方式。可以分別啟用上傳和下載的ASCII傳輸方式,方法是編輯/etc/vsftpd配置檔案,將如下兩 行前的#去掉即可 啟用:
#ascii_upload_enable=YES 
#ascii_download_enable=YES 
    3.設定連線伺服器後的歡迎資訊 
    為了使使用者連線伺服器後顯示資訊,vsftpd提供了兩個選項,分別是: 
ftpd_banner 
banner_file 
    例如:可以設定如下的ftpd_banner選項的值:
ftpd_banner=Welcome to Smartraining FTP service. 

即:使用者連線伺服器後顯示資訊“Welcome to Smartraining FTP service.”。 
也可以設定如下的banner_file選項的值: 

banner_file=/var/vsftpd_banner_file 

即:使用者連線伺服器後顯示檔案/var/vsftpd_banner_file中的資訊。 
    注意:(1)如果設定了ftpd_banner的值,將覆蓋vsftpd預設的伺服器連線後的資訊。 
    (2)如果ftpd_banner和banner_file同時設定,那麼banner_file將覆蓋ftpd_banner的設定。

    4.配置基本的效能和安全選項 
    //設定空閒的使用者會話的中斷時間 
    例如下面的配置: 
    idle_session_timeout=600 
    將在使用者會話空閒10分鐘後被中斷。 
    //設定空閒的資料連線的的中斷時間 
    例如下面的配置: 
    data_connection_timeout=120 
    將在資料連線空閒2分鐘後被中斷。 
    //設定客戶端空閒時的自動中斷和啟用連線的時間 
    例如下面的配置: 
    accept_timeout=60 
    connect_timeout=60 
    將使客戶端空閒1分鐘後自動中斷連線,並在中斷1分鐘後自動啟用連線 
    //設定最大傳輸速率限制 
    例如下面的配置: 
    local_max_rate=50000 
    anon_max_rate=30000 
    將使本地使用者的最大傳輸速率為50kbytes / sec,匿名使用者的 傳輸速率為30 kbytes / sec。 
    //設定客戶端連線時的埠範圍 
    例如下面的配置: 
    pasv_min_port=50000 
    pasv_max_port=60000 
    將使客戶端連線時的埠範圍在50000和60000之間。這提高了系統的安全性。 
    //設定chroot 
    在預設配置中,本地使用者可以切換到自家目錄以外的目錄進行瀏覽,並在許可權許可的範圍內進行下載和上傳。這樣的設定對於一個FTP伺服器來說是不安全的。如果希望使用者登入後不能切換到自家目錄以外的目錄,則需要設定chroot選項,涉及如下選項: 
    chroot_local_user 
    chroot_list_enable 
    chroot_list_file 
    有兩種設定chroot的方法: 
    (1)設定對所有的本地使用者執行chroot(即活動範圍限制在自家目錄)只要將chroot_local_user的值設 為YES即可, 即: 
    chroot_local_user=YES 
    (2)設定指定的使用者執行chroot需要如下的設定:
chroot_local_user=NO 
chroot_list_enable=YES 
chroot_list_file= /etc/vsftpd.chroot_list 
    這樣,只有/etc/vsftpd.chroot_list檔案中指定的使用者才執行chroot。 
    注意 :上面所提及的檔案/etc/vsftpd.chroot_list和下面將要提及的檔案 /etc/vsftpd.user_list的格式要求均為每個 使用者名稱佔一行。 

    5.配置基於本地使用者的訪問控制

    要配置基於本地使用者的訪問控制,可以通過修改vsftpd的主配置檔案/etc/vsftpd.conf來進行, 有兩種限制方法: 
    1)限制指定的本地使用者不能訪問,而其他本地使用者可訪問 
    例如下面的設定:
userlist_enable= YES 
userlist_deny=YES 
userlist_file= /etc/vsftpd.user_list 
    使檔案/etc/vsftpd.user_list中 指定的本地使用者不能訪問FTP伺服器,而其他本地使用者可訪問FTP伺服器。 
    2)限制指定的本地使用者可以訪問,而其他本地使用者不可訪問 
    例如下面的設定: 
userlist_enable= YES 
userlist_deny= NO 
userlist_file= /etc/vsftpd.user_list 
    使檔案/etc/vsftpd.user_list中 指定的本地使用者可以訪問FTP伺服器,而其他本地使用者不可以訪問FTP伺服器。 
    注意:對於userlist_enable可以這樣理解: 
    如果userlist_enable=YES,表示vsftpd將從userlist_file選項給出的檔名中裝載一個含有使用者名稱的清單。然後再讀取 userlist_deny的值來確定vsftpd.user_list中的使用者是否允許訪問FTP服 務器。如果使用者不能訪問,將在輸入使用者口令前被拒絕。 
    6.配置基於主機的訪問控制 
    由於vsftpd有兩種執行方式,即:由inetd啟動和獨立啟動。 這兩種執行方式的主機訪問控制配置是不同的,下面介紹的是由xinetd啟動的vsftpd的主機訪問控制的配置。顯然,要配置這種主機訪問控制,需要修改配置文 件/etc/xinetd.d/vsftpd。 
    1)只允許指定的主機訪問 
    在配置檔案/etc/xinetd.d/vsftpd的{}中新增如下的配置語句: 
    only_from <主機表> 
    例如:only_from 192.168.1.0 表示只允許192.168.1.0網段內的主機訪問。 
    2)指定不能訪問的主機 
    在配置檔案/etc/xinetd.d/vsftpd的{}中新增如下的配置語句: 
    no_access <主機表> 
    例如:no_access 192.168.1.0 ,表示只有192.168.1.0網段內的主機不能訪問。 
    3)配置每個客戶機的最大連結數 
    //在置檔案/etc/xinetd.d/vsftpd的{}中新增如下的配置語句: per_source = 數值 
    例如:per_source = 5表示每個客戶機的最大連線數為5。 
    4)配置伺服器總的併發連線數 
    在配置檔案/etc/xinetd.d/vsftpd的{}中新增如下的配置語句: instances = 數值 
    例如:instances = 200 表示FTP伺服器總共支援的最高連線數為200。 
    5)配置訪問時間限制 
    在配置檔案/etc/xinetd.d/vsftpd的{}中新增如下的配置語句: access_time = hour:min-hour:min 
    例如:access_time = 18:00-23:59 表示只有在下午6點到午夜0點之前才能訪問此FTP伺服器; 又如:access_time = 8:30-11:30 13:00-18:00 表示只有在上午8點半到11點半和下午1點到下午6點才能訪問此FTP伺服器。 
    6)指定連線失敗時顯示的資訊 
    在配置檔案/etc/xinetd.d/vsftpd的 {}中新增如下的配置語句: banner_fail =檔名 
    例如:banner_fail = /etc/vsftpd.busy_banner 表示當連線失敗時顯示檔案/etc/vsftpd.busy_banner中的內容。 可以用下面的命令生成檔案/etc/vsftpd.busy_banner: echo "421 Server busy, please try later."> /etc/vsftpd.busy_banner 
    下面內容是基於xinetd的,因為debian用的是inetd,所以懶得修改了。

    四、使用vsftpd配置高安全級別的匿名伺服器 
    高安全級別匿名FTP伺服器的配置要求: 
僅僅允許匿名使用者訪問 
不允許本地使用者訪問 
關閉所有寫許可權 
不允許匿名使用者上傳 
設定客戶端連線時的埠範圍 
設定匿名使用者的最大傳輸速率限制 
設定空閒的資料連線的中斷時間 
設定客戶端空閒時的自動中斷和啟用連線的時間 
配置每個主機的最大連線數 
配置總的併發連線數 
配置禁止訪問的主機 
配置安全日誌 
    vsftpd推薦使用這種近乎於偏執的安全 配置,如果使用者只想架設匿名FTP下載伺服器,出於安全性的考慮,請參考使用這種謹慎配置。 
    這種安全匿名伺服器的配置,可以從vsftpd的原始碼樹中獲得,具體操作步驟如下: 進入vsftp原始碼樹的EXAMPLE/INTERNET_SITE目錄複製預設配置檔案: 
# cd /usr/local/src/vsftpd-1.1.3/EXAMPLE/INTERNET_SITE 
# cp vsftpd.conf /etc 
# cp vsftpd.xinetd /etc/xinetd.d/vsftpd 
//修改主配置檔案/etc/vsftpd.conf,新增一 個連線後的資訊 
# cat >>/etc/vsftpd.conf < > ftpd_banner=This FTP server is anonymous only. 
> ! 
//顯示主配置檔案的內容如下: 
# cat /etc/vsftpd.conf 
# Access rights 
anonymous_enable=YES 
local_enable=NO 
write_enable=NO 
anon_upload_enable=NO 
anon_mkdir_write_enable=NO 
anon_other_write_enable=NO 
# Security 
anon_world_readable_only=YES 
connect_from_port_20=YES 
hide_ids=YES 
pasv_min_port=50000 
pasv_max_port=60000 
# Features 
xferlog_enable=YES 
ls_recurse_enable=NO 
ascii_download_enable=NO 
async_abor_enable=YES 
# Performance 
one_process_model=YES 
idle_session_timeout=120 
data_connection_timeout=300 
accept_timeout=60 
connect_timeout=60 
anon_max_rate=50000 
ftpd_banner=This FTP server is anonymous only. 

//接下來檢視/etc/xinetd.d/vsftpd 
# cat /etc/xinetd.d/vsftpd 

service ftp 
{ 
disable = no 
socket_type = stream 
wait = no 
user = root 
server = /usr/local/sbin/vsftpd 
per_source = 5 
instances = 200 
no_access = 192.168.1.3 
banner_fail = /etc/vsftpd.busy_banner 
log_on_success += PID HOST DURATION 
log_on_failure += HOST 
} 
//重新啟動xinetd 

# service xinetd restart 

//配置結束 
    五、配置基於IP的虛擬FTP伺服器 
    vsftpd支援基於IP的虛擬FTP伺服器配置。其主要配置步驟為:
配置虛擬IP地址 
建立虛擬FTP的伺服器目錄並設定適當的許可權 
建立虛擬FTP的伺服器的xinetd配置檔案 
建立虛擬FTP的伺服器的主配置檔案 
    注意:虛擬FTP的伺服器要有單獨的xinetd配置檔案和單獨的主配置檔案, 這兩個檔案不能與原配置檔案重名。 
    具體操作過程如下: 
    1.檢視本機現有的IP地址
# ifconfig |grep -1 eth0 
eth0 Link encap:Ethernet HWaddr 00:50:56:C7:22:DF 
inet addr:192.168.1.222 Bcast:192.168.1.255 Mask:255.255.255.0 
//可以看出本機的第一個網路介面eth0的IP為192.168.1.222 
    2.配置一個虛擬網路介面eth0:1 
# ifconfig eth0:1 192.168.1.234 up 
# ifconfig |grep -1 eth0:1 
eth0:1 Link encap:Ethernet HWaddr 00:50:56:C7:22:DF 
inet addr:192.168.1.234 Bcast:192.168.1.255 Mask:255.255.255.0 
//可以看出本機的虛擬網路介面eth0:1的IP為192.168.1.234 
    3.建立虛擬FTP的伺服器目錄 
# mkdir -p /var/ftp2/pub 
//確保目錄具有如下的許可權 
# ll -d /var/ftp2 
drwxr-xr-x 3 root root 4096 312 03:00 /var/ftp2 
# ll -d /var/ftp2/pub 
drwxr-xr-x 2 root root 4096 312 03:00 /var/ftp2/pub 
    4.建立此虛擬伺服器的匿名使用者所對映的本地使用者ftp2
# useradd -d /var/ftp2 -M ftp2 
    5.更改現有的配置檔案/etc/xinetd.d/vsftpd 
# vi /etc/xinetd.d/vsftpd 
// 在此檔案的{}中新增如下的配置語句: 
// bind = 192.168.1.222 
// 將原FTP服務繫結到eth0介面,之後儲存退出vi 
    6.生成並修改新的虛擬FTP伺服器的配置檔案/etc/xinetd.d/vsftpd2
# cp /etc/xinetd.d/vsftpd /etc/xinetd.d/vsftpd2 
//更改新的配置檔案/etc/xinetd.d/vsftpd2 
# vi /etc/xinetd.d/vsftpd2 
//在此檔案的{}中新增如下的配置語句: 
bind = 192.168.1.234 
//將虛擬FTP服務繫結到eth0:1介面 
//另外新增如下的配置語句: 
server_args = /etc/vsftpd_site2.conf 
//使vsftpd讀取虛擬FTP伺服器的主配置檔案,之後儲存退出vi 
    7.生成並修改虛擬FTP伺服器的主配置檔案/etc/vsftpd_site2.conf 
# cp /etc/vsftpd.conf /etc/vsftpd_site2.conf 
//修改新的主配置檔案 
# vi /etc/vsftpd_site2.conf 
//將如下的配置語句行: 
ftpd_banner=This FTP server is anonymous only. 
//修改為: 
ftpd_banner=This is the alternative FTP site. 
//新增如下的配置語句: 
ftp_username=ftp2 
//使此虛擬伺服器的匿名使用者對映到本地使用者ftp2 
//這樣匿名使用者登入後才能進入本地使用者ftp2的/var/ftp2目錄 
//修改後,儲存退出vi 
    8.重新啟動xinetd
# service xinetd restart 
//配置結束 
    六、配置獨立執行的vsftpd 
    顯然,這種啟動方式將不再需要/etc/xinetd.d下面的配置檔案。要配置獨立執行的vsftpd很簡單,只需要在前面的 
    主配置檔案的基礎上新增如下的配置即可: 
設定listen=YES 
指明vsftpd以獨立執行方式啟動。 
為了實現訪問控制,需要新增如下的配置項: 
設定max_clients=200 
指明伺服器總的併發連線數 
設定max_per_ip=4 
指明每個客戶機的最大連線數。 
    八、用vsftpd配置獨立執行的虛擬FTP伺服器 
    為了配置獨立執行的虛擬FTP伺服器需要使用listen_address配置語句。以上面的配置為基礎進行下面的配置,具體步驟如下: 
//修改原獨立運 行的伺服器配置檔案 
# vi /etc/vsftpd.standalone.conf 
//新增listen_address=192.168.1.222的配置行 
//將原FTP服務繫結到eth0介面。之後用:wq退出vi 
//由xinetd執行的虛擬伺服器的配置檔案創 建一個新的配置檔案 
# cp /etc/vsftpd_site2.conf /etc/vsftpd.standalone2.conf 
//修改新的配置檔案 
# vi /etc/vsftpd.standalone2.conf 
//在檔案開始處插入下面的行 
listen=YES 
listen_address=192.168.1.234 將虛擬伺服器繫結到eth0:1介面 
max_clients=200 
max_per_ip=4 
//並將下面的配置語句 
ftpd_banner=This is the alternative FTP site. 
//改為: 
ftpd_banner=This is the alternative FTP site, and vsftpd in "standalone" mode. 
//用:wq退出vi 
//讓原FTP伺服器重新讀取配置檔案 
/usr/local/sbin/vsftpd /etc/vsftpd.standalone.conf 
# kill -HUP `pidof vsftpd` 
//啟動新的虛擬FTP伺服器 
# /usr/local/sbin/vsftpd /etc/vsftpd.standalone2.conf & 
    九、配置虛擬使用者的FTP伺服器 
    該部分講述虛擬使用者(virtual users)的FTP伺服器的配置。虛擬使用者只能訪問為其提供的FTP服務,而不能像本地的實使用者那樣登入系統訪問系統的其他資源。若要某使用者對FTP伺服器站內具有寫許可權但不允許訪問系統的其他資源,則該使用者應該使用虛擬使用者才能提高系統的安全性。 傳統的FTP伺服器採用如下的方法實現虛擬使用者:在本地建立普通使用者賬號並設定密碼將其登入shell設為不可登入由passwd/shadow口令系統進行認證vsftpd的虛擬使用者 採用了不與系統賬戶口令檔案合二為一的方法,也就是說,為了認證這些虛擬使用者vsftpd使用單獨的口令庫檔案(pam_userdb),由可插拔認證模組(PAM)進行認證。使用這種方式更加安全,並且配置更靈活。 

    Vsftp的PASV mode和Port模式配置檔案的設定
    FTP模式與資料埠
    FTP 分為兩類,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。這兩種FTP在建立控制連線時操作是一樣的,都是由客戶端首先和FTP伺服器的控制埠(預設值為21)建立控制連結,並通過 此連結進行傳輸操作指令。它們的區別在於使用資料傳輸埠(ftp- data)的方式。PORT FTP由FTP伺服器指定資料傳輸所使用的埠,預設值為20。PASV FTP由FTP客戶端決定資料傳輸的埠。 PASV FTP這種做法,主要是考慮到存在防火牆的環境下,由客戶端與伺服器進行溝通(客戶端向伺服器發出資料傳輸請求中包含了資料傳輸埠),決定兩者之間的數 據傳輸埠更為方便一些。
    port_enable=YES|NO
    如果你要在資料連線時取消PORT模式時,設此選項為NO。預設值為YES。
    connetc_from_port_20=YES|NO
    控制以PORT模式進行資料傳輸時是否使用20埠(ftp-data)。YES使用,NO不使用。預設值為NO,但RHL自帶的vsftpd.conf檔案中此引數設為YES。
    ftp_data_port=port number
    設定ftp資料傳輸埠(ftp-data)值。預設值為20。此引數用於PORT FTP模式。
    port_promiscuous=YES|NO
    預設值為NO。為YES時,取消PORT安全檢查。該檢查確保外出的資料只能連線到客戶端上。小心開啟此選項。
    pasv_enable=YES|NO
    YES,允許資料傳輸時使用PASV模式。NO,不允許使用PASV模式。預設值為YES。
    pasv_min_port=port number
    pasv_max_port=port number
    設定在PASV模式下,建立資料傳輸所可以使用port範圍的下界和上界,0 表示任意。預設值為0。把埠範圍設在比較高的一段範圍內,比如50000-60000,將有助於安全性的提高。
    pasv_promiscuous=YES|NO
    此選項啟用時,將關閉PASV模式的安全檢查。該檢查確保資料連線和控制連線是來自同一個IP地址。小心開啟此選項。此選項唯一合理的用法是存在於由安全隧道方案構成的組織中。預設值為NO。
    pasv_address=
    此選項為一個數字IP地址,作為PASV命令的響應。預設值為none,即地址是從呼入的連線套接字(incoming connectd socket)中獲取。