歡迎您光臨本站 註冊首頁

Ubuntu下安裝和配置Vsftpd

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

Ubuntu下安裝和配置Vsftpd

stand alone和super daemon
stand alone指的是一直運行vsftpd,佔用資源,提供ftp服務。super daemon指的是有需要時由xinetd啟動vsftpd服務。如果伺服器不是那種長期開ftp,提供大量的上傳下載服務的話,會選擇後者。
安裝
安裝


1sudo apt-get install vsftpd


查看是否打開21埠

12sudo netstat -npltu | grep 21tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      15601/vsftpd


登錄

1ftp localhost


輸入Ubuntu的用戶名、密碼登錄

1ls


會顯示home目錄的文件

文件結構
匿名用戶根路徑

1/srv/ftp


配置文件

1/etc/vsftpd.conf


查閱配置文件詳細信息

1man 5 vsftpd.conf


設定log保存位置,默認如下

1xferlog_file=/var/log/vsftpd.log

運行
standalone
最普遍的方式


1sudo service vsftpd start


super daemon
需要修改vsftpd.conf

1listen=NO


這裡若不改成NO,會出現下列錯誤

1500 OOPS: could not bind listening IPv4 socket


安裝xinetd

1sudo apt-get install xinetd



1sudo vi /etc/xinetd.conf service ftp



12345678910{        socket_type             = stream        wait                    = no        user                    = root        server                  = /usr/sbin/vsftpd        log_on_success          += DURATION USERID        log_on_failure          += USERID        nice                    = 10        disable                 = no}


停止vsftpd,啟動xinetd

1sudo service vsftpd stop



1sudo service xinetd start


查看埠

12sudo netstat -tulnp| grep 21tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      16787/xinetd

/etc/vsftpd.conf


123456789101112131415161718192021222324252627282930313233listen=<YES/NO> :設置為YES時vsftpd以獨立運行方式啟動,設置為NO時以xinetd方式啟動(xinetd是管理守護進程的,將服務集中管理,可以減少大量服務的資源消耗)listen_port=<port> :設置控制連接的監聽埠號,默認為21listen_address=<ip address> :將在綁定到指定IP地址運行,適合多網卡connect_from_port_20=<YES/NO> :若為YES,則強迫FTP-DATA的數據傳送使用port 20,默認YESpasv_enable=<YES/NO> :是否使用被動模式的數據連接,如果客戶機在防火牆后,請開啟為YESpasv_min_port=<n>pasv_max_port=<m> :設置被動模式后的數據連接埠範圍在n和m之間,建議為50000-60000埠message_file=<filename> :設置使用者進入某個目錄時顯示的文件內容,默認為 .messagedirmessage_enable=<YES/NO> :設置使用者進入某個目錄時是否顯示由message_file指定的文件內容ftpd_banner=<message> :設置用戶連接伺服器后的顯示信息,就是歡迎信息banner_file=<filename> :設置用戶連接伺服器后的顯示信息存放在指定的filename文件中connect_timeout=<n> :如果客戶機連接伺服器超過N秒,則強制斷線,默認60accept_timeout=<n> :當使用者以被動模式進行數據傳輸時,伺服器發出passive port指令等待客戶機超過N秒,則強制斷線,默認60accept_connection_timeout=<n> :設置空閑的數據連接在N秒后中斷,默認120data_connection_timeout=<n> : 設置空閑的用戶會話在N秒后中斷,默認300max_clients=<n> : 在獨立啟動時限制伺服器的連接數,0表示無限制max_per_ip=<n> :在獨立啟動時限制客戶機每IP的連接數,0表示無限制(不知道是否跟多線程下載有沒幹系)local_enable=<YES/NO> :設置是否支持本地用戶帳號訪問guest_enable=<YES/NO> :設置是否支持虛擬用戶帳號訪問write_enable=<YES/NO> :是否開放本地用戶的寫許可權local_umask=<nnn> :設置本地用戶上傳的文件的生成掩碼,默認為077local_max_rate<n> :設置本地用戶最大的傳輸速率,單位為bytes/sec,值為0表示不限制local_root=<file> :設置本地用戶登陸后的目錄,默認為本地用戶的主目錄chroot_local_user=<YES/NO> :當為YES時,所有本地用戶可以執行chrootchroot_list_enable=<YES/NO>chroot_list_file=<filename> :當chroot_local_user=NO 且 chroot_list_enable=YES時,只有filename文件指定的用戶可以執行chrootanonymous_enable=<YES/NO> :設置是否支持匿名用戶訪問anon_max_rate=<n> :設置匿名用戶的最大傳輸速率,單位為B/s,值為0表示不限制anon_world_readable_only=<YES/NO> 是否開放匿名用戶的瀏覽許可權anon_upload_enable=<YES/NO> 設置是否允許匿名用戶上傳anon_mkdir_write_enable=<YES/NO> :設置是否允許匿名用戶創建目錄anon_other_write_enable=<YES/NO> :設置是否允許匿名用戶其他的寫許可權(注意,這個在安全上比較重要,一般不建議開,不過關閉會不支持續傳)anon_umask=<nnn> :設置匿名用戶上傳的文件的生成掩碼,默認為077

