vsftpd服務器配置與使用

1、ftp簡介

網絡文件的共享主流的主要有三種,分別為ftpnfssamba

ftp用於internet上的控制文件的雙向傳輸

上傳和下載的操作

下載 上傳
將主機中的內容拷貝到計算機上 將文件從計算機拷貝到主機上

2、ftp構架

FTP工作應用層,其監聽端口為tcp21,其是一種C/S架構的應用程序,其有多種客戶端工具

客戶端工具 服務端軟件
ftp wu-ftpd
Iftp,Iftpget proftpd
wget.curl pureftp
filezilla vsftpd
gftp ServU

3、ftp數據連接模式

3.1、連接模式分類

ftp有兩種數據連接模式:命令連接和數據連接

  • 命令連接模式:是指文件管理命令,始終在線的持久性連接,直到用戶退出登錄為止(相當於通過命令連接ftp並且操作)

  • 數據連接模式:是指數據傳輸,按需創建及其關閉

    3.2、數據傳輸格式和傳輸模式

    數據傳輸格式有一下兩種:

    • 文件傳輸
    • 二進制傳輸

    數據傳輸:

    • 主動模式:由服務器端創建數據連接
    • 被動模式:由客戶端創建數據連接

    說白了,就是客戶端上傳為被動

    4、ftp的配置文件

    文件位置 說明
    /etc/vsftpd 配置文件目錄
    /etc/vsftpd 配置文件目錄
    /etc/vsftpd/vsftpd.conf 主配置文件

    vsftp常見配置文件參數:

    參數 作用
    anoymous_enable=YES 啟動匿名用戶
    anon_upload_enable=YES 允許匿名用戶上傳
    anon_mkdir_write_enable=YES 允許用戶創建目錄,但是不能刪除
    anon_other_write_enable=YES 允許匿名用戶創建和刪除目錄
    local_enable=YES 啟用本地用戶登錄
    write_unask=022 ftp上傳默認遮掩碼
    chroot_list_user=YES 禁錮所有本地ftp用戶於其家目錄中
    chroot_list_enable=YES 開啟禁錮文件列表,需要chroot_list_file一起使用
    chroot_list_file=/etc/vsftpd/chroot_list 禁錮文件路徑,在文件裏面的用戶將禁錮在其家目錄中
    allow_writeable_chroot=YES 被禁錮用戶的家目錄有寫的權限
    xferlog_enabel=YES 是否傳輸日誌(記錄ftp傳輸過程)
    xferlog_enable=/var/log/xferlog 日誌儲存位置
    chown_uploads=YES 是否改變上傳文件的屬主功能
    chown_username=whoever 指定上傳文件屬主該為那個用戶
    pam_server_name=vsftp 指定vsftpd使用/etc/pam.d下的那個pam配置文件進行用戶認證
    userlist_enable=YES 是否啟用控制用戶登錄列表文件:默認為:/etc/vsftpd/user_list文件
    userlist_deny=YES 是否拒絕userlist指定的列表文件存在的用戶登錄ftp
    max_clients=# 最大連接數
    max_per_ip 同時ip請求數
    anon_max_rate 匿名最大傳輸速錄
    local_max_rate 本地最大傳輸速率
    message_file 訪問目錄時可以查看目錄信息
    data_connection_timeout=120 設置傳輸超時時間
    idle_session_timeout=600 默認不活躍session時間
    dirmessage_enable 啟用某目錄下的,message描述信息

5、安裝vsftpd

[root@localhost ~]# yum install -y vsftpd
Loaded plugins: product-id, search-disabled-repos, subscription-
              : manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
name                                           | 3.6 kB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:3.0.2-25.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================
 Package       Arch          Version                Repository   Size
======================================================================
Installing:
 vsftpd        x86_64        3.0.2-25.el7           name        171 k

Transaction Summary
======================================================================
Install  1 Package

Total download size: 171 k
Installed size: 353 k
Downloading packages:
vsftpd-3.0.2-25.el7.x86_64.rpm                   | 171 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : vsftpd-3.0.2-25.el7.x86_64                         1/1 
  Verifying  : vsftpd-3.0.2-25.el7.x86_64                         1/1 

Installed:
  vsftpd.x86_64 0:3.0.2-25.el7                                        

