vsftpd相關應用解析

FTP(File Transfer Protocol)文件傳輸協議

FTP 是 TCP/IP 協議組中的協議之一。該協議是Internet文件傳送的基礎,它由一系列規格說明文檔組成,目標是提高文件的共享性,提供非直接使用遠程計算機,使存儲介質對用戶透明和可靠高效地傳送數據。簡單的說,FTP就是完成兩臺計算機之間的拷貝,從遠程計算機拷貝文件至自己的計算機上,稱之為“下載(download)”文件。若將文件從自己計算機中拷貝至遠程計算機上,則稱之為“上傳(upload)”文件。在TCP/IP協議中,FTP標準命令TCP端口號為21,Port方式數據端口為20。

兩類連接:

命令連接:傳輸命令

數據連接:傳輸數據

兩種模式:

主動模式:PORT

Server: 20/tcp連接客戶端的命令連接使用的端口向后的第一個可用端口

被動模式:PASV

Server:打開一個隨機端口,并等待客戶端連接

主動FTP:    

命令連接:客戶端 >1023端口 -> 服務器 21端口    

數據連接:客戶端 >1023端口 <- 服務器 20端口   

被動FTP:    

命令連接:客戶端 >1023端口 -> 服務器 21端口    

數據連接:客戶端 >1023端口 -> 服務器 >1023端口

很多防火墻在設置的時候都是不允許接受外部發起的連接的,所以許多位于防火墻后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火墻打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。

 

PAM(Pluggable Authentication Modules )可插拔認證模塊:

PAM是由Sun提出的一種認證機制。它通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程序,同時也便于向系統中添加新的認證手段。

PAM支持的四種管理界面:

1、認證管理(authenticationmanagement)  

主要是接受用戶名和密碼,進而對該用戶的密碼進行認證,并負責設置用戶的一些秘密  信息。  

2、帳戶管理(accountmanagement)  

主要是檢查帳戶是否被允許登錄系統,帳號是否已經過期,帳號的登錄是否有時間段的  限制等等。  

3、密碼管理(passwordmanagement)  

主要是用來修改用戶的密碼。  

4、會話管理(sessionmanagement)  

主要是提供對會話的管理和記賬(accounting)。

vsftpd相關應用解析 

 

vsftpd

vsftpd (very secure FTP daemon),安全性是它的一個最大的特點。vsftpd 是一個UNIX類操作系統上運行的服務器的名字,它可以運行在諸如 Linux、BSD、Solaris、HP-UNIX等系統上面,是一個完全免費的、開放源代碼的ftp服務器軟件,支持很多其他的 FTP 服務器所不支持的特征。比如:非常高的安全性需求、帶寬限制、良好的可伸縮性、可創建虛擬用戶、支持IPv6、速率高等。

vsftpd以ftp用戶的身份運行進程,默認認用戶即為ftp用戶,匿名用戶的默認路徑即ftp用戶的家目錄/var/ftp

程序環境:

主程序:/usr/sbin/vsftpd

主配置文件:/etc/vsftpd/vsftpd.conf

數據根目錄:/var/ftp

Systemd Unit File(系統單元文件):/usr/lib/systemd/system/vsftpd.service

[root@localhost ~]#yum -y install vsftpd (安裝vsftpd)[root@localhost ~]#systemctl start vsftpd.service   (啟動)[root@localhost ~]#ps auxroot 5808 0.0 0.0 52708 564 ? Ss 07:42 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf[root@localhost ~]#ss -tnl  (查看端口)LISTEN   0      32               :::21                 :::*  

配置vsftpd

用戶類別:

匿名用戶:anonymous –> ftp,/var/ftp

系統用戶:禁止系統用戶訪問ftp服務,/etc/vsftpd/ftpusers,PAM(/etc/pam.d/vsftpd)

虛擬用戶:非系統用戶,用戶賬號非為可登錄操作系統的用戶賬號(非/etc/passwd)

 

匿名用戶:

