1、ftp簡介
網路檔案的共享主流的主要有三種,分別為ftp
、nfs
、samba
ftp
用於internet
上的控制檔案的雙向傳輸
上傳和下載的操作
下載 | 上傳 |
---|---|
將主機中的內容拷貝到計算機上 | 將檔案從計算機拷貝到主機上 |
2、ftp構架
FTP工作應用層,其監聽埠為tcp
的21
,其是一種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 http://mirrors.163.com/.help/CentOS7-Base-163.repo
--2020-04-01 03:57:17-- http://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 lzj@192.168.135.145:~> ls#剛開始別以為報錯,只是載入慢過一會就好了
Interrupt
lftp lzj@192.168.135.145:~>
lftp lzj@192.168.135.145:~> 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 lzj@192.168.135.145:/> mkdir 123
mkdir ok, `123' created
lftp lzj@192.168.135.145:/> 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 lzj@192.168.135.145:/> put 123
put: /root/123: No such file or directory
lftp lzj@192.168.135.145:/> put geshi.sh
35 bytes transferred
lftp lzj@192.168.135.145:/> 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 ftp@192.168.135.145:~> 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 ftp@192.168.135.145:~> 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 ftp@192.168.135.145:~> get 1 #下載
lftp ftp@192.168.135.145:/> mkdir 12309
#報錯原因沒有將服務端的共享目錄設定為777
mkdir: Access failed: 550 Create directory operation failed. (12309)
lftp ftp@192.168.135.145:/>
lftp ftp@192.168.135.145:/> mkdir 12309
mkdir ok, `12309' created
lftp ftp@192.168.135.145:/> 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 ftp@192.168.135.145:/>
配置系統使用者
#下載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 chroot1@192.168.135.145:~> ls
lftp chroot1@192.168.135.145:~> 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 chroot1@192.168.135.145:~>