ftp詳解

FTP

簡介

ftpfile transfer protocol,文件傳輸協議)是 Internet 上仍常用的最老的網絡協議之一 , 它爲系統提供了通過網絡與遠程服務器進行傳輸的簡單方法。FTP是一個客戶機/服務器系統

ftp是文件共享服務。工作在應用層。

linux中三種常用的文件服務:

1ftp:工作在應用層的文件共享協議,在client端和server端的通信是通過tcp/ip協議的上層服務來實現的。

2nfsNetwok File System網絡文件系統):基於rpcremote Procedure Call遠程過程調用)的文件共享服務。rpc:讓兩臺主機間的進程直接依賴於二進制協議完成通信。如hadoop

3samba:基於CIFS(通用文件系統)/SMB文件共享。實現文件跨平臺傳輸。讓linux支持cifs協議。讓linux出現在windows的網上鄰居中

linux實現ftp協議的軟件:

服務器端的程序(紅帽中):

VsftpdVery Secure File Transfer Protocol Damon)注重安全

客戶端程序:

命令行格式(CLI):ftplftp

FTP有兩個連接:

命令連接(控制連接):接收用戶發來的命令並檢查文件發來的命令;一直在線。服務端端口21/tcp

數據連接:進行傳輸文件;按需打開,按需關閉。

按數據傳輸的請求由誰發起分爲主動模式和被動模式。主動、被動模式是站在服務器端的角度。

主動模式:當客戶端請求數據傳輸時,服務器打開20/tcp端口主動向客戶端發送數據。此時服務器端的端口是20/tcp。如果客戶端有防火牆則不能進行數據傳輸。因爲主動連接時,服務器端主動連接客戶端的請求會被客戶端的防火牆擋掉,所以連接不上。

被動模式:當客戶端請求數據傳輸時,服務器端通過命令連接給客戶端發送一個報文,告訴客戶端自己已經打開了一個端口,讓客戶端主動連接這個端口,從而進行傳輸數據。此時服務器端口隨機。

主動模式:

Server

Client

2121221



0222



被動模式:

Server

Client







防火牆:“擋掉進來的連接”。當主機接入互聯網,防火牆將屏蔽“不請自來的請求和連接。關閉不需要的端口。端口就相當於


防火牆的“連接追蹤”功能:自行判斷連接和連接的關係。

追蹤來回請求的特徵


客戶端發起的新建立的連接請求:new

建立連接的響應:established

每一個數據連接和每一個命令連接有關係:related(相關聯的會放行)


兩種模式的比較:

       共同點:都是通過21/tcp端口進行用戶驗證及管理

       不同點:傳輸數據的方式不同


關於端口:tcp/ip協議中,Tcp 65535個端口,Udp 65535多個端口

       一般用到的端口是1~65535

       1~1023爲系統端口(BSD保留端口),只有系統特許的進程才能使用;

1024~65535爲用戶端口;

       1024~5000BSD臨時端口,一般的應用程序使用1024~4999來進行通信;

5001~65535BSD服務器(非特權)端口,用戶自定義端口


Vsftpd

vsftpdVery Secure FTP Deamon:非常安全的ftp後臺服務。

21/tcp(/etc/services查看端口號)

配置文件目錄:/etc/vsftpd(rpm)

服務腳本:/etc/init.d/vsftpd

主程序:/usr/sbin/vsftpd

匿名用戶文件根目錄(ftp用戶的家目錄):/var/ftp不允許除了root外用戶其他用戶有對此目錄的寫權限,包括ftp用戶)。不能允許運行這個服務的用戶擁有寫權限,所以在/var/ftp/下建立子目錄放置上傳的文件。setfacl -m u:ftp:rwx /var/ftp/upload 

默認配置文件讓匿名用戶(anonymous)只能下載位於CHROOT/var/ftp)目錄中的內容。意爲遠程FTP客戶端能以用戶anonymousftp身份連接到服務器(不需要密碼),並從/var/ftp目錄下載文件(其本地ftp用戶可以讀取這些文件)。getent passwd ftp  ##查看ftp用戶的家目錄

支持上傳和下載

下載風險小

上傳風險大

基於PAM(可插入式認證模塊)實現用戶認證:

