搭建ftp伺服器,滿足以下要求:
1、允許匿名使用者登入伺服器並下載檔案,下載速度設定為最高2MB/s
2、不允許本地使用者登入ftp伺服器
3、在伺服器新增虛擬使用者vuser01、vuser02、vuser03,密碼自己設定。其中:
(1)vuser01使用者的下載速度最高為3MB/s,vuser02為4MB/s,vuser03為5MB/s;
(2)vuser01可以進行檔案上傳,但不能進行其它操作;
(3)vuser02可以上傳和建立目錄;
(4)vuser03可以進行上傳、建立檔案和刪除檔案;
(5)所有虛擬使用者只能在/myserver/ftproot目錄下活動
4、設定伺服器的最大併發客戶數為10,密碼輸入次數最大為3,每個ip地址最多隻能建立5個連線
5、設定防火牆只允許進行ftp訪問和ping測試,不能訪問其它任何服務
實驗環境
伺服器A:10.0.10.158
伺服器B:10.0.100.191
客戶端C:10.0.100.198
伺服器:安裝vsftpd和db_load加密工具
# yum -y install vsftp* # yum -y install db4-utils
要求1:允許匿名使用者登入伺服器並下載檔案,下載速度設定為最高2MB/s
# vim /etc/vsftpd/vsftp.conf anonymous_enable=YES #允許匿名使用者登入 anon_max_rate=2000000 #設定最大下載速度為2MB/s
結果驗證:
# ftp 10.0.10.158 Connected to 10.0.10.158 (10.0.10.158). 220 (vsFTPd 2.2.2) Name (10.0.10.158:root): ftp ------>#用系統預設的匿名使用者ftp登入 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls -------->#匿名使用者ftp預設的家目錄是/var/ftp 227 Entering Passive Mode (10,0,10,158,118,127). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 104857600 Nov 30 06:42 100m_file ------>#事先在伺服器上傳好一個100M大小的檔案 drwxr-xr-x 2 0 0 4096 Mar 02 2012 pub 226 Directory send OK. ftp> get 100m_file local: 100m_file remote: 100m_file 227 Entering Passive Mode (10,0,10,158,189,24). 150 Opening BINARY mode data connection for 100m_file (104857600 bytes). 226 Transfer complete. 104857600 bytes received in 61.3 secs (1711.39 Kbytes/sec) ------>#看耗時和下載速度 ftp> put /etc/passwd ------>#試圖上傳一個檔案,deny local: /etc/passwd remote: /etc/passwd 227 Entering Passive Mode (10,0,10,158,126,52). 550 Permission denied. ftp> mkdir aa ------>#試圖建立目錄,deny 550 Permission denied.
要求2:在伺服器新增虛擬使用者vuser01、vuser02、vuser03,限制在/myserver/ftproot目錄下活動。且每個虛擬使用者有不同的許可權要求。
1.在配置檔案中新增對虛擬使用者的支援
# vim /etc/vsftpd/vsftp.conf guest_enable=YES #實體使用者均被假設成‘guest’登入 guest_username=virtftp #這個‘guest’被對映為本地的‘virtftp’使用者 pam_service_name=vsftpd #設定在PAM所使用的名稱,預設值為vsftpd user_config_dir=/etc/vsftpd/virt_dir #虛擬使用者的單獨配置資訊設定放在/etc/vsftpd/virt_dir下
2.編輯虛擬使用者名稱和密碼的文字檔案(奇數行是使用者名稱,偶數行是密碼)
# vim /etc/vsftpd/virt_user.txt vuser01 \\使用者名稱 123123 \\密碼 vuser02 123123 vuser03 123123
3.將文字檔案生成資料庫檔案
# db_load -T -t hash -f /etc/vsftpd/virt_user.tct /etc/vsftpd/virt_user.db
4.建立PAM認證檔案
# vim /etc/pam.d/vsftpd #%PAM-1.0 auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virt_user --->#我的機子是32位的所以是/lib(64位的機子要寫成/lib64) account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virt_user
5.建立本地使用者virtftp(我們在配置檔案中已經寫了,虛擬使用者都對映為本地使用者virtftp,且要求虛擬使用者的家目錄為/myserver/ftproot,所以virtftp的家目錄也應該是這個)
# useradd -d /myserver/ftproot/ -s /sbin/nologin virtftp #設定家目錄為/myserver/ftproot,shell為不可登入 # ll -d /myserver/ftproot/ drwx------. 3 virtftp virtftp 4096 11月 29 20:17 /myserver/ftproot/ # chmod 755 /myserver/ftproot/ #將家目錄的許可權改成755 # ll -d /myserver/ftproot/ drwxr-xr-x. 3 virtftp virtftp 4096 11月 29 20:17 /myserver/ftproot/ #家目錄的許可權和屬主屬組一定要正確
6.建立/etc/vsftpd/virt_dir目錄,在其中寫每個使用者的不同許可權配置要求(為什麼是/etc/vsftpd/virt_dir這個目錄,也是因為我們在配置檔案中設定好的)
# mkdir /etc/vsftpd/virt_dir # cd /etc/vsftpd/virt_dir # vim vuser01 ------>#在裡面寫虛擬使用者vuser01的相關配置 local_root=/myserver/ftproot ------>#使用者家目錄 anon_upload_enable=YES ------>#允許上傳 anon_max_rate=3000000 ------>#設定最大不超過3MB/s # vim vuser02 local_root=/myserver/ftproot anon_upload_enable=YES ------>#允許上傳 anon_mkdir_write_enable=YES ------>#允許建立目錄 anon_max_rate=4000000 # vim vuser03 local_root=/myserver/ftproot anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_ebale=YES ------>#允許有‘寫’以外的許可權 anon_max_rate=5000000
7.注意伺服器上防火牆和SELinux的設定(無論在伺服器還是客戶端,若出現配置無問題但總是不成功就要考慮到這兩個的設定)
# iptables -F # setenforce 0 # 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 ftpd_connect_db --> off ftpd_use_passive_mode --> off httpd_enable_ftp_server --> off tftp_anon_write --> off # setsebool ftp_home_dir 1 # setsebool tftp_anon_write 1 # setsebool allow_ftpd_anon_write 1 # setsebool allow_ftpd_full_access 1 # getsebool -a | grep ftp allow_ftpd_anon_write --> on allow_ftpd_full_access --> on allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> on ftpd_connect_db --> off ftpd_use_passive_mode --> off httpd_enable_ftp_server --> off tftp_anon_write --> on
8.還有一個要求是“不允許本地使用者登入”,但是配置檔案中不能直接就寫成"local_enable=NO",因為虛擬使用者還要登入(即對映在本地的virtftp要能登入)。所以利用user_list來實現這一要求
# vim /etc/vsftpd/vsftp.conf local_enable=YES userlist_enable=YES ------>#啟用user_list檔案 userlist_deny=NO ------>#userlist檔案變成白名單!表示只允許userlist列表中的使用者登入 # vim /etc/vsftp/userlist ------>#在userlist中寫入允許登入的使用者(即虛擬使用者) (注意並不是寫virtftp) vuser01 vuser02 vuser03
要求3:伺服器的最大併發客戶數為10,密碼輸入次數最大為3,每個ip地址最多隻能建立5個連線
# vim /etc/vsftpd/vsftp.conf max_clients=10 ------>#最大併發客戶連線數 max_per_ip=5 ------>#每個IP最大連線數
驗證
(1) vuser02使用者驗證
# ftp 10.0.10.158 Connected to 10.0.10.158 (10.0.10.158). 220 (vsFTPd 2.2.2) Name (10.0.10.158:root): vuser02 ------>#以vuser02使用者登入 331 Please specify the password. Password: 230 Login successful. ------>#可登入 Remote system type is UNIX. Using binary mode to transfer files. ftp> mkdir aa ------>#可建立目錄 257 "/aa" created ftp> ls 227 Entering Passive Mode (10,0,10,158,131,117). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 104857600 Nov 30 06:48 100m_file drwx------ 2 503 503 4096 Nov 30 08:19 aa drwxr-xr-x 2 0 0 4096 Nov 30 04:56 test 226 Directory send OK. ftp> put /test.txt ------>#可上傳檔案 local: /test.txt remote: /test.txt 227 Entering Passive Mode (10,0,10,158,106,249). 150 Ok to send data. 226 Transfer complete. ftp> ls 227 Entering Passive Mode (10,0,10,158,188,10). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 104857600 Nov 30 06:48 100m_file drwx------ 2 503 503 4096 Nov 30 08:19 aa drwxr-xr-x 2 503 503 4096 Nov 30 09:52 test -rw------- 1 503 503 0 Nov 30 09:55 test.txt 226 Directory send OK.
(2) vuser01使用者驗證
# ftp 10.0.10.158 Connected to 10.0.10.158 (10.0.10.158). 220 (vsFTPd 2.2.2) Name (10.0.10.158:root): vuser01 ------>#用vuser01登入 331 Please specify the password. Password: 230 Login successful. ------>#可登入 Remote system type is UNIX. Using binary mode to transfer files. ftp> put /test2.txt ------>#可上傳 local: /test2.txt remote: /test2.txt 227 Entering Passive Mode (10,0,10,158,94,158). 150 Ok to send data. 226 Transfer complete. ftp> ls 227 Entering Passive Mode (10,0,10,158,208,4). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 104857600 Nov 30 06:48 100m_file drwx------ 2 503 503 4096 Nov 30 08:19 aa drwxr-xr-x 2 503 503 4096 Nov 30 09:52 test -rw------- 1 503 503 0 Nov 30 09:55 test.txt -rw------- 1 503 503 0 Nov 30 09:57 test2.txt 226 Directory send OK. ftp> mkdir aa ------>#不可新建目錄 550 Permission denied.
(3) vuser03使用者驗證
# ftp 10.0.10.158 Connected to 10.0.10.158 (10.0.10.158). 220 (vsFTPd 2.2.2) Name (10.0.10.158:root): vuser03 ------>#用vuser03登入 331 Please specify the password. Password: 230 Login successful. ------>#可登入 Remote system type is UNIX. Using binary mode to transfer files. ftp> put test3.txt ------>#可上傳 local: test3.txt remote: test3.txt 227 Entering Passive Mode (10,0,10,158,89,248). 150 Ok to send data. 226 Transfer complete. ftp> mkdir bb ------>#可新建目錄 257 "/bb" created ftp> rm bb ------>#可刪除目錄(但貌似只能刪除自己建立的目錄??) 250 Remove directory operation successful. ftp> delete test2.txt ------>#可刪除檔案 250 Delete operation successful. ftp> delete test.txt 250 Delete operation successful. ftp> get 100m_file local: 100m_file remote: 100m_file 227 Entering Passive Mode (10,0,10,158,19,173). 150 Opening BINARY mode data connection for 100m_file (104857600 bytes). 226 Transfer complete. 104857600 bytes received in 21.6 secs (4856.31 Kbytes/sec) ------>#下載的速度也符合設定
(4)本地普通使用者驗證
# ftp 10.0.10.158 Connected to 10.0.10.158 (10.0.10.158). 220 (vsFTPd 2.2.2) Name (10.0.10.158:root): user_00 ------>#拒絕了本地使用者user_00的登入 530 Permission denied. Login failed.
補充
1.貼出該實驗中的配置檔案全部的有效選項
# cat vsftpd.conf | grep -v "^#" | grep -v "^$" anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=YES anon_max_rate=2000000 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES guest_enable=YES guest_username=virtftp pam_service_name=vsftpd user_config_dir=/etc/vsftpd/virt_dir userlist_enable=YES userlist_deny=NO tcp_wrappers=YES max_clients=10 max_per_ip=5 max_login_fails=3
2.實驗中出現的錯誤記錄,請參考: