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
下一篇 2017-06-06

相關推薦

  • bash的工作特性之命令執行狀態返回值和命令行展開

    bash特性之一:命令別名 將一個命令用其他名字來代替,可以用別名來簡化操作。 獲取當前用戶可用的別名的定義: ~]#alias NAME=’COMMAND’ bash的特性之二:命令歷史 shell進程會保存其會話中用戶曾經執行過的命令;命令通過其“歷史文件”來持久保存此前執行過的命令;每個用戶都有其自己專用的歷史文件; HISTSIZE:shell進程的…

    Linux干貨 2016-11-06
  • Linux基礎之權限管理(含SUID\SGID\STICKY和ACL)

    概述     Linux系統是一個多人多任務的操作系統,系統上同時可能有很多人登錄,每個人都會利用系統上的各類資源完成一定的操作。那么如何合理的規范這些用戶的行為,保證資源的合理分配,則就需要用到權限管理的相關內容了。權限管理是Linux系統上最基礎,也是最重要的一部分內容,本章就簡要說明下權限管理的相關內容。內容主要…

    Linux干貨 2016-08-04
  • linux的終端類型

    1、什么是終端 終端(Terminal)也稱終端設備,是計算機網絡中處于網絡最外圍的設備,主要用于用戶信息的輸入以及處理結果的輸出等。 在早期計算機系統中,由于計算機主機昂貴,因此一個主機(IBM大型計算機)一般會配置多個終端,這些終端本身不具備計算能力,僅僅承擔信息輸入輸出的工作,運算和處理均由主機來完成。 在個人計算機時代,個人計算機可以運行稱為終端仿真…

    Linux干貨 2016-10-19
  • 簡單shell腳本編程示例

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 腳本內容: 執行結果: 2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中 腳本內容: 執行結果: 3、編寫腳本/roo…

    Linux干貨 2016-08-15
  • 進程與計劃任務詳解

    時光匆匆,王老師代兩周的課就這樣結束了,剛適應王老師的講課風格。王老師講課進度非常快,能按照自己的思路把上課的內容每一個地方都貫徹下去。我覺得這樣是非常好的,但是筆記方面還是南老師做的詳細,各有各的風格吧。今天我們將要給大家介紹進程與計劃任務,對我們的以后工作有非常大的幫助,因為我們以后工作盡可能的都自動化管理,不需要我們每天都去敲那些命令。所以我相信今天的…

    2017-09-09
  • linux開篇六式

    第一式. Linux上的文件管理類命令,其常用的使用方法及其相關示例。       mkdir, 創建目錄       rmdir,刪除目錄       tree, 顯示目錄層級       cat和tac均用于查看文件,cat是從文件首向…

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