/etc/pam.d/*

/lib/security/*  模塊文件

ftp本身信息傳輸是明文的,包括認證機制都是明文的。抓包分析後就能得到用戶名和密碼

數據傳輸模式(自動):兩種傳輸都支持(遵循傳輸文件本身的模式)

二進制傳輸:

文本傳輸:

ftp的用戶:

匿名用戶anonymous(最終會映射爲系統用戶):ftp 

虛擬用戶(最終會映射爲系統用戶):

系統用戶

1)安裝vsftpdyum install vsftpd  大小140k

安裝生成的文件:rpm –ql vsftpd

  1. 開啓服務

/etc/init.d/vsftpd start

3)基本配置

文件服務權限:文件系統權限*文件共享權限

默認:匿名用戶可以登錄、可以下載;本地用戶可以登錄、上傳

【幾個常見報錯】

550:表示服務本身禁止使用某項功能

530:登錄系統時輸錯密碼,登錄失敗

553:本地文件的權限

【匿名用戶】

匿名用戶登錄:anonymous_enable=YES | NO  ##默認情況下

匿名用戶上傳:

1.配置文件

write_enable=YES

              anon_upload_enable=YES

2.上傳目錄權限:

              Chgrp ftp /var/ftp/pub

              Chmod 770 /var/ftp/pub

              Mkdir /var/ftp/upload

              Chgrp ftp /var/ftp/upload

              Chmod 770 /var/ftp/upload

3.selinux相關設置

              setsebool -P allow_ftpd_anon_write on

              setenforce 0

匿名用戶上傳文件權限修改:anon_umask=022 ##將文件權限改爲644

匿名用戶家目錄修改(注意家目錄除root用戶外,其他用戶不能有寫權限)

anon_root=/dir

匿名用戶建立目錄:anon_mkdir_write_enable=YES

匿名用戶刪除、重命名:anon_other_wtite_enable=YES

匿名用戶下載:anon_world_readable _only =NO(對於權限爲600的文件默認無法下載,必須使用此參數)

匿名用戶上傳身份的修改:不能爲root,不能爲系統不存在的用戶

       Chown_uploads=YES

       Chown_username=student

匿名用戶上傳限速(單位爲字節):anon_max_rate=102400

【本地用戶】注意此處selinux關閉或者設置相應規則

本地用戶登錄:新建用戶tom,並給tom一個密碼:本地用戶即能在/etc/passwd中找到的用戶。

              # echo 'cyl&647308' |passwd --stdin tom

local_enable=YES

              pam_service_name=vsftpd,這是本地用戶默認的認證模塊

本地用戶可寫:write_enable=YES

本地用戶上傳文件權限:local_umask=077

本地用戶家目錄更改:local_root=/dir

將所有本地用戶鎖在家目錄中:chroot_local_user=YES(注意本地用戶目錄權限小於755)

3.本地用戶登錄進去默認在自己的家目錄裏,eg/home/tom

可以進入其他目錄查看文件等,可以獲取到自己想要的資源。

4.將某個用戶鎖定在自己的家目錄中:

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list(在此文件中寫入用戶名)

egvim /etc/vsftpd/chroot_list

        tom

wKiom1fOOOWjRDp2AAA5g4Gyk3E451.png-wh_50

5.所有寫在/etc/vsftpd/ftpusers中的用戶被拒絕訪問ftp服務器(cat /etc/pam.d/vsftpd

       例如:jerry在此文件中,且在/etc/vsftpd/loginusers文件中,進行了用戶驗證

wKioL1fOOQbSvVLCAAAd6blwHOw451.png-wh_50

2)啓用/etc/vsftpd/userlist文件:

userlist_enable=YES

白名單userlist_deny=NO

# Cat /etc/vsftpd/user_list

Jerry

wKiom1fOOSbBrdN8AAAqnrGQdEA700.png-wh_50

(2)黑名單 userlist_deny=YES

wKiom1fOOU2hEW_TAAAa7H9Kd-I315.png-wh_50

6.守護進程:

獨立守護進程:xinetd是一個獨立守護進程。適用於訪問量特別大,用戶在線時間比較長的。

瞬時守護進程:由超級守護進程xinetd代爲管理。訪問量比較小,用戶連接時間不大長。

vsftpd配置爲瞬時守護進程時,在/etc/xinetd.d/下添加一個瞬時守護進程腳本或者配置文件(格式後文再說)

【虛擬用戶】

1)創建虛擬賬號:

#vim /etc/vsftpd/loginusers  //loginusers名稱任意取,注意一行用戶名一行密碼

ftpuser1

123

ftpuser2

123

#db_load -T -t hash -f /etc/vsftpd/loginusers  /etc/vsftpd/loginusers.db

-T  //指定執行動作爲transfer

-t  //轉化方式哈希加密

-f  //指定文件名

#vim /etc/pam.d/ckvsftpd

account required pam_userdb.so db=/etc/vsftpd/loginusers

auth requied pam_userdb.so db=/etc/vsftpd/loginusers

//用戶帳號 認證必須

目錄/etc/pam.d下的文件均爲認證文件,認證就是一個將外來信息與系統文件中記錄的信息匹配的一個過程,匹配通過則通過認證,認證是一個程序,需要相關的模塊來完成,這些模塊記錄在系統庫文件中

2)創建本地用戶到虛擬用戶的映射:(默認ftp用戶爲虛擬用戶的本地用戶映射),可以登錄到其他目錄。

Useradd ftpuser

#vim /etc/vsftpd/vsftpd.conf

guest_username=ftpuser

guest_enable=YES

3)虛擬賬號家目錄獨立設定:

mkdir /ftpusershome

chgrp ftpuser /ftpusershome

chmod g+s /ftpusershome

mkdir /ftpuserhome/ftpuser{1,2}

#vim /etc/vsftpd/vsftpd.conf

local_root=/ftpuserhome/$USER  //指定本地用戶家目錄

user_sub_token =$USER  //指定$USER是個shell中的變量,使其生效

4)虛擬帳號配置獨立

打開賬戶獨立功能:user_config_dir=/etc/vsftpd/userconf 

mkdir /etc/vsftpd/userconf

vim /etc/vsftpd/userconf/ftpuser1

在此文件中配置文件中的所有參數,此文件的優先級高

在每一個目錄下創建隱藏文件.massagedirmassage_enable=YES,當客戶端切換到此目錄下,會先顯示.massage文件中的內容。

定義vsftpd的資源訪問:

Max_client=

       Max_per_ip=

默認以文本模式上傳文件:ascii_upload_enable=YES(一般不要設置!)

默認以文本模式下載文件:ascii_download_enable=YES(一般不要設置!)

vsftpd定義爲獨立守護進程:listen=YES

安全通信方式:

(1)ftps:ftp+ssl/tls

(2)sftp:OpenSSH,SubSystem,sftp

虛擬用戶映射到匿名用戶ftp

基於mysql中的數據庫和表中的字段驗證用戶賬號。

虛擬用戶:

  1. 本地數據文件方式
    1.添加虛擬用戶口令文件
    [root@CentOS5 /]#vi /etc/vsftpd/vftpuser.txt
    添加虛擬用戶名和密碼,一行用戶名,一行密碼,以此類推。奇數行爲用戶名,偶數行爲密碼。
    ftpuser1

123

ftpuser2

123

將剛添加的vftpuser.txt虛擬用戶口令文件轉換成系統識別的口令認證文件。
首先查看系統有沒有安裝生成口令認證文件所需的軟件db4-utils。

[root@CentOS5 /]#rpm
qa |grep db4-utils
[root@CentOS5 /]#rpm
ivh db4-utils-4.3.29-9.fc6.i386.rpm
下面使用db_load命令生成虛擬用戶口令認證文件。
[root@CentOS5 /]#db_load
T t hash f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db

3.編輯vsftpd的PAM認證文件
在/etc/pam.d目錄下,
[root@CentOS5 /]#vi /etc/pam.d/vsftpd
將裏面其他的都註釋掉,添加下面這兩行:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser

//64爲64,32位的是/lib/…..
4.建立本地映射用戶並設置宿主目錄權限
所有的FTP虛擬用戶需要使用一個系統用戶,這個系統用戶不需要密碼。
[root@CentOS5 /]#useradd
d /home/vftpsite s /sbin/nologin vftpuser
[root@CentOS5 /]#chmod 700 /home/vftpsite

5.配置vsftpd.conf(設置虛擬用戶配置項)
[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
guest_enable=YES #開啓虛擬用戶
guest_username=vftpuser #FTP虛擬用戶對應的系統用戶
pam_service_name=vsftpd #PAM認證文件


6.重啓vsftpd服務
[root@CentOS5 /]#service vsftpd restart

7.測試虛擬用戶登錄FTP
C:\User\Administrator>ftp 192.168.120.240
連接到192.168.120.240。
220 Welcome to BOB FTP server
用戶(192.168.120.240(none)):ftpuser1
331 Please specify the password.
密碼:
230 Login successful.

實驗:

linux主機部署ftp服務,建立兩個ftp用戶t01,t02 屬於ftp組,不允許登陸linux系統,只能登陸ftp;要求能實現匿名用戶下載,限制同時最多連接3個用戶,FTP日誌文件放在 /var/log/FTP/ftp.log

安裝vsftpd並開啓服務,火牆selinux關閉
useradd -g ftp -d /var/ftp/pub/ -s /sbin/nologin t01

useradd -g ftp -d /var/ftp/pub/ -s /sbin/nologin t02

# cat /etc/passwd

t01:x:500:50::/var/ftp/pub/:/sbin/nologin

t02:x:501:50::/var/ftp/pub/:/sbin/nologin

max_clients=3                      #允許的最大連接數3

vsftpd_log_file=/var/log/FTP/ftp.log               #指定日誌文件位置

[root@linux-ceshi-12 pub]# ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

500 OOPS: failed to open xferlog log file:/var/log/FTP/ftp.log

ftp> quit

解決

# vim /etc/vsftpd/vsftpd.conf

vsftpd_log_file=/var/log/FTP/ftp.log

[root@linux-ceshi-12 pub]# /etc/init.d/vsftpd restart

Shutting down vsftpd: [  OK  ]

Starting vsftpd for vsftpd: [  OK  ]

[root@linux-ceshi-12 pub]# ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

220 (vsFTPd 2.2.2)

Name (localhost:root): t01

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls

227 Entering Passive Mode (127,0,0,1,31,70).

150 Here comes the directory listing.

-rw-r--r--    1 0        0               0 Aug 18 12:01 cyl

-rw-r--r--    1 0        0           10240 Aug 19 02:43 shell.tar.gz

226 Directory send OK.

ftp> quit

221 Goodbye.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章