vsftpd

vsftpd

vsftpd 是一個 UNIX 類作業系統上運行的伺服器的名字,它可以運行在諸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 伺服器不支持的特徵。此外,本文還介紹了FTP基本原理,以及FTP用戶管理方面的基礎知識。

簡介

vsftpd vsftpd

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 內的賬號才能以

實體用戶的方式登入我們的vsftpd 主機喔!

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(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

4、禁止部分本地用戶瀏覽其他目錄的許可權

在默認配置下添加以下內容:

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 (退出)

use_config_dir=/etc/vsftpd/userconf

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:

1 增加組 groupadd ftpgroup

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系統如下:

sudo apt-get install vsftpd

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 去!

[[email protected]]#make

# 編譯的過程可能有warning 的訊息,只要不是 Error 就可以不理他!

[[email protected]]# make install

[[email protected]]#cp vsftpd.conf /etc

# 將 PAM 身份認證模組給他放進去系統裡面!

[[email protected]]#cp RedHat/vsftpd.pam /etc/pam.d/vsftpd

# 建立 ftp這個使用者以及他的家目錄:

# 若本來就存在ftp 這個使用者,那就不需要進行新增!

[[email protected]]# useradd -M ftp -d /var/ftp

[[email protected]]# mkdir -p /var/ftp

[[email protected]]#chown root:root /var/ftp

[[email protected]]#chown 755 /var/ftp

# 建立 vsftpd需要的特殊目錄

[[email protected]]#mkdir -p /usr/share/empty

3. 如果需要移除時:

# 如果想要移除vsftp 時,可以這樣做

[[email protected]]# rm /usr/local/sbin/vsftpd

[[email protected]]# rm /usr/local/man/man5/vsftpd.conf.5

[[email protected]]# rm /usr/local/man/man8/vsftpd.8

[[email protected]]# rm /etc/xinetd.d/vsftpd

[[email protected]]# rm /etc/vsftpd.conf

# 因為剛剛安裝只有安裝這幾個檔案而已說!所以啦,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 正式版發布。

相關詞條

熱門詞條

聯絡我們