Complete!
#啟動ftpd
[root@localhost ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-04-01 03:41:21 EDT; 27s ago
  Process: 1383 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 1384 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─1384 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Apr 01 03:41:21 localhost.localdomain systemd[1]: Starting Vsftpd f...
Apr 01 03:41:21 localhost.localdomain systemd[1]: Started Vsftpd ft...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# 
#查看端口
[root@localhost ~]# ss -antl | grep 21
LISTEN     0      32          :::21                      :::*                  
[root@localhost ~]# 

vsftp虛擬用戶設置

#配置網絡倉庫和下載依賴
[root@localhost yum.repos.d]# wget //mirrors.163.com/.help/CentOS7-Base-163.repo
--2020-04-01 03:57:17--  //mirrors.163.com/.help/CentOS7-Base-163.repo
Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251
Connecting to mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1572 (1.5K) [application/octet-stream]
Saving to: 『CentOS7-Base-163.repo』

100%[=======================================================================>] 1,572       --.-K/s   in 0s      

2020-04-01 03:57:19 (95.2 MB/s) - 『CentOS7-Base-163.repo』 saved [1572/1572]

[root@localhost yum.repos.d]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo 
[root@localhost yum.repos.d]# set 's/^enabled=.*/enabled=1/g' CentOS7-Base-163.repo 
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to 
.........
[root@localhost yum.repos.d]#  yum -y install epel-release 
[root@localhost yum.repos.d]#  yum -y install vsftpd
#創建用戶列表,奇數行為用戶,偶數行為密碼
[root@localhost yum.repos.d]# printf "lzj\n123\n" >> /etc/vsftpd/vu.list
[root@localhost yum.repos.d]# printf "lal\n345\n" >> /etc/vsftpd/vu.list
[root@localhost yum.repos.d]# cat /etc/vsftpd/vu.list 
lzj								
123								
lal			
345
[root@localhost yum.repos.d]# 
#下載db4工具
[root@localhost yum.repos.d]# yum install -y db4*
#將剛創的密碼錶轉換成數據庫
[root@localhost yum.repos.d]#  db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
#提高虛擬賬戶的安全性,設置文件權限為600
[root@localhost yum.repos.d]# chmod 600 /etc/vsftpd/vu*
[root@localhost yum.repos.d]# ll /etc/vsftpd/vu*
-rw-------. 1 root root 12288 Apr  1 04:26 /etc/vsftpd/vu.db
-rw-------. 1 root root    16 Apr  1 04:14 /etc/vsftpd/vu.list
[root@localhost ~]# vim /etc/pam.d/vsftpd 
auth       required     pam_userdb.so db=/etc/vsftpd/vu
account    required     pam_userdb.so db=/etc/vsftpd/vu

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
#修改vsftpd配置文件,添虛擬用戶支持
guest_enable=YES
guest_username=vftp
#為不同的虛擬用戶建立不同的配置文件
user_config_dir=/etc/vsftpd/vuser_dir
allow_writeable_chroot=YES
#創建主用戶
[root@localhost ~]# useradd -d /var/ftproot/ -s /sbin/nologin vftp
#讓lzj用戶可讀可寫可上傳
[root@localhost ~]# printf "anon_upload_enable=YES" >> /etc/vsftpd/vuser_dir/lzj   #允許上傳
[root@localhost ~]# printf "anon_mkdir_write_enable=YES" >> /etc/vsftpd/vuser_dir/lzj #允許寫但不允許刪
#建立其他用戶配置文件
[root@localhost ~]# touch /etc/vsftpd/vuser_dir/lal
#查看端口
[root@localhost ~]# ss -antl | grep 21
LISTEN     0      32          :::21                     :::*                  
[root@localhost ~]# cd /var
[root@localhost var]# touch ftproot/{1,2,3}
#客戶端
[root@localhost ~]# lftp -u lzj,123 192.168.135.145
lftp [email protected]:~> ls#剛開始別以為報錯,只是加載慢過一會就好了
Interrupt                          
lftp [email protected]:~> 
lftp [email protected]:~> ls
-rw-r--r--    1 0        0               0 Apr 04 06:25 1
-rw-r--r--    1 0        0               0 Apr 04 06:25 2
-rw-r--r--    1 0        0               0 Apr 04 06:25 3
lftp [email protected]:/> mkdir 123
mkdir ok, `123' created
lftp [email protected]:/> ls
-rw-r--r--    1 0        0               0 Apr 04 06:25 1
drwx------    2 1000     1000            6 Apr 04 06:29 123
-rw-r--r--    1 0        0               0 Apr 04 06:25 2
-rw-r--r--    1 0        0               0 Apr 04 06:25 3
lftp [email protected]:/> put 123
put: /root/123: No such file or directory
lftp [email protected]:/> put geshi.sh 
35 bytes transferred
lftp [email protected]:/> ls
-rw-r--r--    1 0        0               0 Apr 04 06:25 1
drwx------    2 1000     1000            6 Apr 04 06:29 123
-rw-r--r--    1 0        0               0 Apr 04 06:25 2
-rw-r--r--    1 0        0               0 Apr 04 06:25 3
-rw-------    1 1000     1000           35 Apr 04 06:32 geshi.s

配置匿名用戶

#下載ftp服務
[root@localhost ~]# yum install -y vsftpd
#修改主配置文件,在最後一行添加
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
anon_upload_enable=YES #允許匿名用戶上傳
anon_mkdir_write_enable=YES #允許匿名用戶寫和創建文件夾
#重啟服務
[root@localhost ~]# systemctl restart vsftpd
#停止防火牆和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
#查看共享目錄
[root@localhost ~]# ls /var/ftp/
01.sh  1  1234  2  3  4  pub  新建文本文檔.txt  新文件夾  新文件夾 (2)
[root@localhost ~]# 

#客戶端
[root@localhost ~]# lftp -u ftp 192.168.135.145
Password: 
lftp [email protected]:~> ls 
-rw-------    1 14       50             78 Apr 03 06:22 01.sh
-rw-r--r--    1 0        0               0 Apr 03 06:15 1
drwx------    2 14       50              6 Apr 03 06:22 1234
-rw-r--r--    1 0        0               0 Apr 03 06:15 2
-rw-r--r--    1 0        0               0 Apr 03 06:15 3
-rw-r--r--    1 0        0               0 Apr 03 06:15 4
drwxr-xr-x    2 0        0               6 Oct 30  2018 pub
-rw-------    1 14       50             55 Apr 03 05:51 新建文本文檔.txt
drwx------    2 14       50              6 Apr 03 05:51 新文件夾
drwx------    2 14       50              6 Apr 03 05:51 新文件夾 (2)
lftp [email protected]:~> exit
[root@localhost ~]# ls
anaconda-ks.cfg  geshi.sh  httpd-2.4.38  httpd-2.4.38.tar.bz2  mysql-community-release-el7-5.noarch.rpm
[root@localhost ~]# lftp -u ftp 192.168.135.145
Password: 
lftp [email protected]:~> get 1       #下載
lftp [email protected]:/> mkdir 12309
#報錯原因沒有將服務端的共享目錄設置為777
mkdir: Access failed: 550 Create directory operation failed. (12309)
lftp [email protected]:/> 
lftp [email protected]:/> mkdir 12309
mkdir ok, `12309' created
lftp [email protected]:/> ls
-rw-------    1 14       50             78 Apr 03 06:22 01.sh
-rw-r--r--    1 0        0               0 Apr 03 06:15 1
drwx------    2 14       50              6 Apr 03 07:35 12309
drwx------    2 14       50              6 Apr 03 06:22 1234
-rw-r--r--    1 0        0               0 Apr 03 06:15 2
-rw-r--r--    1 0        0               0 Apr 03 06:15 3
-rw-r--r--    1 0        0               0 Apr 03 06:15 4
drwxr-xr-x    2 0        0               6 Oct 30  2018 pub
-rw-------    1 14       50             55 Apr 03 05:51 新建文本文檔.txt
drwx------    2 14       50              6 Apr 03 05:51 新文件夾
drwx------    2 14       50              6 Apr 03 05:51 新文件夾 (2)
lftp [email protected]:/> 

配置系統用戶

#下載ftp服務
[root@localhost ~]# yum install -y vsftpd
#修改主配置文件,在最後一行添加
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
chroot_local_user=YES    #禁錮用戶
chroot_list_enable=YES	
chroot_list_file=/etc/vsftpd/chroot_list #禁錮用戶列表
#創建系統用戶和/etc/vsftpd/chroot_list 
[root@localhost data]# useradd chroot1 -d /data
[root@localhost data]# echo "123" | passwd --stdin chroot1
[root@localhost data]# echo "chroot1" > /etc/vsftpd/chroot_list
#重啟並且關閉防火牆和selinux
[root@localhost data]# systemctl restart vsftpd
[root@localhost data]# systemctl stop firewalld
[root@localhost data]# setenforce 0
[root@localhost data]# touch 1 2 3 4
#客戶端
[root@localhost ~]# lftp -u chroot1,123 192.168.135.145
lftp [email protected]:~> ls      
lftp [email protected]:~> ls
-rw-r--r--    1 0        0               0 Apr 03 07:59 1
-rw-r--r--    1 0        0               0 Apr 03 07:59 2
-rw-r--r--    1 0        0               0 Apr 03 07:59 3
-rw-r--r--    1 0        0               0 Apr 03 07:59 4
lftp [email protected]:~>