[root@localhost ~]#yum -y install lftp (安裝lftp)[root@localhost ~]#lftp 172.16.250.149      (主機1)lftp anonymous@172.16.250.149:/> lftp -u ftp 172.16.250.149lftp 172.16.250.149:/> lftp -u anonymous 172.16.250.149lftp 172.16.250.149:~> ls口令:lftp ftp@172.16.250.149:~> lsdrwxr-xr-x    2 0        0               6 Nov 05  2016 pub [root@localhost ~]#cp /etc/issue /var/ftp/pub/[root@localhost ~]#cd /var/ftp/pub/[root@localhost /var/ftp/pub]#chown ftp.ftp issue [root@localhost ~]#lftp -u rookie 172.16.250.149 主機2Password:lftp rookie@172.16.250.149:~> cd /var/ftp/pub/lftp rookie@172.16.250.149:/var/ftp/pub> ls-rw-r--r--    1 14       50             23 Jun 06 02:08 issuelftp rookie@172.16.250.149:/var/ftp/pub> rm issuerm: Access failed: 550 Delete operation failed. (issue) (刪除操作失敗)注意:一個用戶通過文件共享服務訪問文件系統上的文件的生效權限為此二者的交集(默認情況下匿名用戶只有下載和查看的權限,無刪除權限)

lftp rookie@172.16.252.245:~> lftp -u rookie 172.16.250.149 (主機2)口令:lftp rookie@172.16.250.149:~> pwd        (查看家目錄)           ftp://rookie@172.16.250.149/%2F/home/rookie[root@localhost ~]#yum -y install finger[root@localhost ~]#finger rookieLogin: rookie           Name:Directory: /home/rookie             Shell: /bin/bashNever logged in.No mail.No Plan.

配置文件:/etc/vsftpd/vsftpd.conf

  directive value

注意:directive之前不能有多余字符

 

匿名用戶:

anonymous_enable=YES (是否支持啟用匿名賬號)

anon_upload_enable=YES (特定條件下上傳文件)

anon_mkdir_write_enable=YES (一定條件下創建新目錄)

anon_other_write_enable=YES (上傳和刪除目錄)

anon_world_readable_only=YES (是否全局只讀)

 

系統用戶:

local_enable=YES (是否啟用本地用戶)

write_enable=YES (是否本地用戶使用寫權限)

local_umask=022

[root@localhost ~]#useradd rookie (主機1)[root@localhost ~]#echo qwer | passwd --stdin rookie更改用戶 rookie 的密碼 。passwd:所有的身份驗證令牌已經成功更新。 [root@localhost /etc]#lftp -u rookie 172.16.250.149 (主機2)口令:lftp rookie@172.16.250.149:~> lslftp rookie@172.16.250.149:~> pwd  ftp://rookie@172.16.250.149/%2Fhome/rookie root@localhost ~]#yum -y install finger (主機1)[root@localhost ~]#finger rookieLogin: rookie           Name:Directory: /home/rookie             Shell: /bin/bashNever logged in.No mail.No Plan.[root@localhost /etc]#su - rookie[rookie@localhost ~]$ touch hi.rookie (創建hi.rookie) lftp rookie@172.16.250.149:~> ls          (主機2)-rw-rw-r--    1 1001     1001            0 Jun 06 00:53 hi.rookie [root@localhost /var/ftp]#mkdir upload (主機1)[root@localhost /var/ftp]#chown ftp.ftp upload/[root@localhost /etc/vsftpd]#vim vsftpd.conf    (上傳文件)

vsftpd相關應用解析 

[root@localhost /etc/vsftpd]#systemctl restart vsftpd.service

[root@localhost ~]#lftp 172.16.250.149 (主機2)lftp 172.16.250.149:~> lsdrwxr-xr-x    2 0        0              19 Jun 06 02:08 pubdrwxr-xr-x    2 14       50              6 Jun 06 02:23 uploadlftp 172.16.250.149:/> cd upload/lftp 172.16.250.149:/upload> put /etc/issue23 bytes transferred    lftp 172.16.250.149:/upload> rm issuerm: Access failed: 550 Permission denied. (issue)   (上傳的文件無法刪除) [root@localhost /etc/vsftpd]#ls /var/ftp/upload/ (主機1)issue

[root@localhost /etc/vsftpd]#vim vsftpd.conf (主機1)(添加創建和刪除目錄權限)

vsftpd相關應用解析 

