標籤:style blog http ar io color os 使用 sp
Linux Ubuntu上架設FTP
http://www.blogjava.net/stonestyle/articles/369104.html
作業系統:ubuntu (GNU/Linux)
為了在機子上架設ftp伺服器,我們需要安裝ftp伺服器軟體。Linux下具有代表性的ftp伺服器軟體有Wu-FTP,ProFTP和Vsftp。
Wu-FTP(Washington University FTP)由美國華盛頓大學開發。它的功能強大,配置較複製。由於開發時間較早,應用十分廣泛,也因此成為駭客們主要的攻擊目標。
ProFTP針對Wu-FTP的弱項而開發,在安全性方面進行了改進,並提供了一些Wu-FTP沒有的功能,大大簡化了架設和管理FTP伺服器的工作。
Vsftp在安全性,高效能及穩定性3個方面上有上佳的表現。它提供的主要功能包括虛擬IP設定,虛擬使用者,standalone(可自行單獨啟動的daemon),inetd操作模式(由一支特殊的super daemon管理),強大的單使用者佈建能力以及頻寬限流等。接下來我們主要講解在ubuntu上如何架設vsftpd。
vsftpd的安裝:
在ubuntu可直接通過apt安裝 sudo apt-get install vsftpd
安裝完畢,檢查vsftpd進程是否已啟動,可以查看進程或者查看監聽連接埠
ps -eaf|grep vsftpd
vsftpd進程已開啟
netstat -tnl|grep :21
連接埠21正在被監聽
vsftpd的設定檔:
在ubuntu中,vsftpd的主要設定檔分布如下:
/etc/vsftpd.conf vsftpd伺服器的設定檔
/usr/sbin/vsftpd vsftpd伺服器的進程檔案
/etc/pam.d/vsftpd vsftpd伺服器的PAM介面設定檔
/var/ftp vsftpd伺服器匿名使用者的工作目錄
配置vsftpd伺服器:
vsftpd伺服器的設定檔以及各參數代表的意義如下:
/etc/vsftpd.conf
vsftpd.conflisten=YES
listen_ipv6=YES # listen=YES和listen_ipv6=YES 設為YES表示將以獨立的方式運行(可自行單獨啟動的daemon),前者監聽ipv4,後者監聽ipv6,但兩者不能同時在一個設定檔中設定
anonymous_enable=YES # 表示允許匿名使用者登入FTP伺服器
anon_world_readable_only=NO # 只要ftp使用者在作業系統中有讀許可權,就可以下載檔案
anon_root=/var/ftp/anonymous # 匿名使用者登入後進入到/var/ftp/anonymous目錄中,可以下載該目錄中的檔案
anon_uploads_enable=YES # 匿名使用者可以上傳檔案
anon_mkdir_write_enable=YES # 匿名使用者可以在伺服器上建立目錄
anon_other_write_enable=YES # 匿名使用者可以在伺服器上進行命名,刪除等寫操作
local_enable=YES # 表示允許本機使用者帳號登入
local_umask=022 # 表示本機使用者建立新的檔案時,該檔案初始的許可權值。022表示初始的許可權值是建立者有全部的許可權,其他使用者(包括組使用者,其他使用者)只有讀和執行許可權,077表示初始建立者具有全部許可權,其他使用者沒有許可權
write_enable=YES # 表示伺服器接收與寫有關的控制命令
dirmessage_enable=YES # 表示使用者第一次進入一個新目錄時,會給使用者一些提示資訊
use_localtime=YES # 表示伺服器顯示本地時區時間,預設是顯示GMT時間
xferlog_enable=YES # 允許產生日誌
xferlog_std_format=YES # 日誌採用標準的xferlog格式
xferlog_file=/var/log/vsftpd.log# 記錄檔以及所在目錄
connect_from_port_20=YES # 使用20連接埠作為建立資料連線時的源連接埠
pam_service_name=vsftpd # 指定PAM服務組態檔的名字,在/etc/pam.d
chown_uploads=YES # 這兩個選項是一對相關的配置,表示匿名使用者上傳的檔案所以者將變為whoever,這個配置是為了安全目的
chown_username=whoever # 檔案所有者變為其他使用者後,匿名使用者將不能再對檔案進行刪除,甚至讀操作,例如作業上交FTP
idle_session_timeout=600 # 表示控制串連的逾時值為600秒
data_connection_timeout=120 # 表示資料連線的逾時值為120秒
nopriv_user=ftpsecure # 表示當vsftpd進程處於非提高權限執行狀態時,所使用的使用者身份是ftpsecure
async_abor_enable=NO # 表示vsftpd支援”async ABOR“的FTP命令,這條命令會影響vsftpd的安全,一般使用預設的NO設定
ascii_upload_enable=YES
ascii_download_enable=YES # 表示上傳下載檔案時真正允許ASCII模式。有些FTP伺服器在實現ACSII傳輸模式時,容易遭受DoS攻擊。為了避免這種情況的發送,vsftpd給用戶端回應時可以假裝允AXSCII模式,但實際上使用的是binary模式,通過把這兩個值設定為NO來達到。
ftpd_banner=Welcome to stone FTP service. # 表示使用者登入時,將顯示Welcome to stone FTP service資訊,沒有這個選項時,將顯示vsftpd伺服器的名稱和版本資訊,存在安全問題,因而這樣做的目的是為了隱藏這些資訊
deny_email_enable=YES # 匿名使用者如果輸入[email protected]做為登入密碼,將被拒絕,主要目的是為了防止一些自動登入工具進行登入。
banned_email_file=/etc/vsftpd.banned_emails # 指定的deny_mail的檔案
chroot_list_enable=YES # 這兩個選項制定了一個使用者列表,這個列表放在/etc/vsftpd/chroot_list檔案中。當 chroot_local_user
chroot_list_file=/etc/vsftpd/chroot_list # 設為NO後,這些使用者登入FTP伺服器後,他們看到的根目錄是他們自己的個人目錄,也就是說雖然在實際的檔案系統中,這些使用者個人目錄的上級還有目錄,但是不能切換到這些上級目錄
chroot_local_user=YES # 當chroot_local_user被設定為YES時,上述使用者列表將不會被限制在個人目錄中,可以進一步轉到其他目錄
ls_recurse_enable=YES # 表示用戶端在使用ls命令時可以加-R參數,-R參數表示ls命令可以列出整個分類樹的內容,需要一些處理時間,特別存在惡意使用者時,情況會更嚴重
anon_max_rate=0 # 用於設定匿名使用者用戶端能夠達到的最大速率,其值是一個數值,單位為b/s,0表示無限制
local_max_rate=0 # 該選項限制的是本機使用者的速率
max_clients=0 # vsftpd能接收的最大用戶端串連數
max_per_ip=5 # 限制每一台主機可以連入的用戶端數,使用者為了加快下載速度,可能會開啟很多的用戶端串連,影響其他使用者的正常使用
匿名使用者配置:
配置匿名使用者,使得
1 FTP伺服器支援匿名使用者(帳號:anonymous 密碼:任意)登入
2 只要ftp使用者(作業系統使用者)在作業系統有讀許可權,就可以下載檔案
3 匿名使用者登入後進入/var/ftp/anonymous目錄,可以下載該目錄中的檔案
4 可以上傳檔案到目錄/var/ftp/anonymous/upload目錄中,但不能下載或刪除該目錄中的檔案
利用vim修改vsftpd.conf檔案
anonymous_enable=YES
anon_world_readable_only=NO
anon_root=/var/ftp/anonymous
anon_upload_enable=YES
chown_uploads=YES
在/var目錄下建立目錄anonymous,所以者為root,在/var/anonymous目錄下建立目錄upload,所有者為ftp
重啟vsftpd進程
sudo killall -HUP vsftpd
測試匿名使用者
以匿名使用者登入本地FTP伺服器(127.0.0.1)
列出目錄,下載檔案
進入upload目錄,上傳檔案,列出目錄
測試完畢
虛擬機器主機的配置:
何為虛擬機器主機?vsftpd的虛擬機器主機是指在一台主機上配置多個vsftpd服務,各個vsftpd服務可以採用不同的配置,給使用者的感覺好像這些vsftpd服務是不同的主機上啟動並執行。vsftpd的虛擬機器主機是基於IP地址。既然是基於IP地址的,那您可能會問我只有一個網卡一個IP怎麼配置虛擬機器主機?
這時,我們可以利用linux的邏輯網卡來實現不同IP。
一個虛擬機器主機的配置例子:
1 增加邏輯網卡,我現在的IP地址為192.168.1.100,增加邏輯網卡IP為192.168.1.101
sudo ifconfig eth0:1 192.168.1.101 netmask 255.255.255.0 up
2 停止vsftpd服務
sudo killall vsftpd
3 修改vsftpd.conf配置,增加以下一欄
listen_address=192.168.1.100
4 重新啟動vsftpd服務 & 表示後台運行
sudo /usr/sbin/vsftpd /etc/vsftpd.conf &
5 為第二個vsftpd伺服器建立匿名使用者對應的本地帳號以及個人目錄,參數-d指定個人目錄,需自己建立,-s指定登入shell,/sbin/nologin是一種不登入shell
sudo useradd -d /var/ftp/myftp -s /sbin/nologin myftp
6 建立/var/ftp/myftp目錄,改變/var/ftp/myftp的所有者(預設就是root),目的是使myftp使用者對其沒有寫入權限
sudo mkdir /var/ftp/myftp
sudo chown root /var/ftp/myftp
7 複製vsftpd.conf,命名為myvsftpd.conf放在/etc目錄下
sudo cp /etc/vsftpd.conf /etc/myvsftpd.conf
8 修改myvsftp.conf
ftpd_banner=Welcome to my virtual FTP server
ftp_username=myftp
listen=YES
listen_address=192.168.1.101
9 啟動第二個vsftpd
sudo /usr/sbin/vsftpd /etc/vsftpd/myvsftpd.conf
測試虛擬機器主機:
登入192.168.1.100 和 192.168.1.101
測試完畢
虛擬使用者的配置:
vsftpd中的使用者有3種。匿名使用者,本機使用者。還有一種就是接下來介紹的虛擬使用者,該使用者無法登入你的作業系統,但是能夠登入FTP伺服器,而且當存在很多虛擬使用者,您並不需要在作業系統上為每個虛擬使用者建立一個不可登入的本機使用者,只需要一個。而且還有一個更強大的用法,我們可以通過為每個虛擬帳號建立一個設定檔來不同虛擬帳號不同的許可權,目錄,這將對我們管理FTP使用者有很大的方便。
1 建立user.txt,輸入以下內容,表示有2個虛擬使用者,分別為xuni1(密碼pass1),xuni2(密碼pass2)
user.txtxuni1
pass1
xuni2
pass2
2 接下來我們需要產生虛擬帳號資料庫,先安裝DB庫工具
sudo apt-get install db4.8-util
在/etc下建立目錄/etc/vsftpd
sudo mkdir /etc/vsftpd
將資料庫檔案匯入到剛剛產生的目錄
sudo db4.8_load -T -t hash -f /home/stone/user.txt /etc/vsftpd/vsftpd_login.db
將資料庫檔案設定許可權為600,並不需要被其他使用者讀,修改
sudo chmod 600 /etc/vsftpd/vsftpd_login.db
3 建立/etc/pam.d/vsftpd_login檔案,輸入以下內容
vsftpd_loginauth required /lib/i386-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftp_login
account required /lib/i386-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftp_login
所有支援PAM的程式都有一個與PAM進行對接的設定檔,它們存放在/etc/pam.d目錄,vsftpd與PAM的對接設定檔名可以由vsftpd.conf檔案中的pam_service_name選項指定,預設是pam_service_name=vsftpd,當以後認證本機使用者時,會根據/etc/pam.d/vsftpd檔案的配置內容進行認證。
4 建立所有FTP虛擬使用者帳號使用的作業系統帳號,需要我們自己建立目錄,並設定該帳號工作目錄的許可權,所有者(貌似可以修改使之自動建立目錄)
sudo useradd -d /home/ftpsite -s /sbin/nologin ftp_virt
sudo mkdir /home/ftpsite
sudo chown ftp_virt /home/ftpsite
sudo chgrp ftp_virt /home/ftpsite
sudo chmod 700 /home/ftpsite
5 在vsftpd.conf設定檔中添加有關虛擬帳號使用者的配置內容
guest_enable=YES
guest_username=ftp_virt
pam_service_name=vsftpd_login
最後一項將於原來的預設值衝突,可以注釋掉原來的項,重啟vsftpd之後,你將發現本機使用者無法登入vsftpd了
6 設定虛擬使用者的許可權,我們可以通過添加下面這一行,來指定放置使用者設定檔的目錄位置是/etc/vsftpd
user_config_dir=/etc/vsftpd
解釋下這一項的作用,添加這一項之後,當我們以虛擬使用者登入vsftpd時,伺服器將會尋找/etc/vsftpd目錄下於虛擬使用者名稱相同的設定檔,從而確定該虛擬使用者的許可權等屬性。這方便了我們管理FTP虛擬使用者。
7 配置虛擬使用者設定檔
在/etc/vsftpd下,我們建立檔案xuni1,輸入以下內容
xuni1local_root=/home/ftpsite
建立檔案xuni2,輸入以下內容
xuni2local_root=/home/ftpsite
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_world_readable_only=YES
write_enable=YES
8 然後重啟vsftpd
先關閉
sudo killall vsftpd
啟動
sudo /usr/sbin/vsftpd /etc/vsftpd.conf &
測試
虛擬使用者具體的許可權,目錄配置方法將可以通過各種方法來配置,這裡不再描述。
[轉]Linux Ubuntu上架設FTP