先備份


1sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old


打開

1sudo vi /etc/vsftpd.conf


允許匿名訪問

12# Allow anonymous FTP? (Disabled by default)anonymous_enable=YES

上傳文件
允許匿名上傳


123write_enable=YESanon_mkdir_write_enable=YESanon_upload_enable=YES


注意2點:
1.匿名用戶就是ftp,想要匿名用戶寫入,必須文件夾的許可權為ftp可寫。
2.匿名用戶的根目錄不允許寫,所以根目錄的許可權絕對不能是ftp可寫和其他用戶可寫,如果根目錄所有者為ftp的話,所有者的許可權也不能寫。
所以解決方法是建個單獨的public文件夾用於上傳文件,設置其為ftp可寫或」其他用戶可寫「
還可建個download文件夾只用於下載,設置其他用戶沒有寫許可權便可。
重命名、刪除文件
開放重命名,刪除文件等許可權,不開的話沒法續傳。


1anon_other_write_enable=YES

僅能上傳,無法下載


12345write_enable=YESanon_mkdir_write_enable=YESanon_upload_enable=YESchown_uploads=YESchown_username=root


上傳的文件所有者被改為root,匿名用戶的ftp用戶就無法讀取,下載了。
認證FTP配置
設定vsftp認證系統用戶,並允許他們上傳文件,編輯 /etc/vsftpd.conf:


12local_enable=YESwrite_enable=YES


重啟vsftp

1sudo service vsftpd restart


系統用戶登錄ftp便進入他們的home目錄
Chroot
限制所有
限制登錄用戶訪問其他目錄,改之前登錄顯示的路徑比如是 ~ ,改之後則是 /。
效果是像這樣的。
註:我的本地用戶(local user為yeshuai,home directory為/home/yeshuai)


12345678910111213root@ubuntu:~# ftp localhostConnected to localhost.220 (vsFTPd 2.3.2)Name (localhost:yeshuai): yeshuai 331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp>ftp> pwd'''257 "/"'''


看上邊,正常情況下,輸入pwd時,應該是顯示/home/yeshuai.
由於我做了chroot.所以,/home/yeshuai變成 /

1chroot_local_user=YES

開放所有,限制特定
可指定一組用戶限制


123chroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list


隨後創建列表

1sudo vi  /etc/vsftpd.chroot_list


一行一個用戶名 重啟vsftp

1sudo service vsftpd restart

限制所有,開放特定
上面的規則是限制 /etc/vsftpd.chroot_list 中的用戶,反過來限制一切,只解禁 /etc/vsftpd.chroot_list 的用戶。這樣:


123chroot_local_user=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list







《解決方案》

賬號登錄
/etc/ftpusers文件
該文件內的用戶一律禁止ftp連接,默認列表包括了root, daemon, nobody等。需要禁止某個用戶,添加進來便是。
這個文件是由PAM模塊的 /etc/pam.d/vsftpd 指定的


1234567891011root@ubuntu:~$ sudo cat /etc/pam.d/vsftpd# Standard behaviour for ftpd(8).auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so. # Standard pam includes@include common-account@include common-session@include common-authauth    required        pam_shells.so

userlist_file 文件
vsftpd自訂的列表,跟/etc/ftpusers類似,具體文件名和路徑是由用戶自己指定的。這邊設成 /etc/vsftpd.user_list
添加配置文件欄位:


123userlist_enable=YESuserlist_deny=YESuserlist_file=/etc/vsftpd.user_list

限制一切,開放特定
上述2個方法都是限制列表文件中的用戶,如果要反過來,限制一切用戶登錄,只允許列表文件中的用戶,用 userlist_file,這樣:


12userlist_enable=YESuserlist_deny=NO

root登錄
之所以限制root這類賬號登錄就是托上面幾個文件,要是你非要用系統賬號登錄,如上所述,將列表文件中的特定用戶名刪除便是。
主機訪問
tcp_wrappers配置
stand alone模式下提供基於主機的訪問控制的配置
tcp_wrappers 使用/etc/hosts.allow和/etc/hosts.deny兩個配置文件實現訪問控制,hosts.allow是一個許可 表,hosts.deny是一個拒絕表 在hosts.allow中也可以使用DENY,所以通常可以只使用hosts.allow來實現訪問控制。 對vsftpd而言,書寫hosts.allow有三種語法形式


1231: vsftpd:主機表 (設置允許訪問的主機表)2: vsftpd:主機表:DENY (設置拒絕訪問的主機表)3: vsftpd:主機表:setenv VSFTPD_LOAD_CONF 配置文件名 (對指定的主機使用另外的配置)