[root@localhost /etc/vsftpd]#systemctl restart vsftpd.service [root@localhost ~]#lftp 172.16.250.149 (主機2)lftp 172.16.250.149:~> cd upload/lftp 172.16.250.149:/upload> mkdir test (創建test目錄)mkdir ok, `test' createdlftp 172.16.250.149:/upload> cd test/lftp 172.16.250.149:/upload/test> put /etc/fstab (將fstab考到test目錄下)541 bytes transferredlftp 172.16.250.149:/upload/test> ls (自己不可見)lftp 172.16.250.149:/upload/test> rm fstab   (但是可以刪除)rm ok, `fstab' removedlftp 172.16.250.149:/upload/test> cd ..lftp 172.16.250.149:/upload> rmdir test (將test目錄刪除)rmdir ok, `test' removedlftp 172.16.250.149:/upload> rm issue (將issue刪除)rm ok, `issue' removed

FTP協議是明文的,因此并不安全[root@localhost ~]#lftp -u rookie 172.16.250.149Password:lftp rookie@172.16.250.149:~> ls       lftp rookie@172.16.250.149:~>     [root@localhost /etc]#tcpdump -i ens33 -nn -XX tcp port 2122:14:10.133030 IP 172.16.251.163.58862 > 172.16.250.149.21: Flags [P.], seq 21:34, ack 134, win 229, options [nop,nop,TS val 16566583 ecr 8458676], length 130x0000:  000c 29d1 9c19 000c 29e1 d9c5 0800 4500  ..).....).....E.0x0010:  0041 9f1a 4000 4006 4d42 ac10 fba3 ac10  .A..@.@.MB......0x0020:  fa95 e5ee 0015 55b9 564e 4985 9628 8018  ......U.VNI..(..0x0030:  00e5 4e8e 0000 0101 080a 00fc c937 0081  ..N..........7..0x0040:  11b4 5553 4552 2072 6f6f 6b69 650d 0a    ..USER.rookie..(用戶名)22:14:10.135448 IP 172.16.251.163.58862 > 172.16.250.149.21: Flags [P.], seq 34:45, ack 168, win 229, options [nop,nop,TS val 16566585 ecr 8458679], length 110x0000:  000c 29d1 9c19 000c 29e1 d9c5 0800 4500  ..).....).....E.0x0010:  003f 9f1b 4000 4006 4d43 ac10 fba3 ac10  .?..@.@.MC......0x0020:  fa95 e5ee 0015 55b9 565b 4985 964a 8018  ......U.V[I..J..0x0030:  00e5 4e8c 0000 0101 080a 00fc c939 0081  ..N..........9..0x0040:  11b7 5041 5353 2071 7765 720d 0a         ..PASS.qwer..(密碼)

列在此文件中的用戶均禁止使用ftp服務

輔助配置文件/etc/vsftpd/ftpusers

[root@localhost /etc/vsftpd]#echo rookie >> ftpusers (主機1)[root@localhost /etc/vsftpd]#!syssystemctl restart vsftpd.service [root@localhost ~]#lftp -u rookie 172.16.250.149 (主機2)Password:lftp rookie@172.16.250.149:~> ls       ls: Login failed: 530 Login incorrect.     (登錄失?。?  

禁錮所有本地用戶于其家目錄,需要事先去除用戶對家目錄的寫權限

chroot_local_user=YES

禁錮列表中文件存在的用戶于其家目錄中,需要事先去除用戶對家目錄的寫權限

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

[root@localhost ~]#yum -y install ftp (主機2)[root@localhost ~]#ftp 172.16.250.149Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie  (用戶名)331 Please specify the password.Password:   (密碼)230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> pwd257 "/home/rookie"  (家目錄)ftp> cd /etc/ (切換到/etc下)250 Directory successfully changed. (可成功切換) [root@localhost /etc/vsftpd]#for i in {1..5}; do useradd rookie$i; echo 'qwer' | passwd --stdin rookie$i; done (主機1)更改用戶 rookie1 的密碼 。passwd:所有的身份驗證令牌已經成功更新。更改用戶 rookie2 的密碼 。passwd:所有的身份驗證令牌已經成功更新。更改用戶 rookie3 的密碼 。passwd:所有的身份驗證令牌已經成功更新。更改用戶 rookie4 的密碼 。passwd:所有的身份驗證令牌已經成功更新。更改用戶 rookie5 的密碼 。passwd:所有的身份驗證令牌已經成功更新。[root@localhost /etc/vsftpd]#chmod a-w /home/rookie1    (去掉寫權限)[root@localhost /etc/vsftpd]#chmod a-w /home/rookie2    (去掉寫權限)[root@localhost /etc/vsftpd]#vim chroot_listrookie1rookie2

vsftpd相關應用解析 

