在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服務器。