Vsftpd配置詳解之配置文件詳解
配置文件詳解:vsftpd配置文件只有一個(gè),就是/etc/vsftpd/vsftpd.conf,上一小節(jié)我們就已經(jīng)加入了兩行參數(shù)了。在修改了配置文件之后,需要重新啟動(dòng)服務(wù)才能生效。下面我們就來詳細(xì)解釋其中的參數(shù)。
1. 匿名及本地用戶共同參數(shù)
- write_enable=yes/no //是否允許全局可寫
- download_enable=yes/no //是否允許所有用戶可以下載
- dirlist_enable=yes/no //是否允許所有用戶可以瀏覽(列出文件列表)
我們將write_enable=no、download_enable=yes兩行加入配置文件,再測試:
- # ftp 127.0.0.1
- ……
- ftp> ls
- 227 Entering Passive Mode (127,0,0,1,230,192)
- 150 Here comes the directory listing.
- -rw-r--r-- 1 0 0 4 May 13 11:43 ioo_file
- 226 Directory send OK.
- ftp> get ioo_file
- local: ioo_file remote: ioo_file
- 227 Entering Passive Mode (127,0,0,1,160,26)
- 150 Opening BINARY mode data connection for ioo_file (4 bytes).
- 226 File send OK.
- 4 bytes received in 0.062 seconds (0.063 Kbytes/s)
- ftp> put scsrun.log
- local: scsrun.log remote: scsrun.log
- 227 Entering Passive Mode (127,0,0,1,176,84)
- 550 Permission denied.
如上所示,我們看到了ftp上的文件,可以下載文件,但不可以上傳文件。如果把dirlist_enable=no 也加上,便無法看到ftp上的文件(無法列出文件列表),但是如果你知道具體的文件名及路徑,仍然可以下載文件的。實(shí)驗(yàn)結(jié)果就不貼上來了。
再看下一組:
ftpd_banner=歡迎語字符串
banner_file=文件
dirmessage_enable=yes/no
message_file=文件
參數(shù)ftpd_banner設(shè)置的歡迎語字符串將在登錄時(shí)看到,如果想做出多行歡迎語,就要把內(nèi)容單獨(dú)存為banner_file參數(shù)指定的文件,應(yīng)用中這兩個(gè)參數(shù)二選一即可。dirmessage_enable和message_file參數(shù)是進(jìn)入某個(gè)目錄后顯示的歡迎信息,用法與前兩個(gè)參數(shù)一樣。
2. 本地用戶管理
2.1 本地用戶常規(guī)配置參數(shù)
- local_root=/path //本地用戶登陸服務(wù)器后直接進(jìn)入的目錄
- local_umask=八進(jìn)制數(shù) //本地用戶上傳檔案權(quán)限的 umask值
- local_max_rate=數(shù)字 //本地用戶傳輸速率單位為 bps
- chmod_enable=yes/no // 是否允許本地用戶改變ftp 服務(wù)器上檔案的權(quán)限
我們知道使用本地用戶登錄ftp后進(jìn)入的是用戶的主目錄,locla_root這個(gè)參數(shù)允許我們登錄服務(wù)器后直接進(jìn)入其它的目錄。此功能結(jié)合Apache 的userdir模塊來實(shí)現(xiàn)網(wǎng)站內(nèi)容更新上傳是非常方便的。Linux系統(tǒng)中的任何文件都是有權(quán)限值的,上傳的文件也不例外,這個(gè)默認(rèn)的權(quán)限值就由 local_umask參數(shù)指定。其計(jì)算方法為:
默認(rèn)建立文件的權(quán)限+local_umask =0666
默認(rèn)建立目錄的權(quán)限+local_umask =0777
由此我們可以看出,上傳的文件無論如何都不可能有執(zhí)行權(quán)限的。這也是vsftp安全性的體現(xiàn)啊!
local_max_rate參數(shù)限定了數(shù)據(jù)傳輸速率,包括上傳和下載。chmod_enable參數(shù)限制用戶是否可以改變檔案權(quán)限(使用chmod, site命令)。
我們可能想讓為每個(gè)用戶進(jìn)行單獨(dú)的配置,或者想配置個(gè)別用戶的權(quán)限。這樣就得為每個(gè)本地用戶配置一個(gè)文件。這些配置文件必須是在同一個(gè)目錄下,所以我們可以設(shè)置本地用戶單獨(dú)配置文件所在的目錄:
user_config_dir=/path //用戶單獨(dú)配置文件所在目錄
我們在配置文件中加入以下幾行:
- local_umask=077
- local_max_rate=20000
- user_config_dir=/etc/vsftpd/vsftpd_user_dir
給予用戶上傳權(quán)限:
- write_enable=yes
新建一個(gè)普通用戶ioo,再新建一個(gè)目錄/etc/vsftpd/vsftpd_user_dir,其下建一個(gè)文件ioo,里面加入下面幾行:
- local_root=/var/www/html
- local_umask=022
- local_max_rate=50000
把/var/www/html的所有者改為ioo:
- chown ioo:ioo /var/www/html
測試之后我們發(fā)現(xiàn),使用ioo用戶登錄后就直接進(jìn)入var/www/html了,上傳的文件(夾)權(quán)限為644(755),傳輸速率為50k,自定義的設(shè)置覆蓋了主配置文件中的設(shè)置。
2.2 本地用戶登錄限制參數(shù)
在我們的服務(wù)器上本來就有很多的本地用戶,這些本地用戶應(yīng)該都是可以登陸 ftp 服務(wù)器的。但是 ftp 服務(wù)是以明文傳輸?shù)?,如果允許管理員登陸的話,這種機(jī)制顯然不好。又或者我們想讓一些本地用戶可以登陸,或者一些不能登陸我們的 ftp 服務(wù)器,這樣我們可以怎么設(shè)置呢?
Vsftpd 提供了 userlist 功能。它使用一個(gè)文件來保存一些用戶名,然后根據(jù)配置來決定是文件中的用戶可以登錄還是文件中沒有列出的用戶可以登陸 ftp 服務(wù)器,這樣就對本地用戶的登陸起到了限制作用。其配置參數(shù)有如下幾個(gè):
- userlist_enable=yes/no //是否啟用 userlist 功能模塊
- userlist_deny=yes/no //是否拒絕 userlist 文件中用戶登陸 ftp 服務(wù)
- userlist_file=/path/to/file //指定的 userlist 文件名
當(dāng)?shù)?個(gè)參數(shù)值為yes時(shí),第2、3行才起作用。我們將配置文件加上如下3行:
- userlist_enable=yes
- userlist_deny=yes
- userlist_file=/etc/vsftpd/vsftpd.userlist
然后再新建一個(gè)文件/etc/vsftpd/vsftpd.userlist,在里面加入用戶名,每個(gè)用戶名一行,比如我這里加入用戶root,再登錄服務(wù)時(shí)出現(xiàn)以下信息:
- # ftp 127.0.0.1
- Connected to 127.0.0.1.
- ……
- Name (127.0.0.1:root): root
- 530 Permission denied.
- Login failed.
root用戶已經(jīng)不能登錄了,在輸入密碼之前就被拒絕,但其它用戶還可以登錄的。如果把userlist_deny的值改為no,則只有文件中的用戶才可以登錄服務(wù)器。
2.3 本地用戶的根目錄參數(shù)
大家再來看下面這一段:
- # ftp 127.0.0.1
- ……
- Name (127.0.0.1:root): ioo
- 331 Please specify the password.
- Password:
- 230 Login successful.
- Remote system type is UNIX.
- Using binary mode to transfer files.
- ftp> pwd
- 257 "/home/ioo"
- ftp> cd /
- 250 Directory successfully changed.
- ftp> ls
- 227 Entering Passive Mode (127,0,0,1,163,193)
- 150 Here comes the directory listing.
- drwxr-xr-x 2 0 0 4096 May 12 21:22 bin
- drwxr-xr-x 3 0 0 4096 Apr 30 19:57 boot
- drwxr-xr-x 12 0 0 3840 May 13 10:29 dev
- ……
是不是感到吃驚了!我們用本地用戶登錄ftp服務(wù)器,卻可以看到整個(gè)服務(wù)器的目錄和文件,甚至還可以把/etc/passwd文件下載下來,這是非常不安全的,我們應(yīng)該禁止這個(gè)功能,限制用戶只能在自己的目錄里瀏覽,這就要用到chroot功能??聪旅嫒齻€(gè)參數(shù):
- chroot_list_enable=yes/no //是否啟用 chroot_list 文件
- chroot_local_user=yes/no //是否限制本地用戶的根目錄為自己的主目錄
- chroot_list_file=/path/to/file //設(shè)置 chrootlist 文件名
我們新建一個(gè)用戶woo,再新建一個(gè)文件/etc/vsftpd/vsftpd.chroot_list,其中加入woo。然后在配置文件中添加以下幾行:
- chroot_list_enable=yes
- chroot_local_user=yes
- chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
登錄服務(wù)器測試:
- # ftp 127.0.0.1
- ……
- Name (127.0.0.1:root): woo
- 331 Please specify the password.
- Password:
- 230 Login successful.
- Remote system type is UNIX.
- Using binary mode to transfer files.
- ftp> pwd
- 257 "/home/woo"
- Name (127.0.0.1:root): ioo
- 331 Please specify the password.
- Password:
- 230 Login successful.
- Remote system type is UNIX.
- Using binary mode to transfer files.
- ftp> pwd
- 257 "/"
#p#
我們看到,在文件中的用戶woo根目錄仍然是系統(tǒng)根目錄,但文件外的用戶根目錄已經(jīng)變成了“/”,就是說列在文件外的用戶已經(jīng)不能在自己主目錄范圍外瀏覽了。
更改chroot_list_enable和chroot_local_user的值,得到以下幾種組合:
參數(shù)
取值
取值
取值
取值
chroot_list_enable
yes
yes
no
no
chroot_local_user
yes
no
yes
no
意義
文件中列出的用戶根目錄為系統(tǒng)根目錄,其它用戶根目錄為自己主目錄。
文件中列出的用戶根目錄為自己主目錄,其它用戶根目錄為系統(tǒng)根目錄。
全部用戶根目錄都是自己主目錄。
全部用戶根目錄都是系統(tǒng)根目錄。
3. 匿名用戶參數(shù)
我們可以認(rèn)為,本地用戶進(jìn)入自己主目錄本身就應(yīng)有比較大的權(quán)限,所以我們看到本地用戶受限的語句不多。但是匿名用戶通常涉及到一個(gè)公開、公共的互聯(lián)網(wǎng)環(huán)境,所以限制匿名用戶的權(quán)限語句就比較多,限制也比較細(xì)致。看看這一組參數(shù):
- anon_upload_enable=yes/no //是否允許匿名用戶上傳
- anon_mkdir_write_enable=yes/no //是否允許匿名用戶建立文件夾
- anon_other_write_enable=yes/no //是否允許匿名用戶可以使用除了建立文件夾和上傳文件以外其他的ftp寫操作命令。例如:delete、rename 等等
- anon_world_readable_only=yes/no //匿名用戶是否允許下載所有用戶都可以訪問的文件
我們先把配置文件清理一下,現(xiàn)在配置文件只有下面幾行:
- listen=yes
- anonymous_enable=yes
- write_enable=yes
- download_enable=yes
- dirlist_enable=yes
- anon_upload_enable=yes
- anon_mkdir_write_enable=yes
- anon_other_write_enable=yes
我們希望匿名用戶有上傳文件的權(quán)限,但這里還只是在ftp服務(wù)里給了寫權(quán)限,還必須在文件權(quán)限考慮實(shí)現(xiàn)。于是我們給/var/ftp加上寫權(quán)限:
- chmod a+w /var/ftp
然后登錄服務(wù)器:
- # ftp 127.0.0.1
- ……
- Name (127.0.0.1:root): ftp
- 331 Please specify the password.
- Password:
- 500 OOPS: vsftpd: refusing to run with writable anonymous root
- Login failed.
- 421 Service not available, remote server has closed connection
結(jié)果我們連服務(wù)器都登陸不了了!這是因?yàn)関sftpd出于在安全方面的考慮,不允許匿名用戶對根目錄有寫權(quán)限。為此,我們只有去掉/var/ftp的寫權(quán)限,再在其中新建一個(gè)目錄,給予其寫權(quán)限,讓匿名用戶上傳文件到這個(gè)目錄中。
- # chmod 755 /var/ftp
- # mkdir /var/ftp/upload
- # chmod 777 /var/ftp/upload
現(xiàn)在我們可以匿名在upload里上傳文件、建立文件夾、還可以刪除改名等,但是卻無法將上傳的文件下載回來。如果你上傳的文件是在一個(gè)新建的文件夾里,那么上傳的文件不但下載不下來,而且連看都看不到:
- ftp> mkdir asm
- 257 "/upload/asm" created
- ftp> cd asm
- 250 Directory successfully changed.
- ftp> put file1
- local: file1 remote: file1
- 227 Entering Passive Mode (127,0,0,1,135,56)
- 150 Ok to send data.
- 226 File receive OK.
- 5 bytes sent in 0.063 seconds (0.077 Kbytes/s)
- ftp> get file1
- local: file1 remote: file1
- 227 Entering Passive Mode (127,0,0,1,20,101)
- 550 Failed to open file.
- ftp> ls
- 227 Entering Passive Mode (127,0,0,1,133,186)
- 150 Here comes the directory listing.
- 226 Transfer done (but failed to open directory).
- ftp>
這就要研究anon_world_readable_only這個(gè)參數(shù)了,它的默認(rèn)值是yes。如果其值為yes,則匿名用戶只可以下載所有用戶都可訪問的文件。比如:
- # ll
- total 40
- -rw----r-- 1 ftp ftp 34935 05-13 17:38 install.log
- -rw------- 1 ftp ftp 209 05-13 18:16 scsrun.log
這里install.log文件權(quán)限其它位上有r權(quán)限,那么這個(gè)文件就可以被下載;scsrun.log文件其它位上沒有任何權(quán)限,所以這個(gè)文件就不能被匿名用戶下載。
因此解決方法有兩個(gè),一是把參數(shù)anon_world_readable_only的值改為no;二是把上傳文件默認(rèn)權(quán)限的其它位上加上執(zhí)行權(quán)限,這就用到下面這個(gè)參數(shù):
anon_umask=八進(jìn)制數(shù)
這個(gè)參數(shù)值的計(jì)算方法與本地用戶local_umask參數(shù)一樣,不在贅述。
在以上的實(shí)驗(yàn)中,大家可能已經(jīng)注意到匿名用戶上傳的檔案所有者為ftp,這們也可能用下面兩個(gè)參數(shù)來改變檔案所有者:
- chown_uploads=yes/no //是否開啟修改默認(rèn)匿名上傳檔案所有者的功能
- chown_username=本地用戶名 //匿名上傳檔案的所有者名
匿名用戶使用任何密碼都是可以登陸服務(wù)器的,那么我們可以免了匿名用戶登陸必須輸入密碼的步驟,只要我們在配置文件中加入:
- no_anon_password=yes
匿名用戶的參數(shù)還有很多,我們就不一一介紹了
到此,我們已經(jīng)可以達(dá)建出的ftp服務(wù)器已經(jīng)可以滿足很多場合的需要了,如果有要求更加苛刻的場合,那就還需要進(jìn)一步設(shè)置。
【編輯推薦】