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、