2011年4月10日 星期日

vsftp的設定檔教學


vsftp的設定檔教學,轉貼自http://60.248.128.85/bbs/dispbbs.asp?boardid=62&id=24962&star=1&page=1
對於ftp的設定很有幫助。

V S F T P
環境:FedoraCore 8 i386DVD 版)
套件:vsftpd-2.0.5-19.fc8(光碟片預設套件版本)
主要設定檔:/etc/vsftpd/vsftpd.conf

啟動:service vsftpd start停止:service vsftpd stop重新啟動:service vsftpd restart(先將服務停止之後在重新啟動服務)
重取設定檔:service vsftpd reload(將服務的設定檔案重新載入,常用於設定檔修改之後)

閱讀說明:
**紅色的字體為注意事項 **
**紫色的字體為設定檔 **
**藍色的字體為 Mason個人的解釋與見解 **
**某些項目雖然預設值為YES,但是項目被註解掉,所以會寫成預設值為不允許**
**由於設定檔都是長,為了簡化項目,只列出常被使用的**
**為了方便說明,設定檔的項目可能會前後調動,建議用search的方式做尋找**
**綠色字體某些項目在設定檔案中找不到,可以自行加入**
**root 提示字元 #字號 **
**兩個連續的 *號為註解 **


前期設定:
#mkdir -p /home/ftpuser
設定FTP使用者集中目錄路徑,這是Mason個人習慣

#echo “ftpuser:x:10000:jovi,candy” >> /etc/group
增加一個FTP使用者的群組,這是Mason個人習慣

#chown root.ftpuser /home/ftpuser
#chmod 775 ftpuser
更改目錄的群組以及權限

#useradd -u 10001 -d /home/ftpuser/jovi -s /sbin/nologin jovi
#useradd -u 10002 -d /home/ftpuser/candy -s /sbin/nologin candy
-u指定UID
-d指定使用者家目錄
-s/sbin/nologin的意思是不允許這個帳號在本機登入。
這個項目很特別,他允許帳號遠端使用MailFTP等服務,但是卻不允許帳號在本機登入。為了安全性的考量,Mason把能su - root以外的帳號都設定成nologin

#passwd jovi
#passwd candy
設定密碼
先從主要設定檔案開始看起:
**底下所有預設值依照套件版本不同可能會有所變更,無需特別在意**

是否允許匿名登入(預設為允許)
anonymous_enable=YES
通常會取消匿名登入的項目,純粹提供下載的FTP主機則例外。

本地端帳號是否允許登入(預設為允許)
local_enable=YES
請別誤會此項目,可以登入FTP不代表可以登入本地端主機。

是否允許寫入(預設為允許)
write_enable=YES
簡單的說就是是否允許上傳。

