- 論壇徽章:
- 0
|
0 關(guān)于本文檔
1 VSFTPD簡述
2 VSFTPD的安裝
2.1 RHL9+vsftpd-1.1.3-8.i386.rpm包的安裝
2.2 vsftpd-1.2.0.tar.gz的安裝
3 VSFTPD的文件結(jié)構(gòu)
4 VSFTPD的啟動(dòng)與停止
5 VSFTPD的設(shè)置選項(xiàng)
5.1 連接選項(xiàng)
5.1.1 監(jiān)聽地址與控制端口
5.1.2 FTP模式與數(shù)據(jù)端口
5.1.3 ASCII模式
5.2 性能與負(fù)載控制
5.2.1 超時(shí)選項(xiàng)
5.2.2 負(fù)載控制
5.3 用戶選項(xiàng)
5.3.1 匿名用戶
5.3.2 本地用戶
5.3.3 虛擬用戶
5.4 安全措施
5.4.1 用戶登錄控制
5.4.2 目錄訪問控制
5.4.3 文件操作控制
5.4.4 新增文件權(quán)限設(shè)定
5.5 提示信息
5.6 日志設(shè)置
5.7 其他設(shè)置
6 VSFTPD應(yīng)用
6.1 允許匿名用戶上傳文件
6.2 限制用戶在自家目錄
6.3 配置高安全級(jí)別的匿名FTP服務(wù)器
6.4 基于IP地址的虛擬FTP服務(wù)器
6.5 虛擬用戶的配置
6.5.1 VSFTPD的虛擬用戶介紹
6.5.2 用戶創(chuàng)建和目錄設(shè)置
6.5.3 配置文件的設(shè)置
6.5.3.1 基本設(shè)置
6.5.3.2 權(quán)限設(shè)置
6.5.3.3 虛擬用戶的其他配置
6.5.3.4 虛擬用戶個(gè)人目錄設(shè)置
6.5.4 MySQL保存虛擬用戶
0、關(guān)于本文檔
本文檔是個(gè)人的學(xué)習(xí)整理。允許大家翻閱,摘抄,引用。更歡迎指出其中不對(duì)之處。文檔的內(nèi)容主要來自VSFTPD自身文檔、個(gè)人學(xué)習(xí)心得以及網(wǎng)絡(luò)資料,若有類同,實(shí)屬正常,∶)。
本文檔基于RedHat Linux 9和VSFTPD-1.1.3-8。如果有不同版本,則有專門文字說明。
1、VSFTPD簡述
如果試問哪種FTP服務(wù)器最安全?那么在UNIX和Linux中,首推的就是VSFTP(Very Secure FTP Daemon,非常安全的FTP服務(wù)器)。顧名思義,VSFTPD設(shè)計(jì)的出發(fā)點(diǎn)就是安全性。同時(shí)隨著版本的不斷升級(jí),VSFTPD在性能和穩(wěn)定性上也取得了極大的進(jìn)展。象RedHat、SUSE、Debian、GNU、GNOME、KDE等一些大型站點(diǎn)都采用VSFTPD作為它們的FTP服務(wù)器。大家可以到http://vsftpd.beasts.org/了解它的最新情況。
2、VSFTPD的安裝
2.1、RHL9+vsftpd-.1.1.3-8.i386.rpm包的安裝
VSFTPD的安裝很簡單。在RHL9中,在圖形界面下依次執(zhí)行“Main Menu”-“System Settings”-“Add/Remove Applications”-選擇FTP服務(wù)器-“更新”,或者在字符界面中執(zhí)行以下命令,就可以完成安裝。
rpm -ivh vsftpd-1.1.3-8.i386.rpm
2.2、vsftpd-1.2.0.tar.gz的安裝
、艤(zhǔn)備條件
VSFTPD默認(rèn)配置中需要“nobody”用戶。在系統(tǒng)中添加此用戶,如果用戶已經(jīng)存在,useradd命令有相應(yīng)提示。
[root@hpe45 root]# useradd nobody
useradd: user nobody exists
VSFTPD默認(rèn)配置中需要“/usr/share/empty”目錄。在系統(tǒng)中此目錄,如果目錄已經(jīng)存在,mkdir命令有相應(yīng)提示。
[root@hpe45 root]# mkdir /usr/share/empty/
mkdir: cannot create directory '/usr/share/empty': File exists
VSFTPD提供匿名FTP服務(wù)時(shí),需要“ftp”用戶和一個(gè)有效的匿名目錄。
[root@hpe45 root]# mkdir /var/ftp/
[root@hpe45 root]# useradd -d /var/ftp ftp
接下來的操作對(duì)于ftp用戶是否已經(jīng)存在都是有用的。
[root@hpe45 root]# chown root.root /var/ftp
[root@hpe45 root]# chmod og-w /var/ftp
、凭幾gVSFTPD
從官方站點(diǎn)下載到/root目錄,執(zhí)行以下命令:
[root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz
[root@hpe45 root]# cd vsftpd-1.2.0
[root@hpe45 vsftpd-1.2.0]# make
、前惭b編譯好的VSFTPD
執(zhí)行“make install”將編譯好的二進(jìn)制文件、手冊(cè)等復(fù)制到相應(yīng)目錄。在RHL9上,可能需要手動(dòng)執(zhí)行以下復(fù)制:
[root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8
此外,“make install”沒有復(fù)制簡單的配置文件,建議執(zhí)行以下命令:
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc
、葹楸镜赜脩粼O(shè)置PAM
如果允許本地用戶登錄VSFTPD,執(zhí)行以下操作:
[root@hpe45 vsftpd-1.2.0]# cp
RedHat
/vsftpd.pam /etc/pam.d/ftp
3、VSFTPD的文件結(jié)構(gòu)
VSFTPD的文件結(jié)構(gòu)是很簡潔的,主要包括:
/usr/sbin/vsftpd ---- VSFTPD的主程序
/etc/rc.d/init.d/vsftpd ---- 啟動(dòng)腳本
/etc/vsftpd/vsftpd.conf ---- 主配置文件
/etc/pam.d/vsftpd ---- PAM認(rèn)證文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用戶列表文件
/etc/vsftpd.user_list ---- 禁止或允許使用VSFTPD的用戶列表文件
/var/ftp ---- 匿名用戶主目錄
/var/ftp/pub ---- 匿名用戶的下載目錄
此外,還有一些說明文檔和手冊(cè)文件。
此外VSFTPD的日志文件位于/etc/logrotate.d/vsftpd.log。
4、VSFTPD的啟動(dòng)與停止
VSFTPD可以單獨(dú)(Standalone)方式運(yùn)行,如同httpd、named這類的服務(wù)器的運(yùn)行方式,這是RHL9中默認(rèn)的方式;也可以采用xinetd方式運(yùn)行,這是RHL7.x、8中的默認(rèn)方式。具體的運(yùn)行方式由參數(shù)listen決定。從RHL中VSFTPD的運(yùn)行方式,也可以看出VSFTPD的逐步發(fā)展。
當(dāng)listen參數(shù)值為YES時(shí),RHL9中的默認(rèn)值,VSFTPD單獨(dú)運(yùn)行,我們可以使用腳本/etc/rc.d/init.d/vsftpd來啟動(dòng)、關(guān)閉以及重啟VSFTPD。命令如下:
/etc/rc.d/init.d/vsftpd start|stop|restart
如果說在RHL9上,您還希望使用Xinetd啟動(dòng)VSFTPD的運(yùn)行方式,那么首先要將vsftpd.conf配置文件中的listen參數(shù)值改為NO。其次,生成一個(gè)/etc/xinetd.d/vsftpd文件,內(nèi)容如下:
service vsftpd
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
port = 21
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
通過修改disable值為no或yes,并重新啟動(dòng)xinetd,從而啟動(dòng)或停止VSFTPD。
由于VSFTPD的單獨(dú)模式已經(jīng)擁有足夠的能力,所以后面6中討論到的應(yīng)用,都是以單獨(dú)模式來運(yùn)行的,而非Xinetd方式。
注:還可以直接執(zhí)行vsftpd來啟動(dòng)FTP服務(wù),關(guān)閉時(shí)使用“kill”命令。
[root@hpe45 root]# /usr/local/sbin/vsftpd &
5、VSFTPD的設(shè)置選項(xiàng)
VSFTPD的配置文件/etc/vsftpd/vsftpd.conf是個(gè)文本文件。以“#”字符開始的行是注釋行。每個(gè)選項(xiàng)設(shè)置為一行,格式為“option=value”,注意“=”號(hào)兩邊不能留空白符。除了這個(gè)主配置文件外,還可以給特定用戶設(shè)定個(gè)人配置文件,具體介紹見后。
VSFTPD包中所帶的vsftpd.conf文件配置比較簡單,而且非常偏執(zhí)狂的(文檔自稱:-))。我們可以根據(jù)實(shí)際情況對(duì)其進(jìn)行一些設(shè)置,以使得VSFTPD更加可用。
5.1、連接選項(xiàng)
本部分主要是一些與建立FTP鏈接相關(guān)的選項(xiàng)。
5.1.1、監(jiān)聽地址與控制端口
listen_address=ip address
此參數(shù)在VSFTPD使用單獨(dú)(standalone)模式下有效。此參數(shù)定義了在主機(jī)的哪個(gè)IP地址上監(jiān)聽FTP請(qǐng)求,即在哪個(gè)IP地址上提供FTP服務(wù)。對(duì)于只有一個(gè)IP地址的主機(jī),不需要使用此參數(shù)。對(duì)于多址主機(jī),不設(shè)置此參數(shù),則監(jiān)聽所有IP地址。默認(rèn)值為無。
listen_port=port_value
指定FTP服務(wù)器監(jiān)聽的端口號(hào)(控制端口),默認(rèn)值為21。此選項(xiàng)在standalone模式下生效。
5.1.2、FTP模式與數(shù)據(jù)端口
FTP 分為兩類,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。這兩種FTP在建立控制連接時(shí)操作是一樣的,都是由客戶端首先和FTP服務(wù)器的控制端口(默認(rèn)值為21)建立控制鏈接,并通過此鏈接進(jìn)行傳輸操作指令。它們的區(qū)別在于使用數(shù)據(jù)傳輸端口(ftp-data)的方式。PORT FTP由FTP服務(wù)器指定數(shù)據(jù)傳輸所使用的端口,默認(rèn)值為20。PASV FTP由FTP客戶端決定數(shù)據(jù)傳輸?shù)亩丝凇ASV FTP這種做法,主要是考慮到存在防火墻的環(huán)境下,由客戶端與服務(wù)器進(jìn)行溝通(客戶端向服務(wù)器發(fā)出數(shù)據(jù)傳輸請(qǐng)求中包含了數(shù)據(jù)傳輸端口),決定兩者之間的數(shù)據(jù)傳輸端口更為方便一些。
port_enable=YES|NO
如果你要在數(shù)據(jù)連接時(shí)取消PORT模式時(shí),設(shè)此選項(xiàng)為NO。默認(rèn)值為YES。
connetc_from_port_20=YES|NO
控制以PORT模式進(jìn)行數(shù)據(jù)傳輸時(shí)是否使用20端口(ftp-data)。YES使用,NO不使用。默認(rèn)值為NO,但RHL自帶的vsftpd.conf文件中此參數(shù)設(shè)為YES。
ftp_data_port=port number
設(shè)定ftp數(shù)據(jù)傳輸端口(ftp-data)值。默認(rèn)值為20。此參數(shù)用于PORT FTP模式。
port_promiscuous=YES|NO
默認(rèn)值為NO。為YES時(shí),取消PORT安全檢查。該檢查確保外出的數(shù)據(jù)只能連接到客戶端上。小心打開此選項(xiàng)。
pasv_enable=YES|NO
YES,允許數(shù)據(jù)傳輸時(shí)使用PASV模式。NO,不允許使用PASV模式。默認(rèn)值為YES。
pasv_min_port=port number
pasv_max_port=port number
設(shè)定在PASV模式下,建立數(shù)據(jù)傳輸所可以使用port范圍的下界和上界,0 表示任意。默認(rèn)值為0。把端口范圍設(shè)在比較高的一段范圍內(nèi),比如50000-60000,將有助于安全性的提高。
pasv_promiscuous=YES|NO
此選項(xiàng)激活時(shí),將關(guān)閉PASV模式的安全檢查。該檢查確保數(shù)據(jù)連接和控制連接是來自同一個(gè)IP地址。小心打開此選項(xiàng)。此選項(xiàng)唯一合理的用法是存在于由安全隧道方案構(gòu)成的組織中。默認(rèn)值為NO。
pasv_address=
此選項(xiàng)為一個(gè)數(shù)字IP地址,作為PASV命令的響應(yīng)。默認(rèn)值為none,即地址是從呼入的連接套接字(incoming connectd socket)中獲取。
5.1.3 ASCII模式
默認(rèn)情況下,VSFTPD是禁止使用ASCII傳輸模式。即使FTP客戶端使用asc命令,指明要使用ASCII模式,但是,VSFTPD表面上接受了asc命令,而在實(shí)際傳輸文件時(shí),還是使用二進(jìn)制方式。下面選項(xiàng)控制VSFTPD是否使用ASCII傳輸模式。
ascii_upload_enable=YES|NO
控制是否允許使用ascii模式上傳文件,YES允許,NO不允許,默認(rèn)為NO。
ascii_download_enable=YES|NO
控制是否允許使用ascii模式下載文件,YES允許,NO不允許,默認(rèn)為NO。
5.2、性能與負(fù)載控制
5.2.1、超時(shí)選項(xiàng)
idle_session_timeout=
空閑(發(fā)呆)用戶會(huì)話的超時(shí)時(shí)間,若是超出這時(shí)間沒有數(shù)據(jù)的傳送或是指令的輸入,則會(huì)強(qiáng)迫斷線。單位為秒,默認(rèn)值為300。
data_connection_timeout=
空閑的數(shù)據(jù)連接的超時(shí)時(shí)間。默認(rèn)值為300 秒。
accept_timeout=numerical value
接受建立聯(lián)機(jī)的超時(shí)設(shè)定,單位為秒。默認(rèn)值為60。
connect_timeout=numerical value
響應(yīng)PORT方式的數(shù)據(jù)聯(lián)機(jī)的超時(shí)設(shè)定,單位為秒。默認(rèn)值為60。以上兩個(gè)選項(xiàng)針對(duì)客戶端的,將使客戶端空閑1分鐘后自動(dòng)中斷連接,并在中斷1分鐘后自動(dòng)激活連接。
5.2.2 負(fù)載控制
max_clients=numerical value
此參數(shù)在VSFTPD使用單獨(dú)(standalone)模式下有效。此參數(shù)定義了FTP服務(wù)器最大的并發(fā)連接數(shù),當(dāng)超過此連接數(shù)時(shí),服務(wù)器拒絕客戶端連接。默認(rèn)值為0,表示不限最大連接數(shù)。
?
max_per_ip=numerical value
此參數(shù)在VSFTPD使用單獨(dú)(standalone)模式下有效。此參數(shù)定義每個(gè)IP地址最大的并發(fā)連接數(shù)目。超過這個(gè)數(shù)目將會(huì)拒絕連接。此選項(xiàng)的設(shè)置將影響到象網(wǎng)際快車這類的多進(jìn)程下載軟件。默認(rèn)值為0,表示不限制。
anon_max_rate=value
設(shè)定匿名用戶的最大數(shù)據(jù)傳輸速度value,以Bytes/s為單位。默認(rèn)無。
local_max_rate=value
設(shè)定用戶的最大數(shù)據(jù)傳輸速度value,以Bytes/s為單位。默認(rèn)無。此選項(xiàng)對(duì)所有的用戶都生效。此外,也可以在用戶個(gè)人配置文件中使用此選項(xiàng),以指定特定用戶可獲得的最大數(shù)據(jù)傳輸速率。
步驟如下:
、僭趘sftpd.conf中指定用戶個(gè)人配置文件所在的目錄,如:
user_config_dir=/etc/vsftpd/userconf
、谏/etc/vsftpd/userconf目錄。
、塾脩魝(gè)人配置文件是在該目錄下,與特定用戶同名的文件,如:
/etc/vsftpd/userconf/xiaowang
、茉谟脩舻膫(gè)人配置文件中設(shè)置local_max_rate參數(shù),如:
local_max_rate=80000
以上步驟設(shè)定FTP用戶xiaowang的最大數(shù)據(jù)傳輸速度為80KBytes/s。
VSFTPD 對(duì)于速度控制的變化范圍大概在80%到120%之間。比如我們限制最高速度為100KBytes/s, 但實(shí)際的速度可能在80KBytes/s 到120KBytes/s 之間。當(dāng)然,若是線路帶寬不足時(shí),速率自然會(huì)低于此限制。
5.3 用戶選項(xiàng)
VSFTPD的用戶分為三類:匿名用戶、本地用戶(local user)以及虛擬用戶(guest)。
5.3.1、匿名用戶
anonymous_enable=YES|NO
控制是否允許匿名用戶登錄,YES允許,NO不允許,默認(rèn)值為YES。
ftp_username=
匿名用戶所使用的系統(tǒng)用戶名。默認(rèn)下,此參數(shù)在配置文件中不出現(xiàn),值為ftp。
no_anon_password=YES|NO
控制匿名用戶登入時(shí)是否需要密碼,YES不需要,NO需要。默認(rèn)值為NO。
deny_email_enable=YES|NO
此參數(shù)默認(rèn)值為NO。當(dāng)值為YES時(shí),拒絕使用banned_email_file參數(shù)指定文件中所列出的e-mail地址進(jìn)行登錄的匿名用戶。即,當(dāng)匿名用戶使用banned_email_file文件中所列出的e-mail進(jìn)行登錄時(shí),被拒絕。顯然,這對(duì)于阻擊某些Dos攻擊有效。當(dāng)此參數(shù)生效時(shí),需追加banned_email_file參數(shù)
banned_email_file=/etc/vsftpd.banned_emails
指定包含被拒絕的e-mail地址的文件,默認(rèn)文件為/etc/vsftpd.banned_emails。
anon_root=
設(shè)定匿名用戶的根目錄,即匿名用戶登入后,被定位到此目錄下。主配置文件中默認(rèn)無此項(xiàng),默認(rèn)值為/var/ftp/。
anon_world_readable_only=YES|NO
控制是否只允許匿名用戶下載可閱讀文檔。YES,只允許匿名用戶下載可閱讀的文件。NO,允許匿名用戶瀏覽整個(gè)服務(wù)器的文件系統(tǒng)。默認(rèn)值為YES。
anon_upload_enable=YES|NO
控制是否允許匿名用戶上傳文件,YES允許,NO不允許,默認(rèn)是不設(shè)值,即為NO。除了這個(gè)參數(shù)外,匿名用戶要能上傳文件,還需要兩個(gè)條件:一,write_enable參數(shù)為YES;二,在文件系統(tǒng)上,F(xiàn)TP匿名用戶對(duì)某個(gè)目錄有寫權(quán)限。
anon_mkdir_write_enable=YES|NO
控制是否允許匿名用戶創(chuàng)建新目錄,YES允許,NO不允許,默認(rèn)是不設(shè)值,即為NO。當(dāng)然在文件系統(tǒng)上,F(xiàn)TP匿名用戶必需對(duì)新目錄的上層目錄擁有寫權(quán)限。
anon_other_write_enable=YES|NO
控制匿名用戶是否擁有除了上傳和新建目錄之外的其他權(quán)限,如刪除、更名等。YES擁有,NO不擁有,默認(rèn)值為NO。
chown_uploads=YES|NO
是否修改匿名用戶所上傳文件的所有權(quán)。YES,匿名用戶所上傳的文件的所有權(quán)將改為另外一個(gè)不同的用戶所有,用戶由chown_username參數(shù)指定。此選項(xiàng)默認(rèn)值為NO。
chown_username=whoever
指定擁有匿名用戶上傳文件所有權(quán)的用戶。此參數(shù)與chown_uploads聯(lián)用。不推薦使用root用戶。
5.3.2、本地用戶
在使用FTP服務(wù)的用戶中,除了匿名用戶外,還有一類在FTP服務(wù)器所屬主機(jī)上擁有賬號(hào)的用戶。VSFTPD中稱此類用戶為本地用戶(local users),等同于其他FTP服務(wù)器中的real用戶。
local_enable=YES|NO
控制vsftpd所在的系統(tǒng)的用戶是否可以登錄vsftpd。默認(rèn)值為YES。
local_root=
定義所有本地用戶的根目錄。當(dāng)本地用戶登入時(shí),將被更換到此目錄下。默認(rèn)值為無。
user_config_dir=
定義用戶個(gè)人配置文件所在的目錄。用戶的個(gè)人配置文件為該目錄下的同名文件。個(gè)人配置文件的格式與vsftpd.conf格式相同。例如定義 user_config_dir=/etc/vsftpd/userconf,并且主機(jī)上有用戶xiaowang,lisi,那我們可以在 user_config_dir的目錄新增名為xiaowang、lisi的兩個(gè)文件。當(dāng)用戶lisi 登入時(shí),VSFTPD則會(huì)讀取user_config_dir下lisi這個(gè)文件中的設(shè)定值,應(yīng)用于用戶lisi。默認(rèn)值為無。
5.3.3、虛擬用戶
guest_enable=YES|NO
若是啟動(dòng)這項(xiàng)功能,所有的非匿名登入者都視為guest。默認(rèn)值為關(guān)閉。
guest_username=
定義VSFTPD的guest用戶在系統(tǒng)中的用戶名。默認(rèn)值為ftp。
5.4、安全措施
5.4.1、用戶登錄控制
pam_service_name=vsftpd
指出VSFTPD進(jìn)行PAM認(rèn)證時(shí)所使用的PAM配置文件名,默認(rèn)值是vsftpd,默認(rèn)PAM配置文件是/etc/pam.d/vsftpd。
/etc/vsftpd.ftpusers
VSFTPD禁止列在此文件中的用戶登錄FTP服務(wù)器。這個(gè)機(jī)制是在/etc/pam.d/vsftpd中默認(rèn)設(shè)置的。
userlist_enable=YES|NO
此選項(xiàng)被激活后,VSFTPD將讀取userlist_file參數(shù)所指定的文件中的用戶列表。當(dāng)列表中的用戶登錄FTP服務(wù)器時(shí),該用戶在提示輸入密碼之前就被禁止了。即該用戶名輸入后,VSFTPD查到該用戶名在列表,VSFTPD就直接禁止掉該用戶,不會(huì)再進(jìn)行詢問密碼等后續(xù)步聚。默認(rèn)值為NO。
userlist_file=/etc/vsftpd.user_list
指出userlist_enable選項(xiàng)生效后,被讀取的包含用戶列表的文件。默認(rèn)值是/etc/vsftpd.user_list。
userlist_deny=YES|NO
決定禁止還是只允許由userlist_file指定文件中的用戶登錄FTP服務(wù)器。此選項(xiàng)在userlist_enable 選項(xiàng)啟動(dòng)后才生效。YES,默認(rèn)值,禁止文件中的用戶登錄,同時(shí)也不向這些用戶發(fā)出輸入口令的提示。NO,只允許在文件中的用戶登錄FTP服務(wù)器。
tcp_wrappers=YES|NO
在VSFTPD中使用TCP_Wrappers遠(yuǎn)程訪問控制機(jī)制,默認(rèn)值為YES。
5.4.2、目錄訪問控制
chroot_list_enable=YES|NO
鎖定某些用戶在自家目錄中。即當(dāng)這些用戶登錄后,不可以轉(zhuǎn)到系統(tǒng)的其他目錄,只能在自家目錄(及其子目錄)下。具體的用戶在chroot_list_file參數(shù)所指定的文件中列出。默認(rèn)值為NO。
chroot_list_file=/etc/vsftpd/chroot_list
指出被鎖定在自家目錄中的用戶的列表文件。文件格式為一行一用戶。通常該文件是/etc/vsftpd/chroot_list。此選項(xiàng)默認(rèn)不設(shè)置。
chroot_local_users=YES|NO
將本地用戶鎖定在自家目錄中。當(dāng)此項(xiàng)被激活時(shí),chroot_list_enable和chroot_local_users參數(shù)的作用將發(fā)生變化,chroot_list_file所指定文件中的用戶將不被鎖定在自家目錄。本參數(shù)被激活后,可能帶來安全上的沖突,特別是當(dāng)用戶擁有上傳、 shell訪問等權(quán)限時(shí)。因此,只有在確實(shí)了解的情況下,才可以打開此參數(shù)。默認(rèn)值為NO。
passwd_chroot_enable
當(dāng)此選項(xiàng)激活時(shí),與chroot_local_user選項(xiàng)配合,chroot()容器的位置可以在每個(gè)用戶的基礎(chǔ)上指定。每個(gè)用戶的容器來源于/etc/passwd中每個(gè)用戶的自家目錄字段。默認(rèn)值為NO。
5.4.3、文件操作控制
hide_ids=YES|NO
是否隱藏文件的所有者和組信息。YES,當(dāng)用戶使用"ls -al"之類的指令時(shí),在目錄列表中所有文件的擁有者和組信息都顯示為ftp。默認(rèn)值為NO。
ls_recurse_enable=YES|NO
YES,允許使用"ls -R" 指令。這個(gè)選項(xiàng)有一個(gè)小的安全風(fēng)險(xiǎn),因?yàn)樵谝粋(gè)大型FTP站點(diǎn)的根目錄下使用"ls -R"會(huì)消耗大量系統(tǒng)資源。默認(rèn)值為NO。
write_enable=YES|NO
控制是否允許使用任何可以修改文件系統(tǒng)的FTP 的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE。默認(rèn)值為NO,不過自帶的簡單配置文件中打開了該選項(xiàng)。
secure_chroot_dir=
這選項(xiàng)指向一個(gè)空目錄,并且ftp用戶對(duì)此目錄無寫權(quán)限。當(dāng)vsftpd不需要訪問文件系統(tǒng)時(shí),這個(gè)目錄將被作為一個(gè)安全的容器,用戶將被限制在此目錄中。默認(rèn)目錄為/usr/share/empty。
5.4.4、新增文件權(quán)限設(shè)定
anon_umask=
匿名用戶新增文件的umask 數(shù)值。默認(rèn)值為077。
file_open_mode=
上傳檔案的權(quán)限,與chmod 所使用的數(shù)值相同。如果希望上傳的文件可以執(zhí)行,設(shè)此值為0777。默認(rèn)值為0666。
local_umask=
本地用戶新增檔案時(shí)的umask 數(shù)值。默認(rèn)值為077。不過,其他大多數(shù)的FTP服務(wù)器都是使用022。如果您的用戶希望的話,可以修改為022。在自帶的配置文件中此項(xiàng)就設(shè)為了022。
5.5、提示信息
ftpd_banner=login banner string
此參數(shù)定義了login banner string(登錄歡迎語字符串)。用戶可以自行修改。預(yù)設(shè)值為無。當(dāng)ftpd_banner設(shè)置后,將取代系統(tǒng)原來的歡迎詞。
banner_file=/directory/vsftpd_banner_file
此項(xiàng)指定一個(gè)文本文件,當(dāng)使用者登入時(shí),會(huì)顯示此該文件的內(nèi)容,通常為歡迎話語或是說明。默認(rèn)值為無。與ftpd_banner相比, banner_file是文本文件的形式,而ftpd_banner是字串格式。banner_file選項(xiàng)將取代ftpd_banner選項(xiàng)。
dirmessage_enable=YES|MO
控制是否啟用目錄提示信息功能。YES啟用,NO不啟用,默認(rèn)值為YES。此功能啟用后,當(dāng)用戶進(jìn)入某一個(gè)目錄時(shí),會(huì)檢查該目錄下是否有message_file選項(xiàng)所指定的文檔,若是有,則會(huì)出現(xiàn)此文檔的內(nèi)容,通常這個(gè)檔案會(huì)放置歡迎話語,或是對(duì)該目錄的說明。
message_file=
此選項(xiàng),僅在dirmessage_enable選項(xiàng)激活方生效。默認(rèn)值為.message。
5.6、日志設(shè)置
xferlog_enable=YES|NO
控制是否啟用一個(gè)日志文件,用于詳細(xì)記錄上傳和下載。該日志文件由xferlog_file選項(xiàng)指定。默認(rèn)值為NO,但簡單配置文件中激活此選項(xiàng)。
xferlog_file=
這個(gè)選項(xiàng)設(shè)定記錄傳輸日志的文件名。默認(rèn)值為/var/log/vsftpd.log。
xferlog_std_format=YES|NO
控制日志文件是否使用xferlog的標(biāo)準(zhǔn)格式,如同wu-ftpd一樣。使用xferlog格式,可以重新使用已經(jīng)存在的傳輸統(tǒng)計(jì)生成器。然而,默認(rèn)的日志格式更為可讀性。默認(rèn)值為NO,但自帶的配置文件中激活了此選項(xiàng)。
log_ftp_protocol=YES|NO
當(dāng)此選項(xiàng)激活后,所有的FTP請(qǐng)求和響應(yīng)都被記錄到日志中。提供此選項(xiàng)時(shí),xferlog_std_format不能被激活。這個(gè)選項(xiàng)有助于調(diào)試。默認(rèn)值為NO。
5.7、其他設(shè)置
setproctitle_enable=YES|NO
YES,VSFTPD將在系統(tǒng)進(jìn)程列表中顯示每個(gè)會(huì)話(session)的狀態(tài)。也就是說,進(jìn)程報(bào)告將顯示每個(gè)vsftpd會(huì)話在做什么(掛起、下載等),如用ps -ef|grep ftp。出于安全的目的,可以考慮將此選項(xiàng)關(guān)閉。NO,進(jìn)程報(bào)告只顯示一個(gè)vsftpd進(jìn)程在運(yùn)行。默認(rèn)值為NO。
text_userdb_names=YES|No
當(dāng)使用者登入后使用ls -al 之類指令時(shí),目錄列表的用戶和組信息域,默認(rèn)是出現(xiàn)擁有者的UID,而不是該檔案擁有者的名稱。若是希望出現(xiàn)擁有者的名稱,則將此功能開啟。默認(rèn)值為NO。
user_localtime=YES|NO
默認(rèn)為NO。YES,VSFTPD顯示目錄列表時(shí)使用你本地時(shí)區(qū)的時(shí)間。默認(rèn)是顯示GMT時(shí)間。同樣,由ftp命令“MDTM”返回的時(shí)間值也受此選項(xiàng)影響。
check_shell=YES|NO
此選項(xiàng)僅對(duì)不使用PAM方式的VSFTPD生效。當(dāng)此選項(xiàng)關(guān)閉后,當(dāng)本地用戶登錄時(shí),VSFTPD不會(huì)檢查/etc/shells文件以尋找一個(gè)有效的用戶shell。默認(rèn)為YES。
nopriv_user=
指定一個(gè)用戶,當(dāng)VSFTPD不想要什么權(quán)限時(shí),使用此用戶身份。這用戶最好是一個(gè)專用的用戶,而不是用戶nobody。在大多數(shù)的機(jī)器上,nobody用戶被用于大量重要的事情。默認(rèn)值為nobody。
pam_service_name=
指明VSFTPD使用用PAM驗(yàn)證服務(wù)時(shí)的PAM配置文件名。默認(rèn)值為ftp。
6、VSFTPD應(yīng)用
本部分介紹VSFTPD的具體應(yīng)用方法。
6.1、允許匿名用戶上傳文件
在vsftpd.conf文件中修改或增加以下選項(xiàng):
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
然后創(chuàng)建供匿名用戶上傳文件的目錄,并設(shè)定權(quán)限:
# mkdir /var/ftp/incoming
# chmod o+w /var/ftp/incoming
由于匿名用戶(ftp)上傳文件,需要對(duì)incoming目錄進(jìn)行操作,而incoming為root所有,匿名用戶(ftp)對(duì)于incoming來說是其他用戶,所以要加入其他用戶(o)的寫權(quán)限。
6.2、限制用戶在自家目錄
在默認(rèn)配置中,本地用戶可以切換到自家目錄以外的目錄進(jìn)行瀏覽,并在權(quán)限范圍內(nèi)進(jìn)行上傳和下載,這無疑是個(gè)不安全因素。
我們可以設(shè)置chroot,讓本地用戶登錄后只能訪問自家目錄,無法訪問其他目錄。相關(guān)的選項(xiàng)有三個(gè):chroot_local_user、chroot_list_enable、chroot_list_file。限制用戶在自家目錄有兩種做法:
1、限制所有的本地用戶在自家目錄
chroot_local_user=YES
這種做法,可能會(huì)帶來一些安全性上的沖突。參見前面的chroot_local_user選項(xiàng)描述。
2、限制部分本地用戶在自家目錄
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
在/etc/vsftpd.chroot_list文件中加入要限制的本地用戶名。注意一個(gè)用戶名一行。
6.3、配置高安全級(jí)別的匿名FTP服務(wù)器
VSFTPD自帶的簡單配置文件已經(jīng)自稱是偏執(zhí)狂了,這里看看能否更加偏執(zhí)一些,:)。有些選項(xiàng)默認(rèn)已經(jīng)采用安全性的設(shè)置,這里就不再寫出了。
#只允許匿名訪問,不允許本地用戶訪問
anonymous_enable=YES
local_enable=NO
#使用ftpd_banner取代VSFTPD默認(rèn)的歡迎詞,免得泄漏相關(guān)信息
ftpd_banner=Welcome to this FTP Server
#只讓匿名用戶瀏覽可閱讀的文件,不可以瀏覽整個(gè)系統(tǒng)
anon_world_readable_only=YES
#隱藏文件的所有者和組信息,匿名用戶看到的文件的所有者和組全變?yōu)閒tp
hide_ids=YES
#取消寫權(quán)限
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
#使用單獨(dú)模式,并指定監(jiān)聽的IP地址
listen_address=ip address
#對(duì)連接進(jìn)行控制,還有超時(shí)時(shí)間,那就根據(jù)具體情況再說了。
connect_from_port_20=YES
pasv_min_port=50000
pasv_max_port=60000
#控制并發(fā)數(shù),限定每個(gè)IP地址的并發(fā)數(shù),這個(gè)嘛,根據(jù)用戶自已定了。
max_clients=numerical value
max_per_ip=numerical value
#限定下載速度,具體限多大,就由用戶自己定了,80KB/s,也很快了吧。
anon_max_rate=80000
#啟用詳細(xì)的日志記錄格式
xferlog_enable=YES
6.4、基于IP地址的虛擬FTP服務(wù)器
假定服務(wù)器有兩個(gè)IP地址,192.168.0.1和192.168.0.2。VSFTPD是建立在192.168.0.1上的,現(xiàn)在我們?cè)?92.168.0.2上再提供一個(gè)虛擬FTP服務(wù)器。如何在一臺(tái)服務(wù)器上使用多個(gè)IP 地址,請(qǐng)參考相關(guān)文檔。
1、創(chuàng)建虛擬FTP服務(wù)器的根目錄。
mkdir -p /var/ftp2/pub
確保/var/ftp2和/var/ftp2/pub目錄的擁有者和組均為root,掩碼為755。
2、增加虛擬FTP服務(wù)器的匿名用戶帳號(hào)。原先的FTP服務(wù)器使用系統(tǒng)用戶ftp作為其匿名用戶帳號(hào)。我們要增加一個(gè)ftp2用于虛擬FTP服務(wù)器。
useradd -d /var/ftp2 -M ftp2
3、創(chuàng)建虛擬FTP服務(wù)器的配置文件。復(fù)制原來的vsftpd.conf作為虛擬FTP服務(wù)器的配置文件,并修改相關(guān)參數(shù)。
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf
新添或修改以下參數(shù):
listen=YES
listen_address=192.168.0.2
ftp_username=ftp2
注:由于VSFTPD默認(rèn)是監(jiān)聽所有的IP地址,當(dāng)我們?cè)O(shè)定基于IP的虛擬FTP服務(wù)器時(shí),為防止原來的FTP服務(wù)器與虛擬FTP服務(wù)器發(fā)生監(jiān)聽上的沖突,原FTP服務(wù)器需要指定監(jiān)聽的IP地址。在這里,原來的配置文件中就要設(shè)置listen_address=192.168.0.1。
4、啟動(dòng)虛擬FTP服務(wù)器。
/etc/rc.d/init.d/vsftpd腳本在啟動(dòng)時(shí),掃描/etc/vsftpd/目錄下所有的*.conf文件,按照 *.conf文件的先后,依次啟用vsftpd進(jìn)程,每個(gè)vsftpd進(jìn)程對(duì)應(yīng)一個(gè).conf文件。即,“l(fā)s /etc/vsftpd/”列表的次序與“ps -aux |grep vsftpd”中的順序一樣。當(dāng)然了,“ps -aux | grep vsftpd”中也顯示出vsftpd所使用的配置文件,從中也可以看哪個(gè)vsftpd進(jìn)程對(duì)應(yīng)哪個(gè)FTP服務(wù)器。如果沒有列出配置文件,那就是默認(rèn)的 vsftpd.conf,那么該進(jìn)程也就是原來的FTP服務(wù)器進(jìn)程。
由于第3步中虛擬FTP服務(wù)器的配置文件被命名為vsftpd2.conf文件,所以我們可以用/etc/rc.d/init.d/vsftpd腳本同時(shí)啟動(dòng)或關(guān)閉原FTP服務(wù)器和新加的虛擬FTP服務(wù)器。
以下命令單獨(dú)啟動(dòng)虛擬FTP服務(wù)器:
/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf &
單獨(dú)關(guān)閉虛擬FTP服務(wù)器,用“ps -aux | grep vsftpd”查出進(jìn)程號(hào),再用kill指令殺死虛擬FTP的進(jìn)程。
6.5、虛擬用戶的配置
6.5.1、VSFTPD的虛擬用戶介紹
VSFTPD的本地用戶本身是系統(tǒng)的用戶,除了可以登錄FTP服務(wù)器外,還可以登錄系統(tǒng)使用其他系統(tǒng)資源,而VSFTPD的虛擬用戶則是 FTP服務(wù)的專用用戶,虛擬用戶只能訪問FTP服務(wù)器資源。對(duì)于只需要通過FTP對(duì)系統(tǒng)有讀寫權(quán)限,而不需要其他系統(tǒng)資源的用戶或情況來說,采用虛擬用戶方式是很適合的。
VSFTPD的虛擬用戶采用單獨(dú)的用戶名/口令保存方式,與系統(tǒng)賬號(hào)(passwd/shadow)分離,這大大增強(qiáng)了系統(tǒng)的安全性。 VSFTPD可以采用數(shù)據(jù)庫文件來保存用戶/口令,如hash;也可以將用戶/口令保存在數(shù)據(jù)庫服務(wù)器中,如MySQL等。VSFTPD驗(yàn)證虛擬用戶,則采用PAM方式。由于虛擬用戶的用戶名/口令被單獨(dú)保存,因此在驗(yàn)證時(shí),VSFTPD需要用一個(gè)系統(tǒng)用戶的身份來讀取數(shù)據(jù)庫文件或數(shù)據(jù)庫服務(wù)器以完成驗(yàn)證,這就是guest用戶,這正如同匿名用戶也需要有一個(gè)系統(tǒng)用戶ftp一樣。當(dāng)然,guest用戶也可以被認(rèn)為是用于映射虛擬用戶。
配置虛擬用戶分為幾部分:guest用戶的創(chuàng)建、用戶/口令的保存、PAM認(rèn)證配置、vsftpd.conf文件設(shè)置等。具體的配置方法,參考下面小節(jié)。注:在后面的例子中,假定存在虛擬用戶xiaotong和xiaowang。
6.5.2 用戶創(chuàng)建和目錄設(shè)置
在系統(tǒng)中添加vsftpdguest用戶,作為虛擬用戶在系統(tǒng)中的代表。
useradd vsftpdguest
當(dāng)虛擬用戶登錄后,所在的位置為vsftpdguest的自家目錄/home/vsftpdguest。如果要讓虛擬用戶登錄到/var/ftp等其他目錄,修改vsftpdguest的自家目錄即可。
6.5.3、配置文件的設(shè)置
6.5.3.1、基本設(shè)置。
在vsftpd.conf配置文件中,加入以下參數(shù):
guest_enable=YES
guest_username=vsftpdguest
6.5.3.2、虛擬用戶的權(quán)限配置。
VSFTPD-1.2.0添加了virtual_use_local_privs參數(shù),當(dāng)該參數(shù)激活(YES)時(shí),虛擬用戶使用與本地用戶相同的權(quán)限。當(dāng)此參數(shù)關(guān)閉(NO)時(shí),虛擬用戶使用與匿名用戶相同的權(quán)限,這也就是VSFTPD-1.2.0之前版本對(duì)虛擬用戶權(quán)限的處理方法。這兩者種做法相比,后者更加嚴(yán)格一些,特別是在有寫訪問的情形下。默認(rèn)情況下此參數(shù)是關(guān)閉的(NO)。
下面先介紹virtual_use_local_privs=NO時(shí),即VSFTPD-1.2.0之前版本對(duì)虛擬用戶權(quán)限的配置方法:
①控制虛擬用戶瀏覽目錄
如果讓用戶不能瀏覽目錄,但仍可以對(duì)文件操作,那么需要執(zhí)行以下二個(gè)步驟:一,配置文件中,anon_world_readable_only=YES。二,虛擬用戶目錄的權(quán)限改為只能由vsftpdguest操作:
[root@hpe45 vsftpd]# chown vsftpdguest.vsftpdguest /home/vsftpdguest
[root@hpe45 vsftpd]# chmod 700 /home/vsftpdguest
②允許虛擬用戶上傳文件
write_enable=YES
anon_upload_enable=YES
、墼试S虛擬用戶修改文件名和刪除文件
anon_other_write_enable=YES
由于以上選項(xiàng)的設(shè)置同樣會(huì)對(duì)匿名用戶生效。如果不想匿名用戶趁機(jī)擁有同樣的權(quán)限,最好是禁止匿名用戶登錄。
在VSFTPD-1.2.0中當(dāng)virtual_use_local_privs=YES時(shí),只需write_enable=YES,虛擬用戶就可以就擁有寫權(quán)限。
6.5.3.3、虛擬用戶的其他配置
、傧薅ㄌ摂M用戶在自家目錄。
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
在/etc/vsftpd.chroot_list文件中加入xiaotong和xiaowang。
或者,chroot_local_user=YES
、谔摂M用戶的個(gè)人配置。
如果想讓個(gè)別的虛擬用戶擁有自己特別的配置,同樣可以建立虛擬用戶的個(gè)人配置文件。在主配置文件中加入:
user_config_dir=/etc/vsftpd/vsftpd_user_conf
生成/etc/vsftpd/vsftpd_user_conf目錄,在該目錄下建立與特定虛擬用戶同名的文件:
[root@hpe45 vsftpd]# mkdir vsftpd_user_conf
[root@hpe45 vsftpd]# cd vsftpd_user_conf
[root@hpe45 vsftpd_user_conf]# touch xiaowang
然后在xiaowang文件中就可以加入專對(duì)xiaowang生效的選項(xiàng)設(shè)置了。
注:如果在個(gè)人配置文件中加入chroot_local_user=YES是無效的。
6.5.3.4、虛擬用戶個(gè)人目錄設(shè)置
大家可以發(fā)現(xiàn),無論是哪個(gè)虛擬用戶,登錄后所在的目錄都是/home/vsftpdguest,即都是guest_username用戶的自家目錄。下面,介紹如何為每個(gè)虛擬用戶建立自家目錄。
一種作法是在虛擬用戶的個(gè)人配置文件中使用local_root選項(xiàng)指定虛擬用戶的自家目錄。以xiaowang為例,在第上步的基礎(chǔ)上,首先/etc/vsftpd/vsftpd_user_conf/xiaowang文件中加入:
local_root=/home/xiaowang
新建xiaowang目錄,并將權(quán)限設(shè)為vsftpdguest:
[root@hpe45 home]# mkdir xiaowang
[root@hpe45 home]# chown vsftpdguest.vsftpdguest ./xiaowang
6.5.4、MySQL保存虛擬用戶
本節(jié)介紹如何將虛擬用戶的用戶名和口令保存在MySQL的數(shù)據(jù)庫中。這主要分二個(gè)部分,一是將用戶和口令保存在數(shù)據(jù)庫,二是設(shè)置相應(yīng)的PAM 認(rèn)證。為了方便論述,做如下假定:數(shù)據(jù)庫vsftpdvu,表users,字段name和passwd用于保存虛擬用戶的用戶名和口令;為了安全,只授權(quán) vsftpdguest讀vsftpdvu數(shù)據(jù)庫的users表。
1、虛擬用戶的用戶名/口令的保存。這部分在MySQL數(shù)據(jù)庫中完成。首先,創(chuàng)建數(shù)據(jù)庫vsftpdvu以及表users,并插入虛擬用戶xiaotong、xiaowang。執(zhí)行以下命令:
[root@hpe45 vsftpd]#mysql -p
mysql>create database vsftpdvu;
mysql>use vsftpdvu;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));
mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));
mysql>quit
然后,授權(quán)vsftpdguest只能讀vsftpdvu數(shù)據(jù)庫的users表。執(zhí)行以下命令:
[root@hpe45 vsftpd]#mysql -u root mysql -p
mysql>grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';
mysql>quit
如果要驗(yàn)證剛才的操作是否成功可以執(zhí)行下面命令:
[root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu
mysql>select * from users;
如果成功,將會(huì)列出xiaotong、xiaowang和加密后的密碼。
2、設(shè)置PAM認(rèn)證。這里我們要用到一個(gè)利用mysql進(jìn)行pam驗(yàn)證的開源項(xiàng)目(http: //sourceforge.net/projects/pam-mysql/)。首先從網(wǎng)站下載它的程序包pam_myql-0.5.tar.gz,復(fù)制到/root目錄中。在編譯安裝之前,要確保mysql-devel的RPM包已經(jīng)安裝在你的機(jī)器上,如果沒有請(qǐng)從RHL安裝光盤中安裝該包。然后,執(zhí)行以下命令:
[root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz
[root@hpe45 root]#cd pam_mysql
[root@hpe45 pam_mysql]#make
[root@hpe45 pam_mysql]#make install
make install這一步可能會(huì)出現(xiàn)錯(cuò)誤,那只好手動(dòng)將該目錄下生成的pam_mysql.o復(fù)制到/lib/security目錄下。
接下來,我們要設(shè)置vsftpd的PAM驗(yàn)證文件。打開/etc/pam.d/vsftpd文件,加入以下內(nèi)容:
auth required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
account required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
上面涉及到的參數(shù),只要對(duì)應(yīng)前面數(shù)據(jù)庫的設(shè)置就可以明白它們的含義。這里需要說明的是crypt參數(shù),crypt=0,口令以明文方式(不加密)保存在數(shù)據(jù)庫中;crypt=1,口令使用UNIX系統(tǒng)的DES加密方式加密后保存在數(shù)據(jù)庫中;crypt=2,口令經(jīng)過MySQL的 password()函數(shù)加密后保存。
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/406/showart_789.html |
|