setenv VSFTPD_LOAD_CONF的值為指定的配置文件名,意圖是讓vsftpd守護進程讀取新的配置項來覆蓋主配置文件中的項,實現特定待遇 這有一個小例子來說明tcp_wrappers

1234功能:》1.拒絕192.168.2.0/24訪問》2.對192.168.1.0/24內的所有主機不作連接限制和最大傳輸速率限制》3.對其他主機的訪問限制為:每ip連接數為1,最大傳輸速率為10kb/s (在主配置文件中設置就好了)


首先保證設定

1tcp_wrappers=YES


然後編輯

1sudo vi /etc/hosts.allow



123vsftpd:192.168.2.0/24: DENY (阻止192.168.2.0子網的訪問)vsftpd:192.168.1.0/24 (允許192.168.1.0子網的訪問)vsftpd:192.168.1.0/24: setenv VSFTPD_LOAD_CONF /etc/xxx.conf (對192.168.1.0/24指定專有配置文件xxx.conf,xxx可以自己指定文件名,需要建立)


然後建立xxx.conf文件,並編輯 (建立文件可以用sudo touch /etc/xxx.conf建立)
super daemon限制主機訪問
只允許指定主機訪問
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置語句:


1only_from <主機表>


如 only_from 192.168.1.0 表示只允許192.168.1.0網段內的主機訪問。
指定不能訪問的主機


1no_access <主機表>


如:no_access 192.168.1.0 表示只有192.168.1.0網段內的主機不能訪問。
主機表
關於主機表的書寫形式,見下表:
訪問控制表時主機表的書寫語法


1234567選項值   含義Hostname 可解析的主機名IP Address 十進位表示的IP地址Net_name 在/etc/networks中定義的網路名x.x.x.0 x.x.0.0 x.0.0.0 0.0.0.0 0作為通配符看待。如:191.72.61.0匹配從191.72.61.0到191.72.61.255的所有IP地址。0.0.0.0表示匹配所有的IP地址x.x.x.{a,b,.} x.x.{a,b,.} x.{a,b,.} 指定主機表。如:191.72.61.{1,3,123}表示包含地址191.72.61.1、191.72.61.2和191.72.61.123IPAddress/netmask 定義要匹配的網路或子網。如:172.19.16/20匹配從172.19.16.0到172.19.31.255

限制
限制連接數
前者為伺服器最大支持連接數,後者為每個ip允許最多連接數。


12max_clients=數字max_per_ip=數字


錯誤提示分別是

123root@ubuntu:~$ ftp localhostConnected to localhost.421 There are too many connected users, please try later.



123root@ubuntu:~$ ftp localhostConnected to localhost.421 There are too many connections from your internet address.

限制下載速度
單位是位元組,所以需要換算。比如我想讓匿名用戶和vsFTP上的用戶都以80KB下載,所以這個數字應該是1024×80=81920


12anon_max_rate=數字 #匿名用戶下載速度local_max_rate=數字 #普通用戶下載速度

super daemon限制連接數
instances 是伺服器最多的連接數,per_source 是單個IP地址最多的連接數。


1234567891011121314service ftp{        socket_type             = stream        wait                    = no        user                    = root        server                  = /usr/sbin/vsftpd        server_args             = /etc/vsftpd.conf        log_on_success          += DURATION USERID        log_on_failure          += USERID        nice                    = 10        disable                 = no        per_source              = 10        instances               = 10}


錯誤提示都是

123root@ubuntu:~$ ftp localhostConnected to localhost.421 Service not available, remote server has closed connection


定製錯誤提示,添加

1banner_fail       = /etc/vsftpd.busy_banner


編輯提示內容

1sudo vi /etc/vsftpd.busy_banner


比如

123root@ubuntu:~$ ftp localhostConnected to localhost.伺服器大姨媽中

歡迎信息


1dirmessage_enable=YES


然後編輯各用戶home目錄下的.message

1vi .message



12root@ubuntu:~$ cat .message歡迎來到vsftpd



1234567891011root@ubuntu:~$ ftp localhostConnected to localhost.220 (vsFTPd 2.2.2)Name (localhost:qii): qii331 Please specify the password.Password:230-歡迎來到vsftpd230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp>


若是匿名用戶,就放到

1/var/ftp

虛擬路徑
比如我的ftp的默認目錄是/srv/ftp,我想把/mnt/LinG/WinSoft文件夾,映射到/srv/ftp目錄中,我就如下操作 命令:


1#mount --bind [原有的目錄] [新目錄]


先創建文件夾

1sudo mkdir /srv/ftp/WinSoft


執行mount命令

1sudo mount --bind /mnt/LinG/WinSoft /srv/ftp/WinSoft


《解決方案》

敢再亂一點嗎
《解決方案》

dexter_yccs 發表於 2013-06-06 10:26 static/image/common/back.gif
敢再亂一點嗎

拷貝粘貼過來的,sorry、

[火星人 ] Ubuntu下安裝和配置Vsftpd已經有681次圍觀

http://coctec.com/docs/service/show-post-11423.html