FTP服務學習筆記之vsftpd安裝和配置(2)

在redhat5部署FTP服務

實驗環境介紹:

操作系統:Redhat5.8_X64bit

實驗平臺:VMware Workstation


一、基於匿名用戶的FTP服務部署

1、匿名FTP

   訪問匿名的FTP服務器時不需要密碼,只需要用戶名"ftp"和"anonymous"。

2、安裝vsftpd軟件

#yum install vsftpd
#rpm -ql vsftpd

3、啓動vsftpd服務

#service vsftpd start
#chkconfig vsftpd on

4、測試ftp服務是否可以訪問

[root@localhost ~]# ftp 192.168.3.3
Connected to 192.168.3.3.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.3.3:root): ftp   //使用匿名用戶登錄(ftp或者anonymous)
331 Please specify the password.
Password:    -->密碼“空”
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

5、調整匿名上傳目錄權限,並準備下載測試文件。

# ls -ld /var/ftp/pub/    -->查看修改前的權限
drwxr-xr-x 2 root root 4096Dec  5 2011 /var/ftp/pub/
# chown ftp /var/ftp/pub  -->將pub目錄屬主設置爲ftp
You have new mail in/var/spool/mail/root
# ls -ld /var/ftp/pub/   -->確認修改後的權限
drwxr-xr-x 2 ftp root 4096Dec  5 2011 /var/ftp/pub/
# cp /etc/inittab /var/ftp/   -->複製一個文件到“/var/ftp/”目錄,已提供下載測試使用。


6、修改vsftpd.conf配置文件,開放匿名用戶訪問、上傳許可

# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES    //允許匿名用戶訪問
local_enable=NO       //若不需要啓用本地用戶,可將此配置項設爲NO
write_enable=YES      //允許開放寫權限
anon_umask=022        //設置匿名用戶上傳建立文件時的權限掩碼
anon_upload_enable        //允許匿名上傳文件
anon_mkdir_write_enable=YES    //允許匿名用戶創建目錄
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO      //未啓用本地用戶時,可以將用戶列表功能禁用
tcp_wrappers=YES

7、重新啓動vsftpd服務

#service vsftpd restart


8、在客戶端訪問FTP服務器(192.168.3.3),測試下載上傳功能

[root@localhost ~]# ftp192.168.3.3    //登錄vsftpd服務器
Connected to 192.168.3.3.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.3.3:root): ftp    //以匿名用戶進行認證,密碼可爲空或任意字符
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls     //查看FTP根目錄下的文件、目錄列表
227 Entering Passive Mode (192,168,3,3,20,191)
150 Here comes the directory listing.
-rw-r--r--    1 0        0      1666 Nov 25 07:57 inittab
drwxr-xr-x    2 14        0        4096 Nov 25 07:57 pub
226 Directory send OK.
ftp> get inittab     //下載服務器中的inittab文件到本地
local: inittab remote: inittab
227 Entering Passive Mode (192,168,3,3,145,227)
150 Opening BINARY mode data connection for inittab (1666bytes).
226 File send OK.
1666 bytes received in 0.016 seconds (99 Kbytes/s)
ftp> cd pub  //切換到服務器中用於上傳文件的目錄
250 Directory successfully changed.
ftp> put install.log  //上傳本地文件到服務器上
local: install.log remote: install.log
227 Entering Passive Mode (192,168,3,3,239,137)
150 Ok to send data.
226 File receive OK.
56895 bytes sent in 0.034 seconds (1.6e+03 Kbytes/s)
ftp> ls   //查看上傳目錄中的文件屬性
227 Entering Passive Mode (192,168,3,3,149,233)
150 Here comes the directory listing.
-rw-------    1 14     50   56895Nov 26 13:04 install.log
226 Directory send OK.
ftp> quit  //斷開FTP連接並退出
221 Goodbye.
[root@localhost ~]# ls -lh inittab  //查看下載到本地的文件
-rw-r--r-- 1 root root 1.7K Nov 26 21:03 inittab
 
如果只是下載文件,也可以使用wget工具,指定服務器地址及文件路徑即可進行下載
[root@localhost ~]# wget ftp://192.168.3.3/inittab
--2015-11-26 21:22:29--  ftp://192.168.3.3/inittab
           => `inittab'
Connecting to 192.168.3.3:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD not needed.
==> SIZE inittab ... 1666
==> PASV ... done.    ==> RETR inittab ... done.
Length: 1666 (1.6K)
 
100%[===================>] 1,666   --.-K/s   in0s      
2015-11-26 21:22:29 (4.24 MB/s) - `inittab' saved [1666]


