簡介
vsftpd 是“very secure FTP daemon”的縮寫,安全性是它的一個最大的特點。vsftpd 是一個 UNIX 類作業系統上運行的伺服器的名字,它可以運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開放原始碼的ftp伺服器軟體,支持很多其他的 FTP 伺服器所不支持的特徵。比如:非常高的安全性需求、頻寬限制、良好的可伸縮性、可創建虛擬用戶、支持IPv6、速率高等。
vsftpd是一款在Linux發行版中最受推崇的
FTP伺服器程式。特點是小巧輕快,安全易用。
在開源作業系統中常用的FTPD套件主要還有ProFTPD、PureFTPd和wuftpd等
特點
①vsftpd 是以一般身份啟動服務,所以對於 Linux 系統的使用許可權較低,對於Linux 系統的危害就相對的減低了。此外, vsftpd 亦利用 chroot() 這個函式進行改換根目錄的動作,使得系統工具不會被vsftpd 這支服務所誤用;
②任何需要具有較高執行許可權的 vsftpd 指令均以一支特殊的上層程式( parent process ) 所控制 ,該上層程式享有的較高執行許可權功能已經被限制的相當的低,並以不影響Linux 本身的系統為準;
③所有來自 clients 端,想要使用這支上層程式所提供的較高執行許可權之vsftpd 指令的需求,均被視為『不可信任的要求』來處理,必需要經過相當程度的身份確認後,方可利用該上層程式的功能。例如chown(), Login 的要求等等動作;
④此外,上面提到的上層程式中,依然使用 chroot() 的功能來限制使用者的執行許可權。
配置
vsftpd配置
connect_from_port_20=YES(NO)
還記得 wuftp 那篇文章提到的,關於主動在線上的 ftp-data 嗎?
這個設定項目在啟動主動在線上的port 20 咯!
listen_port=21
使用的 vsftpd命令通道的 port number 設定,如果您想要使用非
正規的 ftpport,在這個設定項目修改吧!
dirmessage_enable=YES(NO)
當使用者進入某個目錄時,會顯示該目錄需要注意的內容,顯示的
檔案預設是.message ,當然,可以使用底下的設定項目來修訂!
message_file=.message
當 dirmessage_enable=YES時,可以設定這個項目來讓 vsftpd
尋找該檔案來顯示訊息!您也可以設定其它檔名喔!
listen=YES(NO)
若設定為YES 表示 vsftpd 是以 standalone 的方式來啟動的!
pasv_enable=YES(NO)
啟動被動式在線上(passivemode),一定要設定為 YES 的啦!
use_localtime=YES(NO)
是否使用
主機的時間?!預設使用GMT 時間(格林威治),會比北京
時間晚 8小時,一般來說,建議設定為 YES 吧!
write_enable=YES(NO)
是否允許使用者具有寫入的許可權?!這包括刪除與修改等功能喔!
connect_timeout=60
單位是秒,如果client 嘗試連線我們的 vsftpd 命令通道超過 60 秒,
則不等待,強制斷線咯。
accept_timeout=60
當使用者以被動式PASV 來進行數據傳輸時,如果
主機啟用 passive port
並等待 client超過60 秒,那么就給他強制斷線!您可以修改 60 這個數值。
data_connection_timeout=300
如果 client與 Server 間的
數據傳送在 300 秒內都無法傳送成功,
那 Client的在線上就會被我們的 vsftpd 強制剔除!
idle_session_timeout=300
如果使用者在300 秒內都沒有命令動作,強制離線!
max_clients=0
如果 vsftpd是以 stand alone 方式啟動的,那么這個設定項目可以設定
同一時間,最多有多少client 可以同時連上 vsftpd 哩!?
max_per_ip=0
與上面 max_clients類似,這裡是同一個 IP 同一時間可允許多少在線上?
pasv_max_port=0
pasv_min_port=0
上面兩個是與passive mode 使用的 port number 有關,如果您想要使用
65400 到65410 這 11 個 port 來進行被動式資料的連線,可以這樣設定
pasv_max_port=65410以及 pasv_min_port=65400
ftpd_banner=一些文字說明
當使用者無法順利連上我們的主機,例如在線上數量已經超過max_clients
的設定了,那么client 的畫面就會顯示『一些文字說明』的字樣,您可以修改
關於實體用戶登入者的設定值
guest_enable=YES(NO)
若這個值設定為YES 時,那么任何非 anonymous 登入的賬號,均會被
假設成為guest (訪客) 喔!
local_enable=YES(NO)
這個設定值必須要為YES 時,在 /etc/passwd 內的賬號才能以
local_max_rate=0
實體用戶的傳輸速度限制,單位為bytes/second, 0 為不限制。
chroot_local_user=YES(NO)
將使用者限制在自己的家目錄之內(chroot)!這個設定在vsftpd
當中預設是NO,因為有底下兩個設定項目的輔助喔!
所以不需要啟動他!
chroot_list_enable=YES(NO)
是否啟用將某些實體用戶限制在他們的家目錄內?!預設是NO ,
不過,如果您想要讓某些使用者無法離開他們的家目錄時,
可以考慮將這個設定為YES ,並且規劃下個設定值
chroot_list_file=/etc/vsftpd.chroot_list
如果 chroot_list_enable=YES那么就可以設定這個項目了!他裡面可以規定
那一個實體用戶會被限制在自己的家目錄內而無法離開!(chroot)
一行一個賬號即可!<= 這個應該是白名單,即寫在這個檔案中實體用戶可以不受家目錄限制。
userlist_deny=YES(NO)
若此設定值為YES 時,則當使用者賬號被列入到某個檔案時,在該檔案內
的使用者將無法登入vsftpd 伺服器!該檔案檔案名稱與下列設定項目有關。
userlist_file=/etc/vsftpd.user_list
若上面 userlist_deny=YES時,則這個檔案就有用處了!在這個檔案內的
賬號都無法使用vsftpd 喔!
關於匿名者登入的設定值
anonymous_enable=YES(NO)
設定為允許anonymous 登入我們的 vsftpd
主機!預設是 YES ,底下的所有
相關設定都需要將這個設定為anonymous_enable=YES 之後才會生效!
anon_world_readable_only=YES(NO)
僅允許 anonymous具有下載可讀檔案的許可權,預設是 YES。
anon_other_write_enable=YES(NO)
是否允許anonymous 具有寫入的許可權?預設是 NO!如果要設定為 YES,
那么開放給anonymous 寫入的目錄亦需要調整許可權,讓 vsftpd 的 PID
擁有者可以寫入才行!
anon_mkdir_write_enable=YES(NO)
是否讓anonymous 具有建立目錄的許可權?默認值是 NO!如果要設定為 YES,
那么 anony_other_write_enable必須設定為 YES !
anon_upload_enable=YES(NO)
是否讓anonymous 具有上傳數據的功能,預設是 NO,如果要設定為 YES ,
則 anon_other_write_enable=YES必須設定。
deny_email_enable=YES(NO)
將某些特殊的email address 抵擋住,不讓那些 anonymous 登入!
如果以 anonymous登入
主機時,不是會要求輸入密碼嗎?密碼不是要您
輸入您的email address 嗎?如果你很討厭某些 email address ,
就可以使用這個設定來將他取消登入的許可權!需與下個設定項目配合:
banned_email_file=/etc/vsftpd.banned_emails
如果 deny_email_enable=YES時,可以利用這個設定項目來規定那個
email address不可登入我們的 vsftpd 喔!在上面設定的檔案內,
一行輸入一個email address 即可!
no_anon_password=YES(NO)
當設定為YES 時,表示 anonymous 將會略過密碼檢驗步驟,
而直接進入vsftpd 伺服器內喔!所以一般預設都是 NO 的!
anon_max_rate=0
這個設定值後面接的數值單位為bytes/秒 ,限制 anonymous 的傳輸速度,
如果是 0則不限制(由最大頻寬所限制),如果您想讓 anonymous 僅有
30 KB/s 的速度,可以設定『anon_max_rate=30000』
anon_umask=077
限制 anonymous的許可權!如果是 077 則 anonymous 傳送過來的檔案
許可權會是-rw------- 喔!
關於系統安全的設定值:
ascii_download_enable=YES(NO)
如果設定為YES ,那么 client 就可以使用 ASCII 格式下載檔案。
一般來說,由於啟動了這個設定項目可能會導致DoS 的攻擊,因此預設是NO。
ascii_upload_enable=YES(NO)
與上一個設定類似的,只是這個設定針對上傳而言!預設是NO。
async_abor_enable=YES(NO)
如果您的FTP client 會下達 "async ABOR" 這個指令時,這個設定才需要啟用
一般來說,由於這個設定並不安全,所以通常都是將他取消的!
check_shell=YES(NO)
如果您想讓擁有任何奇怪的shell 的使用者(在 /etc/passwd 的 shell 欄位)
可以使用vsftpd 的話,這個設定可以設定為 NO 喔!
one_process_model=YES(NO)
這個設定項目比較危險一點~當設定為YES 時,表示每個建立的在線上
都會擁有一支process 在負責,可以增加 vsftpd 的效能。不過,
除非您的系統比較安全,而且硬體配備比較高,否則容易耗盡系統資源喔!
一般建議設定為NO 的啦!
當然我們都習慣支持TCP Wrappers 的啦!所以設定為 YES 吧!
xferlog_enable=YES(NO)
當設定為YES 時,使用者上傳與下載檔案都會被紀錄起來。記錄檔案
與下一個設定項目有關:
xferlog_file=/var/log/vsftpd.log
如果上一個xferlog_enable=YES 的話,這裡就可以設定了!
這個是登錄檔的檔名啦!
xferlog_std_format=YES(NO)
是否設定為wu ftp 相同的登錄檔格式?!預設為 NO ,因為登錄檔會比較容易讀!
不過,如果您有使用wu ftp 登錄檔案的分析軟體,這裡才需要設定為 YES
nopriv_user=nobody
我們的 vsftpd預設以 nobody 作為此一服務執行者的許可權。因為 nobody 的許可權
相當的低,因此即使被入侵,入侵者僅能取得nobody 的許可權喔!
pam_service_name=vsftpd
這個是 pam模組的名稱,我們放置在 /etc/pam.d/vsftpd 即是這個咚咚!
vsftpd.conf配置:
1、默認配置:
anonymous_enable=YES #允許匿名用戶訪問
local_enable=YES #允許
本地用戶訪問
write_enable=YES #具有寫許可權
local_umask=022 #本地用戶創建檔案或目錄的掩碼
connect_from_port_20=YES #開啟20連線埠
2、允許匿名用戶具有寫許可權(上傳/創建目錄)
在默認配置下添加以下內容:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_world_readable_only=NO 允許匿名帳號寫 另外還需具有所有許可權的目錄
3、禁止本地所有用戶瀏覽其他目錄的許可權(除了home目錄,匿名用戶本身只能訪問home目錄)
在默認配置下添加以下內容:
chroot_local_user=YES
在默認配置下添加以下內容:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
另外再創建檔案/etc/vsftpd.chroot_list,並添加需要禁止的用戶。
5、性能選項
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=50000 #本地用戶的最高速率
anon_max_rate=30000 #匿名用戶的最高速率
修改/etc/passwd檔案的用戶家目錄可以改變用戶登錄的目錄
修改/etc/passwd檔案的用戶的登錄shell為/sbin/nologin,則不能用於本地登錄,可以用於ftp登錄。
/etc/xinetd.d/vsftpd檔案的主要內容:(“=”前後有空格)
only_from = 192.168.1.1|192.168.1.0/24 #只接收來至某ip或
網段no_access = 192.168.3.2|192.168.3.0/24 #拒絕接收來至某ip或網段
access_times = 8:00-17:00 #設定訪問時間
instances = 200 #設定最大連線數
per_source = 5 #設定每個ip可有幾個連線
/etc/vsftpd/vsftpd.conf 主配置檔案
/etc/vsftpd.ftpusers 阻止用戶訪問FTP伺服器的用戶名稱清單
/etc/vsftpd.userlist 控制用戶訪問FTP伺服器的用戶名稱清單,由/etc/vsftpd/vsftpd.conf中的
userlist_deny參數決這是允許還是拒絕
使用技巧
限制不同下載速度
操作步驟
1.安裝vsftp,並啟用
2.編輯: sudo vim /etc/vsftpd/vsftpd.conf
(就是對vsftpd進行配置)
可以通過命令:lftp 172.18.176.12 來查看。
如: yu@yu-laptop:/home/ftp$ lftp 172.17.184.24
lftp 172.17.184.24:~> ls (查看)
-rw-r--r-- 1 1000 1000 83643 Jul 12 10:34 023w.jpg
ftp 172.17.184.24:~> bye (退出)
3.新增/etc/vsftpd/userconf
4./etc/vsftpd/userconf下增加test1
編輯test1
test1 local_max_rate=25000 (下載速度單位為位元組 B)
5./etc/vsftpd/userconf下增加test2
編輯test2
test2 local_max_rate=30000
6.service vsftpd restart
與Tcp_wrapper結合
1.編輯/etc/vsftpd/vsftpd.conf
tcp_wrapper=yes
2.編輯/etc/hosts.deny
vsftpd:192.168.0 10.0.0 192.168.1.3 :deny
ALL:ALL:ALLOW
3.效果 192.168.0段的和10.0.0
網段 及192.168.1.3不能訪問當前
ftp伺服器。其他地址的可以訪問
併入xinetd 配置方法
1.編輯/etc/vsftpd/vsftpd.conf
listen=no
2.新增/etc/xinetd.d/vsftpd
service vsftpd
{
disable=no
socket_type=stream
wait=no
user=root
service=/usr/sbin/vsftpd
port=21
log_no_success+=PID HOST DURATION
log_no_failure+=HOST
}
3.service xinetd restart
vsftpd 設定用戶目錄
增加一個用戶ftpuser並設定其目錄為/opt/ftp:
2 修改vsftpd.conf
vi /etc/vsftpd/vsftpd.conf
將底下三行
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
改為
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
3 增加用戶ftpuser並設定其目錄為/opt/ftp
useradd -g ftpgroup -d /opt/ftp -M ftpuser
4 設定用戶口令 passwd ftpuser
5 編輯chroot_list檔案:
vi /etc/vsftpd/chroot_list
內容為ftp用戶名,每個用戶占一行,如:
ftpuser
6 重新啟動vsftpd:
/sbin/service vsftpd restart
註:可能需要設定/opt/ftp資料夾的許可權:chmod 777 /opt/ftp
安裝
ubuntu系統如下:
centos系統如下:
yum -y install vsftpd
以Tarball 安裝
可自行找尋版本安裝。這裡以 1.2.0 這一版來安裝 vsftpd在 Mandrake 9.0 上面(註:如果是 Red Hat 的系統,原本就有 vsftpd了,所以使用 RPM 安裝比較好!至於其它沒有提供 vsftpd RPM 檔案的 distribution就可以使用 Tarball )1. 下載與
解壓縮:
[root@testroot]# wget \
> ftp://XX/users/cevans/vsftpd-1.2.0.tar.gz
[root@testroot]#cd /usr/local/src
[root@testroot]# tar -zxvf /root/vsftpd-1.2.0.tar.gz
[root@testroot]#cd vsftpd-1.2.0/
# 在這個目錄下有個INSTALL 與 README 請務必察看喔!
2. 開始編譯與安裝
# vsftpd 預設安裝的路徑為:
# 所有可執行檔放置在/usr/local/sbin 裡面;
# man page放置在 /usr/local/man/man5 與 /usr/local/man/man8
# 若 superdaemon 為 xinetd 時,會複製一份啟動檔案到 /etc/xinetd.d 去!
# 編譯的過程可能有warning 的訊息,只要不是 Error 就可以不理他!
# 將 PAM 身份認證模組給他放進去系統裡面!
# 建立 ftp這個使用者以及他的家目錄:
# 若本來就存在ftp 這個使用者,那就不需要進行新增!
# 建立 vsftpd需要的特殊目錄
3. 如果需要移除時:
# 如果想要移除vsftp 時,可以這樣做
# 因為剛剛安裝只有安裝這幾個檔案而已說!所以啦,vsftpd 真的是挺安全的說!
4. 測試:
# 先確認一下xinetd.d 有沒有問題再說:
[root@testroot]#vi /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
log_on_success +=DURATION USERID
log_on_failure +=USERID
nice = 10
disable = no
}
[root@testroot]#/etc/rc.d/init.d/xinetd restart
[root@testroot]# ftp localhost
ftp localhost
Connected tolocalhost.
220 (vsFTPd1.2.0)
530 Pleaselogin with USER and PASS.
530 Pleaselogin with USER and PASS.
KERBEROS_V4rejected as an authentication type
Name (localhost:root):anonymous
# 這樣就表示vsftpd 已經可以正確的啟動了,不過因為我們還沒有設定好
# /etc/vsftpd.conf,所以會有無法登入的問題!沒關係,
# 等一下設定好就OK 了!
安裝的過程真的是很簡單,不過, vsftpd.conf 這個檔案放置的地點在 RPM與 Tarball 則可能有點不一樣,需要給他特別留意呢!例如 Red Hat 9 預設放置在/etc/vsftpd/vsftpd.conf ,而 Tarball 則預設放置在 /etc/vsftpd.conf 裡面說!
檔案清單
/etc/sbin/vsftpd:服務檔案。redhat 9.0為/etc/rc.d/init.d/vsftpd
/etc/vsftpd.conf:配置檔案。redhat 9.0為/etc/vsftpd/vsftpd.conf
/etc/vsftpd.ftpusers:不能用於ftp登錄的用戶。
/var/ftp:默認的匿名用戶(anonymous或ftp,無密碼)登錄的目錄。
版本發布
2011年03月13日,vsftpd 2.3.4 發布,Linux的FTP伺服器,該版本修復了一個潛在的 DoS 漏洞 (CVE-2011-0762) ,該漏洞可能導致客戶端致使伺服器耗盡CPU的處理時間,還包括其他的一些小bug修復。
2012年04月10日,vsftpd 3.0.0 正式版發布。