ftp详解
FTP
簡(jiǎn)介
ftp(file transfer protocol,文件傳輸協(xié)議)是 Internet 上仍常用的最老的網(wǎng)絡(luò)協(xié)議之一 , 它為系統(tǒng)提供了通過網(wǎng)絡(luò)與遠(yuǎn)程服務(wù)器進(jìn)行傳輸?shù)暮?jiǎn)單方法。FTP是一個(gè)客戶機(jī)/服務(wù)器系統(tǒng)
ftp是文件共享服務(wù)。工作在應(yīng)用層。
linux中三種常用的文件服務(wù):
(1)ftp:工作在應(yīng)用層的文件共享協(xié)議,在client端和server端的通信是通過tcp/ip協(xié)議的上層服務(wù)來實(shí)現(xiàn)的。
(2)nfs(Netwok File System網(wǎng)絡(luò)文件系統(tǒng)):基于rpc(remote Procedure Call遠(yuǎn)程過程調(diào)用)的文件共享服務(wù)。rpc:讓兩臺(tái)主機(jī)間的進(jìn)程直接依賴于二進(jìn)制協(xié)議完成通信。如hadoop
(3)samba:基于CIFS(通用文件系統(tǒng))/SMB文件共享。實(shí)現(xiàn)文件跨平臺(tái)傳輸。讓linux支持cifs協(xié)議。讓linux出現(xiàn)在windows的網(wǎng)上鄰居中
linux實(shí)現(xiàn)ftp協(xié)議的軟件:
服務(wù)器端的程序(紅帽中):
Vsftpd(Very Secure File Transfer Protocol Damon)注重安全
客戶端程序:
命令行格式(CLI):ftp,lftp
FTP有兩個(gè)連接:
命令連接(控制連接):接收用戶發(fā)來的命令并檢查文件發(fā)來的命令;一直在線。服務(wù)端端口21/tcp
數(shù)據(jù)連接:進(jìn)行傳輸文件;按需打開,按需關(guān)閉。
按數(shù)據(jù)傳輸?shù)恼?qǐng)求由誰發(fā)起分為主動(dòng)模式和被動(dòng)模式。主動(dòng)、被動(dòng)模式是站在服務(wù)器端的角度。
主動(dòng)模式:當(dāng)客戶端請(qǐng)求數(shù)據(jù)傳輸時(shí),服務(wù)器打開20/tcp端口主動(dòng)向客戶端發(fā)送數(shù)據(jù)。此時(shí)服務(wù)器端的端口是20/tcp。如果客戶端有防火墻則不能進(jìn)行數(shù)據(jù)傳輸。因?yàn)橹鲃?dòng)連接時(shí),服務(wù)器端主動(dòng)連接客戶端的請(qǐng)求會(huì)被客戶端的防火墻擋掉,所以連接不上。
被動(dòng)模式:當(dāng)客戶端請(qǐng)求數(shù)據(jù)傳輸時(shí),服務(wù)器端通過命令連接給客戶端發(fā)送一個(gè)報(bào)文,告訴客戶端自己已經(jīng)打開了一個(gè)端口,讓客戶端主動(dòng)連接這個(gè)端口,從而進(jìn)行傳輸數(shù)據(jù)。此時(shí)服務(wù)器端口隨機(jī)。
主動(dòng)模式:
Server
Client
2121221
0222
被動(dòng)模式:
Server
Client
防火墻:“擋掉進(jìn)來的連接”。當(dāng)主機(jī)接入互聯(lián)網(wǎng),防火墻將屏蔽“不請(qǐng)自來的請(qǐng)求和連接。關(guān)閉不需要的端口。端口就相當(dāng)于“門”
防火墻的“連接追蹤”功能:自行判斷連接和連接的關(guān)系。
追蹤來回請(qǐng)求的特征
客戶端發(fā)起的新建立的連接請(qǐng)求:new
建立連接的響應(yīng):established
每一個(gè)數(shù)據(jù)連接和每一個(gè)命令連接有關(guān)系:related(相關(guān)聯(lián)的會(huì)放行)
兩種模式的比較:
???????共同點(diǎn):都是通過21/tcp端口進(jìn)行用戶驗(yàn)證及管理
???????不同點(diǎn):傳輸數(shù)據(jù)的方式不同
關(guān)于端口:tcp/ip協(xié)議中,Tcp 65535個(gè)端口,Udp 65535多個(gè)端口
???????一般用到的端口是1~65535。
???????1~1023為系統(tǒng)端口(BSD保留端口),只有系統(tǒng)特許的進(jìn)程才能使用;
1024~65535為用戶端口;
???????1024~5000為BSD臨時(shí)端口,一般的應(yīng)用程序使用1024~4999來進(jìn)行通信;
5001~65535為BSD服務(wù)器(非特權(quán))端口,用戶自定義端口
Vsftpd
vsftpd(Very Secure FTP Deamon):非常安全的ftp后臺(tái)服務(wù)。
21/tcp(/etc/services查看端口號(hào))
配置文件目錄:/etc/vsftpd(rpm包)
服務(wù)腳本:/etc/init.d/vsftpd
主程序:/usr/sbin/vsftpd
匿名用戶文件根目錄(ftp用戶的家目錄):/var/ftp(不允許除了root外用戶其他用戶有對(duì)此目錄的寫權(quán)限,包括ftp用戶)。不能允許運(yùn)行這個(gè)服務(wù)的用戶擁有寫權(quán)限,所以在/var/ftp/下建立子目錄放置上傳的文件。setfacl -m u:ftp:rwx /var/ftp/upload?
默認(rèn)配置文件讓匿名用戶(anonymous)只能下載位于CHROOT(/var/ftp)目錄中的內(nèi)容。意為遠(yuǎn)程FTP客戶端能以用戶anonymous或ftp身份連接到服務(wù)器(不需要密碼),并從/var/ftp目錄下載文件(其本地ftp用戶可以讀取這些文件)。getent passwd ftp? ##查看ftp用戶的家目錄
支持上傳和下載
下載風(fēng)險(xiǎn)小
上傳風(fēng)險(xiǎn)大
基于PAM(可插入式認(rèn)證模塊)實(shí)現(xiàn)用戶認(rèn)證:
/etc/pam.d/*
/lib/security/*? 模塊文件
ftp本身信息傳輸是明文的,包括認(rèn)證機(jī)制都是明文的。抓包分析后就能得到用戶名和密碼
數(shù)據(jù)傳輸模式(自動(dòng)):兩種傳輸都支持(遵循傳輸文件本身的模式)
二進(jìn)制傳輸:
文本傳輸:
ftp的用戶:
匿名用戶anonymous(最終會(huì)映射為系統(tǒng)用戶):ftp?
虛擬用戶(最終會(huì)映射為系統(tǒng)用戶):
系統(tǒng)用戶
(1)安裝vsftpd:yum install vsftpd? 大小140k
安裝生成的文件:rpm –ql vsftpd
開啟服務(wù)
/etc/init.d/vsftpd start
(3)基本配置
文件服務(wù)權(quán)限:文件系統(tǒng)權(quán)限*文件共享權(quán)限
默認(rèn):匿名用戶可以登錄、可以下載;本地用戶可以登錄、上傳
【幾個(gè)常見報(bào)錯(cuò)】
550:表示服務(wù)本身禁止使用某項(xiàng)功能
530:登錄系統(tǒng)時(shí)輸錯(cuò)密碼,登錄失敗
553:本地文件的權(quán)限
【匿名用戶】
匿名用戶登錄:anonymous_enable=YES | NO? ##默認(rèn)情況下
匿名用戶上傳:
1.配置文件
write_enable=YES
??????????????anon_upload_enable=YES
2.上傳目錄權(quán)限:
??????????????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相關(guān)設(shè)置
??????????????setsebool -P allow_ftpd_anon_write on
??????????????setenforce 0
匿名用戶上傳文件權(quán)限修改:anon_umask=022 ##將文件權(quán)限改為644
匿名用戶家目錄修改(注意家目錄除root用戶外,其他用戶不能有寫權(quán)限)
anon_root=/dir
匿名用戶建立目錄:anon_mkdir_write_enable=YES
匿名用戶刪除、重命名:anon_other_wtite_enable=YES
匿名用戶下載:anon_world_readable _only =NO(對(duì)于權(quán)限為600的文件默認(rèn)無法下載,必須使用此參數(shù))
匿名用戶上傳身份的修改:不能為root,不能為系統(tǒng)不存在的用戶
???????Chown_uploads=YES
???????Chown_username=student
匿名用戶上傳限速(單位為字節(jié)):anon_max_rate=102400
【本地用戶】注意此處selinux關(guān)閉或者設(shè)置相應(yīng)規(guī)則
本地用戶登錄:新建用戶tom,并給tom一個(gè)密碼:本地用戶即能在/etc/passwd中找到的用戶。
??????????????# echo 'cyl&647308' |passwd --stdin tom
local_enable=YES
??????????????pam_service_name=vsftpd,這是本地用戶默認(rèn)的認(rèn)證模塊
本地用戶可寫:write_enable=YES
本地用戶上傳文件權(quán)限:local_umask=077
本地用戶家目錄更改:local_root=/dir
將所有本地用戶鎖在家目錄中:chroot_local_user=YES(注意本地用戶目錄權(quán)限小于755)
3.本地用戶登錄進(jìn)去默認(rèn)在自己的家目錄里,eg:/home/tom
可以進(jìn)入其他目錄查看文件等,可以獲取到自己想要的資源。
4.將某個(gè)用戶鎖定在自己的家目錄中:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list(在此文件中寫入用戶名)
eg:vim /etc/vsftpd/chroot_list
??????? tom
5.所有寫在/etc/vsftpd/ftpusers中的用戶被拒絕訪問ftp服務(wù)器(cat /etc/pam.d/vsftpd)
???????例如:jerry在此文件中,且在/etc/vsftpd/loginusers文件中,進(jìn)行了用戶驗(yàn)證
(2)啟用/etc/vsftpd/userlist文件:
userlist_enable=YES
白名單userlist_deny=NO
# Cat /etc/vsftpd/user_list
Jerry
(2)黑名單 userlist_deny=YES
6.守護(hù)進(jìn)程:
獨(dú)立守護(hù)進(jìn)程:xinetd是一個(gè)獨(dú)立守護(hù)進(jìn)程。適用于訪問量特別大,用戶在線時(shí)間比較長(zhǎng)的。
瞬時(shí)守護(hù)進(jìn)程:由超級(jí)守護(hù)進(jìn)程xinetd代為管理。訪問量比較小,用戶連接時(shí)間不大長(zhǎng)。
vsftpd配置為瞬時(shí)守護(hù)進(jìn)程時(shí),在/etc/xinetd.d/下添加一個(gè)瞬時(shí)守護(hù)進(jìn)程腳本或者配置文件(格式后文再說)
【虛擬用戶】
(1)創(chuàng)建虛擬賬號(hào):
#vim /etc/vsftpd/loginusers? //loginusers名稱任意取,注意一行用戶名一行密碼
ftpuser1
123
ftpuser2
123
#db_load -T -t hash -f /etc/vsftpd/loginusers? /etc/vsftpd/loginusers.db
-T? //指定執(zhí)行動(dòng)作為transfer
-t? //轉(zhuǎn)化方式哈希加密
-f? //指定文件名
#vim /etc/pam.d/ckvsftpd
account required pam_userdb.so db=/etc/vsftpd/loginusers
auth requied pam_userdb.so db=/etc/vsftpd/loginusers
//用戶帳號(hào) 認(rèn)證必須
目錄/etc/pam.d下的文件均為認(rèn)證文件,認(rèn)證就是一個(gè)將外來信息與系統(tǒng)文件中記錄的信息匹配的一個(gè)過程,匹配通過則通過認(rèn)證,認(rèn)證是一個(gè)程序,需要相關(guān)的模塊來完成,這些模塊記錄在系統(tǒng)庫文件中
(2)創(chuàng)建本地用戶到虛擬用戶的映射:(默認(rèn)ftp用戶為虛擬用戶的本地用戶映射),可以登錄到其他目錄。
Useradd ftpuser
#vim /etc/vsftpd/vsftpd.conf
guest_username=ftpuser
guest_enable=YES
(3)虛擬賬號(hào)家目錄獨(dú)立設(shè)定:
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是個(gè)shell中的變量,使其生效
(4)虛擬帳號(hào)配置獨(dú)立
打開賬戶獨(dú)立功能:user_config_dir=/etc/vsftpd/userconf?
mkdir /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/ftpuser1
在此文件中配置文件中的所有參數(shù),此文件的優(yōu)先級(jí)高
在每一個(gè)目錄下創(chuàng)建隱藏文件.massage:dirmassage_enable=YES,當(dāng)客戶端切換到此目錄下,會(huì)先顯示.massage文件中的內(nèi)容。
定義vsftpd的資源訪問:
Max_client=
???????Max_per_ip=
默認(rèn)以文本模式上傳文件:ascii_upload_enable=YES(一般不要設(shè)置!)
默認(rèn)以文本模式下載文件:ascii_download_enable=YES(一般不要設(shè)置!)
將vsftpd定義為獨(dú)立守護(hù)進(jìn)程:listen=YES
安全通信方式:
(1)ftps:ftp+ssl/tls
(2)sftp:OpenSSH,SubSystem,sftp
虛擬用戶映射到匿名用戶ftp。
基于mysql中的數(shù)據(jù)庫和表中的字段驗(yàn)證用戶賬號(hào)。
虛擬用戶:
本地?cái)?shù)據(jù)文件方式
1.添加虛擬用戶口令文件
[root@CentOS5 /]#vi /etc/vsftpd/vftpuser.txt
添加虛擬用戶名和密碼,一行用戶名,一行密碼,以此類推。奇數(shù)行為用戶名,偶數(shù)行為密碼。
ftpuser1
123
ftpuser2
123
將剛添加的vftpuser.txt虛擬用戶口令文件轉(zhuǎn)換成系統(tǒng)識(shí)別的口令認(rèn)證文件。
首先查看系統(tǒng)有沒有安裝生成口令認(rèn)證文件所需的軟件db4-utils。
[root@CentOS5 /]#rpm –qa |grep db4-utils
[root@CentOS5 /]#rpm –ivh db4-utils-4.3.29-9.fc6.i386.rpm
下面使用db_load命令生成虛擬用戶口令認(rèn)證文件。
[root@CentOS5 /]#db_load –T –t hash –f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
3.編輯vsftpd的PAM認(rèn)證文件
在/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.建立本地映射用戶并設(shè)置宿主目錄權(quán)限
所有的FTP虛擬用戶需要使用一個(gè)系統(tǒng)用戶,這個(gè)系統(tǒng)用戶不需要密碼。
[root@CentOS5 /]#useradd –d /home/vftpsite –s /sbin/nologin vftpuser
[root@CentOS5 /]#chmod 700 /home/vftpsite
5.配置vsftpd.conf(設(shè)置虛擬用戶配置項(xiàng))
[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
guest_enable=YES #開啟虛擬用戶
guest_username=vftpuser #FTP虛擬用戶對(duì)應(yīng)的系統(tǒng)用戶
pam_service_name=vsftpd #PAM認(rèn)證文件
6.重啟vsftpd服務(wù)
[root@CentOS5 /]#service vsftpd restart
7.測(cè)試虛擬用戶登錄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.
實(shí)驗(yàn):
linux主機(jī)部署ftp服務(wù),建立兩個(gè)ftp用戶t01,t02 屬于ftp組,不允許登陸linux系統(tǒng),只能登陸ftp;要求能實(shí)現(xiàn)匿名用戶下載,限制同時(shí)最多連接3個(gè)用戶,FTP日志文件放在 /var/log/FTP/ftp.log
安裝vsftpd并開啟服務(wù),火墻selinux關(guān)閉
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??????????????????????#允許的最大連接數(shù)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.
轉(zhuǎn)載于:https://blog.51cto.com/chengyanli/1846754
總結(jié)
 
                            
                        - 上一篇: eclipse如何快速查找某个类
- 下一篇: centos7 更新yum安装源