設定local帳號的umask(預設值為:022
local_umask=022
檔案上傳之後權限會變成644
建立目錄之後權限會變成755
關於umask的其餘項目,請自行搜尋相關文件。

設定anon帳號是否能上傳(預設值為不允許)
#anon_upload_enable=YES
通常不會開放匿名使用者上傳檔案。若是開放,檔案的擁有者與群組為:ftp

設定anon帳號是否能建立目錄(預設值為不允許)
#anon_mkdir_write_enable=YES
通常不會開放匿名使用者建立目錄。若是開放,目錄的擁有者與群組為:ftp

設定anon帳號的umask(建議預設值為:077
#anon_umask=077
檔案上傳之後權限會變成600
建立目錄之後權限會變成700
關於umask的其餘項目,請自行搜尋相關文件。

切換目錄時是否顯示.message檔案的內容(預設值為:YES
dirmessage_enable=YES
使用者切換至某個目錄時會顯示該目錄下.message(預設)檔案的內容。當然您也可以透過message_file 參數來指定不同的檔名。

 
設定訊息的檔案名稱
message_file=.message預設.message,配合上一個參數來使用。

是否要紀錄Log檔(預設值為:YES
xferlog_enable=YES是否要將client上傳及下載的資訊記錄下來,若設定YES,則記錄這些資訊的檔案是由xferlog_file或 xferlog_std_format參數來決定。

記錄Log的檔案位置(預設值為NO
#xferlog_file=/var/log/vsftpd.log
如果FTP的服務是常開的,建議將Log檔案獨立,以利分析。
是否採用標準的Log格式做紀錄檔(預設值為:YES
xferlog_std_format=YES
是否啟用標準的ftpd xferlog格式來作為記錄檔,若設定成YES,則上傳下載的資訊將會記錄在/var/log/xferlog內。另外若xferlog_file註解去掉且 xferlog_std_format=YES時,會以xferlog_file為主,所以常見的作法為開啟xferlog_file,但是導回/var/log/xferlog檔案內。

傳輸資料的Port20(預設值為:YES
connect_from_port_20=YES在主動模式下建立資料通道時,是否啟用Port20作為FTP_Data的傳輸Port

基於安全性的考量,我們不會採用標準的Port作為FTPPort號,所以Mason通常會將設定檔的相關項目設定成這樣:
#connect_from_port_20=YES
listen_port=2121
pasv_enable=YES
pasv_min_port=9961
pasv_max_port=9966
這樣一來FTP-Server會採用PASV模式(請自行搜尋相關文件),並且使用2121Port作為監聽Port,並且由主機主動提供9961~9966Port來做通訊端,如此一來安全性就會提高。更重要的是,通常都有防火牆的存在,使用PASV模式,比較不用擔心被阻攔的問題。
*這時候Client端的連線要使用passivemode

是否允許chown,以及要換成哪一個帳號(預設值為:NO& whoever
#chown_uploads=YES
#chown_username=whoever
在特殊狀況下,會採用這個項目。例如:匿名使用者可以上傳,但是上傳的檔案要給某個帳號做管理,通常會搭配umask以及Filesystem permission來做。

閒置過久斷線時間(預設值為600
#idle_session_timeout=600
這個項目通常沒有作用了,因為Client端的FTP軟體常常會主動送訊號保持連線。

是否允許ascii模式上傳&下載(預設值為:NO
#ascii_upload_enable=YES
#ascii_download_enable=YES
用到機率不高,使用預設值即可。

歡迎訊息(預設不顯示)
#ftpd_banner=Welcome to blah FTPservice.設定使用者登入時所顯示的歡迎訊息,您可將註解拿掉,然後輸入想讓使用者登入時看到的歡迎訊息。




設定匿名使用者登入時要拒絕的E-mail
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
deny_email_enable設定成 YES時,可以把所要拒絕登入的E-Mail密碼設定在預設的/etc/vsftpd.banned_emails檔案內。不過請您注意一點,當deny_email_enable=YES時,如預設的 vsftpd.banned_emails檔案並不存在,會造成所有的匿名使用者都無法登入。

限制本地端的帳號登入之後是否chroot(預設值為:NO
chroot_local_user=YES若設定成YES,帳號登入後就只能在家目錄下活動,無法切換到家目錄以外的範圍。
是否啟動chroot的清單檔案(預設值為:NO
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_listchroot_local_user=NOchroot_list_enable=YES時,可搭配 chroot_list_file參數,把一些使用者帳號寫入預設的/etc/vsftpd.chroot_list檔案之中,這樣一來這些使用者就只能在自己家目錄下活動。但若反過來,當chroot_local_user=YESchroot_list_enable=YES時,則在/etc/vsftpd.chroot_list之中的帳號就可以在家目錄外活動,而沒設定在此檔之中的使用者就只能以家目錄作為預設的根目錄。
/etc/vsftpd.chroot_list
檔案格式是一行一個帳號。

使用者帳號列表(預設值為:YES
userlist_enable=YES設定成YES時表示vsftpd會載入userlist_file參數所指定的檔案,以讀取其內的使用者名單。

拒絕登入的帳號列表(預設值為:YES
userlist_deny=YES
userlist_deny=YES時(這個是預設值),則設定在userlist_file參數所指定的檔案內的使用者將會被拒絕登入。
userlist_deny=NO時,則只有設定在userlist_file參數所指定的檔案內的使用者能被允許登入,其他人則會被拒絕。
預設的user_list檔案在/etc/vsftpd/user_list檔案格式是一行一個帳號。

 
設定傳輸速度
anon_max_rate=50000
local_max_rate=200000
匿名登入者所能使用的最高速度為50KBytes/sec
本機的使用者最高速度為200KBytes/sec
設定為0的時候表示不限制速度

設定個人的傳輸速率
user_config_dir=/etc/vsftpd/limitdir我們可以指定一個目錄,並且在目錄裡面建立個別使用者的傳輸速率,比如想限定使用者jovi的傳輸速率,就在指定的目錄下去編輯一個檔案名稱叫做jovi的檔案,檔案的內容就是local_max_rate=傳輸速率,作法如下:
#mkdir -p /etc/vsftpd/limitdir
# vi/etc/vsftpd/limitdir/jovi
local_max_rate=20000
最大連線總數目(預設值為0
#max_clients=20限定最大連線數,預設值表示不限制連線數。

 
每一個IP最大連線數目(預設值為0
#max_per_ip=5
限定每個IP 最大連線數,預設值0表示不限制連線數。
本地端帳號登入之後是否將其轉換為訪客帳號(預設值為:NO
#guest_enable=YES
#guest_username=guest若設定成YES時,則可以利用guest_username參數來指定訪客的身份,若未指定,預設的身份為ftp

 
是否使用主機的時間為檔案及目錄建立的時間(預設值為:NO
#use_localtime=yes有時候您上傳檔案或建立新目錄後發覺怎麼這些檔案目錄的時間慢了n個小時,如果是這樣的話,將user_localtime設定成YES就行了。

vsftp支援tcp_wrappers(預設值為:YES
#tcp_wrappers=YES是否讓 /usr/sbin/vsftpd支援 tcp_wrappers,若設定成YES,則連線進來的封包將會經過/etc/hosts.allow/etc/hosts.deny的過濾。使用xinetd來啟動vsftpd的話,不管tcp_warppers參數設定為何,都會使用到tcp_wrappersd的過濾機制。


VSFTP加入xinetd服務的方式(通常用在嵌入式系統內,以節省記憶體的使用)
#vi /etc/xinetd.d/vsftpd
serviceftp
{
disable = no
socket_type = stream
wait = no
user= root
server = /usr/sbin/vsftpd
log_on_success += DURATIONUSERID
log_on_failure += USERID
}
接著修改vsftpd.conf
[root@fedoraroot]# vi/etc/vsftpd/vsftpd.conf

listen=NO
或者直接將該行註解起來,就等於採用預設值的意思。
最後重新啟動inetd# service xinetd restart




補上一個實用的範例:
假設某學校的老師開啟一個FTP的服務,讓學生可以使用匿名的方式登入(學生這麼多,光是建立帳號就夠受了,所以採用匿名的方式比較方便)。其中一個目錄是讓學生交作業使用的(目錄名稱為upload_work,作業一但上傳了之後就不能給其他學生下載(否則只要把別人的作業下載回去改一下就可以完成作業啦),如何達成這個目的呢?

建立目錄跟設定目錄的擁有者與群組以及目錄的權限
#mkdir -p /var/ftp/upload_work
#chown root.ftp /var/ftp/upload_work
#chmod 730 /var/ftp/upload_work

設定成匿名可以登入、上傳之後檔案變更擁有者為ftp、設定匿名的umask
#vi /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
chown_uploads=YES
chown_username=ftp
anon_umask=077

這一個範例是一個頗為經典的範例,既可以凸顯出目錄的權限設定,也可以顯示出FTP上傳後變更檔案擁有者以及umask的能力,透過彼此之間的搭配達到所需要的目的。

這個範例除了可以利用在學校之外,需要審核的地方也頗為實用,舉例來說:
某個目錄可以提供使用者上傳,但是上傳之後的檔案,需要經過管理者掃毒、評分、歸類等等活動之後,在提供給其他使用者下載。

補上第二個實用的範例:
如果沒有足夠的經驗,以下項目請盡量不要操作,一但操作失誤,可能導致FTP驗證模組損毀,造成FTP完全無法使用。

驗證模組:
/etc/pam.d/vsftp

時間模組設定檔:
/etc/security/time.conf

目的:
jovi這個帳號,星期一到星期五0900~1700才能登入,其餘時間拒絕登入。
candy這個帳號,星期一到星期五0800~1800才能登入,其餘時間拒絕登入。

#vi /etc/pam.d/vsftpd
#%PAM-1.0
session                optional        pam_keyinit.so        forcerevoke
auth                required        pam_listfile.soitem=user sense=deny file=/etc/vsftpd/ftpusersonerr=succeed
auth                required        pam_shells.so
auth                include                system-auth
account        required        pam_time.so(自己加入這一行)
account        include                system-auth
session                include                system-auth
session                required        pam_loginuid.so

# vi/etc/security/time.conf(在檔案的最底下加入兩行)
vsftpd;*;jovi;MoTuWeThFr0900-1700
vsftpd;*;candy;MoTuWeThFr0800-1800

如此一來就可以限制登入的時間了。

沒有留言:

張貼留言