[root@localhost /etc/vsftpd]#!syssystemctl restart vsftpd.service [root@localhost ~]#ftp 172.16.250.149 (主機2)Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie1331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> pwd257 "/"ftp> cd /etc/550 Failed to change directory. (無法切換目錄)

控制可登錄vsftpd服務的用戶列表:

userlist_enable=YES

啟用/etc/vsftpd/user_list文件來控制可登錄用戶

userlist_deny=

YES:意味著此為黑名單

NO:白名單

[root@localhost ~]#vim /etc/vsftpd/vsftpd.conf (改為白名單)

vsftpd相關應用解析 

[root@localhost /etc/vsftpd]#vim user_list (準許登錄的用戶)

vsftpd相關應用解析 

[root@localhost /etc/vsftpd]#!syssystemctl restart vsftpd.service [root@localhost ~]#ftp 172.16.250.149 (主機2)Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie1331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> ls227 Entering Passive Mode (172,16,250,149,60,44).150 Here comes the directory listing.226 Directory send OK. [root@localhost ~]#ftp 172.16.250.149Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie3530 Permission denied.Login failed.ftp> ls530 Please login with USER and PASS.Passive mode refused.

傳輸日志:

xferlog_enable=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

守護進程的類型:

standalone:獨立守護進程;由服務進程自行監聽套按字,并接收用戶訪問請求

transient:瞬時守護進程;由受托管方代為監聽套按字,服務進程沒有訪問請求時不啟動,當托管方收到訪問請求時,才啟動服務進程

CentOS 6:xinetd獨立守護進程, /etc/xinetd.d/

CentOS 7:由systemd代為監聽

 

上傳下載速率:

anon_max_rate=0

local_max_rate=0

并發連接數限制:

max_clients=2000

max_per_ip=50

             

 

原創文章,作者:Linux.rookie,如若轉載,請注明出處:http://www.www58058.com/77685

(0)
Linux.rookieLinux.rookie
上一篇 2017-06-06 19:06
下一篇 2017-06-06 20:35

相關推薦

  • 硬鏈接與軟鏈接

    硬連接:          其本質就是:一個文件,多個名字。注意:目錄是沒有硬鏈接的。 用ln filename linkname創建硬鏈接,注意源文件和鏈接文件位置順序,硬鏈接不可以跨分區建。 在創建硬鏈接時會增加硬連接數,可以通過ls –l查看,如下圖所示的,可看到硬鏈接數。…

    2017-07-20
  • grep命令

    grep命令:grep(global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來;grep搜索的結果被送到屏幕,不影響原文件內容。Unix的grep家族包括grep、egrep和fgrep…

    Linux干貨 2016-08-08
  • 磁盤管理之swap,移動設備及dd命令的使用

    首先我們來復習一下前一天的內容 CHS Sector(扇區) 512字節 track(磁道) 63個 2^6個扇區 1024個磁道,10個位存儲磁道數 track=cylinder(柱面) cylinder=(容量)sector(512)track(63)head(256)=8M head(磁頭) 256 8位存儲 MBR的分區方式都是基于柱面為整…

    Linux干貨 2016-09-07
  • Shell腳本編程 流程控制—選擇

    流程控制可根據不同的情況做不同的處理,而且可重復執行指定的程序區域,在shell bash中流程控制可分為兩大類: "選擇"和"循環" 1.選擇:if、case、select 2.循環:for、while、until、select 命令結束狀態返回值: 在shell中命令執行狀態返回值分兩種,成功和失敗,0表示成功,非…

    Linux干貨 2016-08-24
  • SecureCRT 8.0破不了

    各種辦法,各種百度都破不了,ok解決辦法:一用管理員身份運行crt二,注冊機打開,時ptah欄里,把SecureCRT 8.0的安裝路徑拷貝到PATH框

    Linux干貨 2018-05-04
  • 硬鏈接和軟鏈接的區別

    硬鏈接和軟鏈接在文件系統實現上的區別決定了兩者之間功能上的不同,也就是說硬鏈接和軟鏈在文件系統上兩者實現的方式不同,讓其各自具有不同的功能和特色,也決定了各自的優點和缺點。接下同文件系統上創建硬鏈接和軟鏈接看各自的特點。 一文件系統上創建硬鏈接 下面命令是在文件系統上創建一個硬鏈接: ~]# ln test /testdir/t…

    Linux干貨 2016-10-29
欧美性久久久久