[vsftp服務]——ftp虛擬使用者、許可權設定等的實驗

Jelly_lyj發表於2017-03-18

搭建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.實驗中出現的錯誤記錄,請參考:

相關文章