注意:由於匿名FTP根目錄”/var/ftp/”的默認權限爲755,因此不要將目錄的屬主更改爲ftp,否則匿名訪問時可能會報錯”500 OOPS:vsftpd:refusing to run with writable anonymous root”,導致訪問失敗。

二、基於本地用戶的FTP服務部署

vsftpd可以直接使用Linux系統的本地用戶作爲FTP用戶,提供基於用戶名和密碼的登錄驗證。使用本地用戶登錄FTP服務器後,默認將位於自己的宿主目錄中,且在宿主目錄中擁有讀寫權限,並允許切換到其他目錄。使用chroot_local_user配置項可以將本地用戶禁錮在宿主目錄中(不允許切換到其他目錄下),使用local_root配置項可以將本地用戶的ftp根目錄設置爲同一個文件夾。

  下面配置一個基於本地用戶並進行帶寬、用戶數限制的FTP服務器爲例,操作步驟如下:

1、添加FTP測試用戶(即本地用戶),並準備下載測試文件。

[root@localhost ~]# useradd test1
[root@localhost ~]# passwd test1
[root@localhost ~]# ls -lh /etc/*.conf > /home/test1/etcconf.list


2、修改vsftpd.conf配置文件,開放本地用戶。

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO  //若不需要啓用匿名訪問,可將此配置項設爲NO
local_enable=YES    //允許本地用戶訪問
write_enable=YES    //允許開放寫權限
local_umask=022     //設置本地用戶上傳建立文件時的權限掩碼
chroot_local_user=YES  //爲安全起見,建議將用戶禁錮於宿主目錄中
max_client=20        //限制併發客戶連接數爲最多20個
max_per_ip=2         //限制來自同一IP的客戶連接數最多爲2個
local_max_rate=102400   //本地用戶下載、上傳限速爲100KB/s  
pasv_enable=YES     //允許被動模式並設置端口範圍
pasv_min_port=24500
pasv_max_port=24600
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
:wq 保存退出


如果希望vsftpd服務只對特定的本地用戶開放,可以使用userlist_enable、userlist_deny配置項並結合用戶列表文件'/etc/vsftpd/user_list'實現

例如:結合user_list文件配置僅允許本地用戶test1訪問vsftpd服務器。

#vim /etc/vsftpd/user_list
test1          //添加此行,並清空其他內容
#vim /etc/vsftpd/vsftpd.conf  //修改或添加以下兩行配置項
userlist_enable=YES
userlist_deny=NO


3、重新啓動vsftpd服務

[root@localhost ~]# service vsftpd restart

4、在客戶端訪問FTP服務器(192.168.3.3),測試下載及上傳功能

[root@localhost ~]# ftp 192.168.3.3   //登錄vsftpd服務器
Connected to 192.168.3.3.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.3.3:root): test1  //test1用戶登錄
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd   //查看當前目錄
257 "/"
ftp> ls  //查看FTP根目錄下的文件、目錄列表
227 Entering Passive Mode (192,168,3,3,95,218)
150 Here comes the directory listing.
-rw-r--r--    1 0        0            2831 Nov 27 12:19 etcconf.list
226 Directory send OK.
ftp> get etcconf.list  //下載服務器中的etcconf.list文件到本地
local: etcconf.list remote: etcconf.list
227 Entering Passive Mode (192,168,3,3,95,248)
150 Opening BINARY mode data connection for etcconf.list (2831 bytes).
226 File send OK.
2831 bytes received in 0.00064 seconds (4.3e+03 Kbytes/s)
ftp> put install.log   //上傳本地文件到服務器上
local: install.log remote: install.log
227 Entering Passive Mode (192,168,3,3,95,203)
150 Ok to send data.
226 File receive OK.
56895 bytes sent in 0.038 seconds (1.5e+03 Kbytes/s)
ftp> ls   //查看上傳目錄中的文件屬性
227 Entering Passive Mode (192,168,3,3,95,250)
150 Here comes the directory listing.
-rw-r--r--    1 0        0            2831 Nov 27 12:19 etcconf.list
-rw-r--r--    1 502      502         56895 Nov 27 13:23 install.log
226 Directory send OK.
ftp>


三、建立基於虛擬用戶的vsftpd服務

1、建立虛擬用戶的用戶名/密碼數據

vsftpd服務的虛擬用戶數據庫時使用Berkeley DB格式的數據庫。建立該數據庫文件需要用到db_load命令工具。

[root@localhost ~]# yum install db4-utils 
//安裝此包獲得db_load命令


2、建立文本格式的用戶名/密碼列表文件,奇數行爲用戶名,偶數行爲上一行中的用戶所對應的密碼。

[root@localhost ~]# vim /etc/vsftpd/vusers.list  (文件名可以隨便取)
mike     
123
john
456

3、然後用db_load工具將列表文件轉化爲DB數據庫文件

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@localhost vsftpd]# file vusers.db   //查看文件類型
vusers.db: Berkeley DB (Hash, version 8, native byte-order)
[root@localhost vsftpd]# chown 600 /etc/vsftpd/vusers.*  //降低文件權限以提高安全性
db_load選項說明:
     -f:用於指定用戶名/密碼列表文件
     -T:允許非Berkeley DB的應用程序使用從文本格式轉換的DB數據文件
     -t hash:指定讀取數據文件的基本方法
關於db_load命令的詳細說明可參閱"cat /usr/share/doc/db4-utils-4.3.29/utility/db_load.html
"文件。


4、建立FTP訪問的根目錄及虛擬用戶對應的系統賬號

   vsftpd虛擬用戶需要有一個對應的系統用戶賬號(該賬號無需設置密碼及登錄shell),該用戶賬號的宿主目錄作爲所有虛擬用戶登錄後的共同FTP根目錄。

[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual //建立映射賬號virtual
[root@localhost ~]# chmod 755 /var/ftproot/     //更改FTP根目錄權限
[root@localhost ~]# ls -lh /boot >/var/ftproot/vutest.file  //建立測試文件


5、建立PAM認證文件

   PAM配置文件主要用於爲程序提供用戶認證控制,vsftpd服務使用默認的PAM配置文件爲“/etc/pam.d/vsftpd”,可以參考該文件的格式建立新的PAM配置文件,用於虛擬用戶認證控制。

[root@localhost ~]# vim /etc/pam.d/vsftpd.vu  //添加下面幾行內容
#%PAM-1.0
auth       required      pam_userdb.so db=/etc/vsftpd/vusers
account    required      pam_userdb.so db=/etc/vsftpd/vusers

注意:db指向的數據庫文件vusers(省略.db擴展名)

6、修改vsftpd.conf配置文件,添加虛擬用戶支持

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES       //使用虛擬用戶需要啓用本地用戶
write_enable=YES
anon_umask=022     //設置虛擬用戶所上傳文件的默認權限掩碼
guest_enable=YES     //啓用用戶映射功能
guest_username=virtual   //將映射用戶指定爲virtual
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu   //修改使用PAM文件位置
userlist_enable=YES
tcp_wrappers=YES

7、爲不同的虛擬用戶建立獨立的配置文件

    通過前面幾個步驟,實際上已經可以重新啓動vsftpd並提供服務,使用虛擬用戶賬號可以登陸FTP服務器下載文件。本步驟將介紹爲個別虛擬用戶設置不同的訪問權限,

1)、修改vsftpd.conf主配置文件,添加用戶配置目錄支持。

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir  //添加此行配置項,指定用戶配置目錄位置

2)、爲mike、john建立的配置目錄文件

[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir/   //創建用戶配置目錄
[root@localhost ~]# cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# vim john    //爲john用戶建立獨立的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@localhost vusers_dir]# touch mike      //爲mike用戶建立空配置文件(無額外權限設置)

8、重新啓動vsftpd服務

[root@localhost ~]# service vsftpd restart

9、使用虛擬用戶賬號訪問FTP服務

 在客戶端使用虛擬用戶mike、john分別登錄FTP服務器進行下載、上傳文件測試,結果如下:

  • 使用mike用戶可以登錄測試vsftpd服務器,並可以瀏覽、下載文件,但是無法上傳文件。

  • 使用john用戶可以登錄vsftpd服務器,且可以瀏覽、下載文件,也可以上傳文件。

  • 使用匿名用戶或者其他系統用戶時,將不能登錄該vsftpd服務器。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章