原文發表於cu:2016-03-11 參考文檔: 一.環境 OS CentOS6.7 x86_64 網路 Sever:192.168.1.254 Client:192.168.1.100 二.安裝與配置 1. 安裝 使用yum安裝即可:yum install vsftpd -y 2. 軟體模塊 3. ...
原文發表於cu:2016-03-11
參考文檔:
- FTP原理:http://vbird.dic.ksu.edu.tw/linux_server/0410vsftpd_1.php
- FTP配置:http://vbird.dic.ksu.edu.tw/linux_server/0410vsftpd_2.php
- 虛擬用戶配置:http://yuanbin.blog.51cto.com/363003/129071
一.環境
OS
CentOS6.7 x86_64
網路
Sever:192.168.1.254
Client:192.168.1.100
二.安裝與配置
1. 安裝
使用yum安裝即可:yum install vsftpd -y
2. 軟體模塊
/etc/vsftpd/vsftpd.conf vsftpd的配置文件,相關參數設定主要在這個文件進行。 /etc/pam.d/vsftpd vsftpd使用 PAM 模塊時的相關配置文件,主要用來作為身份認證之用,還有一些用戶身份的抵擋功能, 也是透過這個檔案來達成的。 /etc/vsftpd/ftpusers 與/etc/pam.d/vsftpd文件有關,也就是 PAM 模塊中所指定的那個無法登入的用戶配置文件。這個檔案的設定簡單,只要將“不想讓他登入 FTP 的賬號”寫入這個文件即可。 /etc/vsftpd/user_list 這個文件是否生效與vsftpd.conf內的兩個參數有關,分別是“userlist_enable”與“userlist_deny”,會根據vsftpd.conf配置文件內的userlist_deny={YES/NO}不同而不同(設置為YES時,是阻止user_list中的賬號登入;設置為NO時,是允許user_list中的賬號登入)。 /etc/vsftpd/ftpusers是PAM模塊的安全設定文件,而/etc/vsftpd/user_list是vsftpd自定義的安全設定文件。 這個文件與/etc/vsftpd/ftpusers幾乎一樣,在預設情況下,可以將不希望可登入vsftpd賬號寫入這裡。 /etc/vsftpd/chroot_list 此文件預設是沒有的,需要手工建立,主要作用是將某些賬號chroot在其家目錄。 文件是否生效與vsftpd.conf的“chroot_list_enable”與“chroot_list_file”兩個參數有關。 /usr/sbin/vsftpd vsftpd的執行文件。 /var/ftp/ vsftpd預設匿名賬戶登入根目錄,與ftp賬號的家目錄有關。
3. 配置文件簡介
以下列出主要的一些配置項供參考。
伺服器環境較相關的設置
connect_from_port_20=YES (NO) 主動式FTP伺服器port,ftp-data的埠。 #主動式ftp指server接到client的ftp請求後,由server的20埠主動連接client告知的數據接收port,建立數據傳輸通道; #被動式ftp指server接到client的ftp請求後,隨機選取大於1024的port告知client,由client主動發起ftp數據通道連接; #在有ftp的server與client之間有防火牆或nat時,基本只能使用被動式ftp。 listen_port=21 vsftpd的命令通道port,如果要使用非正規的埠,在此修改;修改埠號指適合以stand alone方式來啟動的vsftpd(對於super daemon 無效)。 dirmessage_enable=YES (NO) 當ftp用戶進入某個目錄時,會顯示該目錄需要註意的內容,顯示的檔案預設是 .message ,可以使用下麵的設定項目來修改顯示內容。 message_file=.message 當dirmessage_enable=YES時,可以設定這個項目來讓vsftpd 尋找該文件來顯示信息。 listen=YES (NO) 如果設置為YES,表示vsftpd是以stand alone的方式來啟動;設置為NO時,vsftpd以super daemon方式啟動。 pasv_enable=YES (NO) 支持數據流的被動式聯機模式(passive mode),請設定為YES。 use_localtime=YES (NO) 是否使用本地時間?vsftpd預設使用GMT時間(格林威治),建議設置YES。 write_enable=YES (NO) 是否允許用戶上傳數據。 connect_timeout=60 單位是秒,在數據連接的主動式聯機模式下,發出的連接信號在 60 秒內得不到client響應,則不等待並強制斷線。 accept_timeout=60 當client以被動式PASV進行數據傳輸時,如果server端啟用passive port並等待client超過60秒而無響應,那麼就強制斷線。這個設置與connect_timeout類似,不過一個是管理主動聯機,一個管理被動聯機。 data_connection_timeout=300 如果server與client的數據聯機已經成功建立(不論主動還是被動聯機),但是可能由於線路問題導致300秒內沒有順利的完成數據傳送,那client的聯機就會被vsftpd 強制斷線。 idle_session_timeout=300 如果client在300 秒內都無命令動作,強制斷線。 max_clients=0 如果vsftpd 以stand alone方式啟動,那麼這個設定值可以設置在同一時間,最多有多少 client可以同時連上vsftpd。 max_per_ip=0 與max_clients類似,同一個IP同一時間可允許多少聯機。 pasv_min_port=0, pasv_max_port=0 與 passive mode 使用的port有關,如果你想要使用65400到65410這11個port來進行被動式聯機模式的連接,可以這樣設定pasv_max_port=65410以及 pasv_min_port=65400。 如果是 0 的話,表示隨機取用而不限制。 ftpd_banner=一些文字說明 當ftp用戶登入時,在 ftp client軟體上會顯示的說明文字。建議使用下麵的banner_file設定值取代這個項目。 banner_file=/path/file 指定某個純文本文件作為用戶登入vsftpd伺服器時所顯示的歡迎字眼。同時,也可以放置一些讓用戶知道本伺服器的目錄結構。
與實體用戶相關的設置
guest_enable=YES(NO) 設為YES時,任何實體賬戶,都會被假設成為guest (所以預設是NO)。guest在vsftpd 當中,預設取得ftp賬戶的相關許可權,但可以通過 guest_username來修改。 #使用虛擬賬戶登錄FTP時需要設置為YES。 guest_username=ftp 在 guest_enable=YES 時生效,指定guest的身份(虛擬賬戶統一獲得此設置賬號的許可權)。 local_enable=YES(NO) 此設置值必須要為YES時,在/etc/passwd內的賬號才能以實體用戶的方式登入vsftpd。 local_max_rate=0 實體用戶的傳輸速度限制,單位為bytes/secon,0為不限制。 chroot_local_user=YES(NO) 預設情況下,是否要將使用者限制在自己的家目錄之內(chroot)。如果是YES代表用戶預設就會被chroot;如果是NO,則預設不chroot。實際使用需要與下麵兩個參數互相參考。為了安全性,建議設置為YES。 chroot_list_enable=YES(NO) 是否啟用chroot寫入列表的功能。與下麵的chroot_list_flie有關。此值開啟時下麵的列表檔案才會生效。 chroot_list_file=/etc/vsftpd.chroot_list 如果chroot_list_enable=YES,那麼此設置生效。 userlist_enable=YES(NO) 是否藉助vsftpd的阻止機制來處理某些不受歡迎的賬號,與下麵的參數設定有關。 userlist_deny=YES(NO) 當userlist_enable=YES時才會生效。若設定為 YES 時,則當用戶賬號被列入到user_list文檔時,在該文檔內的賬號將不能登入vsftpd 伺服器;設置為NO時,則允許user_list中的賬號登入。該檔案文件名與下列設定項目有關。 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不可登入。 no_anon_password=YES(NO) 當設定為YES時,表示anonymous將會略過密碼檢驗步驟,而直接登入。 non_max_rate=0 單位為bytes/s,限制anonymous的傳輸速度,如果是0則不限制. anon_umask=077 限制anonymous上傳檔案的許可權。
關於系統安全方面的一些設置
ascii_download_enable=YES(NO) 如果設定為YES,那麼client優先(預設)使用ASCII 格式下載文件。 ascii_upload_enable=YES(NO) 使用ASCII 格式上傳文件,預設是NO。 one_process_model=YES(NO) 此設定值比較危險,當設置為YES時,表示每個建立的session都會有一個守護進程負責,可以增加vsftpd的性能。不過除非你的系統比較安全,而且硬體配備比較高,否則容易耗盡系統資源,一般建議設置為NO。 tcp_wrappers=YES(NO) 建議設置為YES 。 xferlog_enable=YES(NO) 當設定為YES時,用戶上傳與下載文件都會被紀錄起來,記錄文件與下麵的設置值相關。 xferlog_file=/var/log/xferlog 如果xferlog_enable=YES,這裡的設置就有效。 xferlog_std_format=YES(NO) 是否設置為wu ftp相同的登錄文件格式,預設是NO,因為登錄檔會比較容易讀。如果有使用wu ftp登錄文件的分析軟體,這裡需要設定為YES。 dual_log_enable=YES, vsftpd_log_file=/var/log/vsftpd.log 通常/var/log/xferlog只記錄上傳與下載,此設置可以開啟用戶登錄日誌。 nopriv_user=nobody vsftpd預設以nobody作為此服務執行者的許可權,因為nobody的許可權很低,因此即使被入侵,入侵者也僅能取得nobody的許可權。 pam_service_name=vsftpd pam模塊,一般放置為/etc/pam.d/vsftpd文件。
4. 必要的安全放行配置
SELinux
預設情況下,vsftpd不允許賬戶登入取得家目錄數據(登入使用dir,但不能取得任何數據),主要是由SELinux引起的。如下:
[root@localhost ~]# getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> off #將“allow_ftpd_full_access”與“ftp_home_dir”設置為“on”即可; #此兩項設置需要一點時間,勿著急。 [root@localhost ~]# setsebool -P allow_ftpd_full_access 1 [root@localhost ~]# setsebool -P ftp_home_dir 1 [root@localhost ~]# getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> on allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> on
iptables
FTP使用兩個埠,另有隨機啟用的數據流埠,及被動聯機的伺服器埠等,大概需要如下規則:
#加入iptables的“ip_nat_ftp”與“ip_conntrack_ftp”兩個模塊; #大概在底6行,以下兩者順序不可調換。 [root@localhost ~]# vim /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_conntrack_ftp" IPTABLES_MODULES="ip_nat_ftp" #開放port 21給訪問者使用; #開放隨機啟動的數據流埠給訪問者連接使用; #允許client大於1024的隨機埠主動發起數據通道連接,server端使用埠65401~65410響應。 [root@localhost ~]# vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 65401:65410 --sport 1024:65534 -j ACCEPT #重啟iptables service iptables restart
5. 虛擬賬戶配置
添加虛擬用戶及口令文件
#新建虛擬用戶文件 [root@localhost ~]# vim /etc/vsftpd/vftpuser.txt test1 #用戶名 123456 #密碼 test2 123456
生成虛擬用戶口令認證文件
將vftpuser.txt虛擬用戶口令文件轉換成系統可識別的口令認證文件。
#查看系統有沒有安裝生成口令認證文件所需的軟體db4-utils,如果沒有安裝採用rpm或者yum方式安裝。 [root@localhost ~]# rpm -qa | grep db4-utils #使用db_load命令生成虛擬用戶口令認證文件。 [root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
編輯vsftpd的PAM認證文件
#將文件中其他行都註釋掉,添加下麵這兩行: [root@CentOS5 /]#vi /etc/pam.d/vsftpd #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vftpuser account required pam_userdb.so db=/etc/vsftpd/vftpuser #路徑為生成的db路徑,去掉尾碼 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth
建立本地映射用戶並設置宿主目錄許可權
#所有的虛擬用戶需要映射一個系統用戶,此系統用戶不需要密碼,不可登入系統 [root@localhost ~]# useradd -d /home/vftpsite -s /sbin/nologin vftpuser #註意虛擬用戶家目錄的許可權問題,否則可能導致後面登入但無法讀寫 [root@localhost ~]# chown -R vftpuser:vftpuser /home/vftpsite
配置vsftpd.conf(虛擬用戶配置項相關)
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf guest_enable=YES #開啟虛擬用戶 guest_username=vftpuser #FTP虛擬用戶對應的系統用戶 pam_service_name=vsftpd #PAM認證文件
重啟vsftpd服務
[root@localhost ~]# service vsftpd restart
測試虛擬用戶登錄
C:\>ftp 192.168.1.254 連接到 192.168.1.254。 220 (vsFTPd 2.2.2) 用戶(192.168.1.254:(none)): test1 331 Please specify the password. 密碼: 230 Login successful. ftp> dir 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Mar 02 21:04 test 226 Directory send OK. ftp: 收到 62 位元組,用時 0.00秒 62.00千位元組/秒。 ftp>
6. 虛擬用戶高級設置
virtual_use_local_privs參數
#虛擬用戶與本地用戶有相同的許可權 virtual_use_local_privs=YES #虛擬用戶與匿名用戶有相同的許可權,預設是NO。 virtual_use_local_privs=NO
各虛擬用戶獨立的配置文件(未驗證)
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #在配置文件中指定一個存放各虛擬用戶獨立配置文件的目錄路徑,添加: user_config_dir=/etc/vsftpd/vftpuser_conf #編輯test1的配置文件: [root@localhost ~]# vim /etc/vsftpd/vftpuser_conf/test1 #可針對讀/寫/下載/上傳等獨立配置許可權,如: write_enable=YES #開放寫許可權 anon_world_readable_only=NO #開放下載許可權 anon_upload_enable=YES #開放上傳許可權 anon_mkdir_write_enable=YES #開放創建目錄許可權 anon_other_write_enable=YES #開放刪除與重命名許可權