10.1、FTP服務(wù)簡介
創(chuàng)新互聯(lián)建站主營尼開遠網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),尼開遠h5成都微信小程序搭建,尼開遠網(wǎng)站營銷推廣歡迎尼開遠等地區(qū)企業(yè)咨詢FTP是Internet上使用非常廣泛的一種通信協(xié)議,用于在不同的主機之間進行文件傳輸。Linux系統(tǒng)下常用的FTP服務(wù)器軟件包括有wu-ftpd;vsftpd(Very Secure ftp Daemon);proftpd;pureftpd等。客戶端軟件有
CLI:ftp;lftp;(wget ,lftpget)下載工具,非交互式 GUI: gftpd ;FlashFXP;Cuteftp;Filezilla |
FTP采用C/S的工作模式,通過TCP協(xié)議建立客戶端和服務(wù)器之間的連接。但與其他大多數(shù)的應(yīng)用協(xié)議不同,F(xiàn)TP協(xié)議在客戶端和服務(wù)器之間建立了兩套通信鏈路,分別是控制鏈路和數(shù)據(jù)鏈路。其中,控制鏈路負(fù)責(zé)FTP會話過程中FTP命令的發(fā)送和接收,數(shù)據(jù)鏈路則負(fù)責(zé)數(shù)據(jù)的傳輸。FTP客戶端與服務(wù)器之間的通信過程如下所示:
1、用戶使用FTP協(xié)議的客戶機程序,連接到遠程的FTP服務(wù)器程序上 2、用戶使用客戶端程序進行FTP文件的上傳或下載,F(xiàn)TP客戶端程序通過控制鏈路向FTP發(fā)送相應(yīng)的控制命令 3、服務(wù)器程序接收并執(zhí)行用戶所發(fā)出的命令 4、FTP服務(wù)器將執(zhí)行結(jié)果返回到客戶端 |
默認(rèn)情況下,F(xiàn)TP服務(wù)器程序使用兩個預(yù)分配端口號20和21,分別用于傳輸數(shù)據(jù)鏈路和控制鏈路。但是傳輸數(shù)據(jù)又可以分為主動模式與被動模式,其數(shù)據(jù)傳輸端口有所不同。
主動模式工作的原理:FTP客戶端連接到FTP服務(wù)器的21端口,發(fā)送用戶名和密碼登錄,登錄成功后要list列表或者讀取數(shù)據(jù)時,客戶端隨機開放一個端口(1024以上),發(fā)送PORT命令到FTP服務(wù)器 ,告訴服務(wù)器客戶端采用主動模式并開放端口;FTP服務(wù)器收到PORT主動模式命令和端口號后,通過服務(wù)器的20端口和客戶端開放的端口連接,發(fā)送數(shù)據(jù),原理如下圖:
被動模式工作原理:FTP客戶端連接到FTP服務(wù)器的21端口,發(fā)送用戶名和密碼登錄,登錄成功后要list列表或者讀取數(shù)據(jù)時,發(fā)送PASV命令到FTP服務(wù)器, 服務(wù)器在本地隨機開放一個端口(1024以上 ),然后把開放的端口告訴客戶端,客戶端再連接到服務(wù)器開放的端口進行數(shù)據(jù)傳輸,原理如下圖:
參考:https://my.oschina.net/binny/blog/17469
10.2、vsftpd服務(wù)器的安裝與配置
vsftpd可以通過rpm包或者源碼安裝,通過rpm安裝只需使用yum命令即可,這里介紹源碼安裝。其官方地址為http://vsftpd.beasts.org/,這里以3.0.2版本介紹vsftpd的安裝與配置。
文件的組成:
/etc/vsftpd: 配置文件目錄 /etc/rc.d/init.d/vsftpd: 服務(wù)腳本 /usr/sbin/vsftpd: 主程序 /var/ftp:數(shù)據(jù)文件目錄(匿名用戶訪問目錄) /etc/pam.d/vsftpd: 認(rèn)證文件 pam(Plugable Authentication Module)插件式認(rèn)證模塊 模塊化庫文件:/lib64/security/pam*.so 認(rèn)證配置文件:/etc/pam.conf和/etc/pam.d/* 基本配置:/etc/vsftpd/vsftpd.conf |
啟動和關(guān)閉vsftpd
vsftpd支持兩種啟動方式:xinetd和standalone。其中,xinetd是通過xinetd進程來啟動和關(guān)閉vsftpd服務(wù),這是vsftpd默認(rèn)啟動方式。standalone方式則是采用獨立進程啟動和關(guān)閉,與普通程序的啟動方式一樣。
xinetd方式:
采用這種方式時,vsftpd不能單獨管理,當(dāng)vsftpd需要重啟時,也必須重啟整個xinetd服務(wù)器。
standalone方式:
使用這種方式時,vsftpd服務(wù)將作為單獨的進程來啟動和關(guān)閉,配置standalone啟動方式步驟為:
[root@mylinux vsftpd-3.0.2]# vim /etc/xinetd.d/vsftpd #將diabale選項改為yes service ftp { socket_type = stream wait = no user = root server = /usr/local/sbin/vsftpd # server_args = # log_on_success += DURATION USERID # log_on_failure += USERID nice = 10 disable = yes } [root@mylinux vsftpd-3.0.2]# vim /etc/vsftpd.conf #指定standalone啟動方式 listen=YES [root@mylinux vsftpd-3.0.2]# chkconfig vsftpd --level 3 off #關(guān)閉自啟動服務(wù) [root@mylinux vsftpd-3.0.2]# /usr/local/sbin/vsftpd & #啟動 [1] 1926登錄ftp:
[root@mylinux vsftpd-3.0.2]# ftp localhost #登錄本機 Trying ::1... ftp: connect to address ::1Connection refused Trying 127.0.0.1... Connected to localhost (127.0.0.1). 220 (vsFTPd 3.0.2) Name (localhost:root): anonymous #匿名用戶登錄 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,143,37). 150 Here comes the directory listing. 226 Directory send OK. ftp> quit #退出 221 Goodbye. [root@mylinux vsftpd-3.0.2]#vsftpd.conf配置文件
vsftpd服務(wù)器的配置主要通過其主配置文件/etc/vsftpd.conf來完成。該文件以'#'作為注釋,每個選項一行,格式為'選項=值'。
常用選項:
匿名用戶的配置: anonymous_enable=YES登陸權(quán)限 anon_upload_enable=YES上傳權(quán)限 anon_other_write_enable=YES刪除權(quán)限 anon_mkdir_write_enable=YES創(chuàng)建目錄 啟用寫入功能時,ftp用戶對相應(yīng)的本地文件系統(tǒng)也有相應(yīng)的寫入權(quán)限;生效的權(quán)限取決于文件系統(tǒng)權(quán)限和服務(wù)權(quán)限的交集。 禁錮用戶于其家目錄中: chroot_local_user={Yes|No} chroot_list_enable={YES|NO} 只禁錮列表中的用戶在家目錄 chroot_list_file=/etc/vsftpd/chroot_list 禁錮用戶列表 歡迎信息的定義: ftp_banner=some string 或者banner_file=/path/to/some_banner_file(文件中寫歡迎信息) dirmessage_enable=yes(切換目錄時,目錄下的歡迎信息) 在ftp可訪問的目錄下創(chuàng)建.messages文件 控制登錄用戶的機制: /etc/vsftpd/ftpusers中的用戶都不允許使用ftp服務(wù), 這是在/etc/pam.d/vsftpd中定義。 user_list配置文件有兩種用法: 黑名單: userlist_enable=YES userlist_deny=YES 白名單: userlist_enable=YES userlist_deny=NO 連接限制: max_clients: 大并發(fā)連接數(shù) max_per_ip: 每IP可同時發(fā)起并發(fā)請求 傳輸速率: anon_max_rate: 匿名用戶的大傳輸速率,單位是“字節(jié)/秒”; local_max_rate: 本地用戶的大傳輸速率,單位是“字節(jié)/秒” 上傳文件的umask: anno_umask: 匿名用戶上傳文件的umask; local_umask: 本地用戶上傳文件的umask; 修改匿名用戶上傳文件的屬主和屬組: chown_uploads=YES chown_username=someuser |
ftp的系統(tǒng)用戶:
匿名用戶 --> 系統(tǒng)用戶: anonymous_enable
系統(tǒng)用戶:local_enable
虛擬用戶:所有的虛擬用戶會映射會一個系統(tǒng)用戶,訪問時的文件目錄是為此系統(tǒng)用戶的家目錄。
用戶的存放位置:
hash編碼的文件:奇數(shù)行為用戶名,偶數(shù)行為密碼
關(guān)系型數(shù)據(jù)庫:pam-mysql實現(xiàn)認(rèn)證
10.2、vsftpd基于pam-mysql的認(rèn)證方式
1、安裝mysql和pam_mysql
[root@localhost home]# yum -y install vsftpd mysql-server mysql-devel pam_mysql2、準(zhǔn)備數(shù)據(jù)庫及相關(guān)表
mysql> create database vsftpd; mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'mylinux'; mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'mylinux'; mysql> flush privileges; mysql> use vsftpd; mysql> create table users ( -> id int AUTO_INCREMENT NOT NULL, -> name char(20) binary NOT NULL, -> password char(48) binary NOT NULL, -> primary key(id) -> );3、添加測試的虛擬用戶,為了安全起見應(yīng)該使用PASSWORD函數(shù)加密后存儲。
mysql> insert into users(name,password) values('tom',password('123456')); mysql> insert into users(name,password) values('jerry',password('123456'));4、建立pam認(rèn)證所需文件#vi /etc/pam.d/vsftpd.mysql
auth required /lib/security/pam_mysql.so user=vsftpd passwd=mylinux host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /lib/security/pam_mysql.so user=vsftpd passwd=mylinux host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2pam_mysql.so基于unix sock連接mysql服務(wù)器時可能會出問題,此時,建議授權(quán)一個可遠程連接的mysql并訪問vsftpd數(shù)據(jù)庫的用戶。
5、修改vsftpd的配置文件,使其適應(yīng)mysql認(rèn)證,建立虛擬用戶映射的系統(tǒng)用戶及對應(yīng)的目錄
[root@localhost home]# useradd -s /sbin/nologin -d /var/ftproot vuser [root@localhost home]# chmod go+rx /var/ftproot確保/etc/vsftpd.conf中已經(jīng)啟用了以下選項
anonymous_enable=YES local_enable=YES write_enable=YES anon_upload_enable=NO anon_mkdir_write_enable=NO chroot_local_user=YES而后添加以下選項
guest_enable=YES guest_username=vuser并確保pam_service_name選項的值如下所示
pam_service_name=vsftpd.mysql6、啟動vsftpd服務(wù)
[root@localhost home]# service vsftpd start Starting vsftpd for vsftpd: [ OK ] [root@localhost home]# chkconfig vsftpd on7、配置虛擬用戶具有不同的訪問權(quán)限
配置vsftpd為虛擬用戶使用配置文件目錄
# vim vsftpd.conf添加
user_config_dir=/etc/vsftpd/vusers_config創(chuàng)建所需要目錄,并為虛擬用戶提供配置文件
# mkdir /etc/vsftpd/vusers_config/ # cd /etc/vsftpd/vusers_config/ # touch tom jerry配置虛擬用戶的訪問權(quán)限,虛擬用戶對vsftpd服務(wù)的訪問權(quán)限是通過匿名用戶的相關(guān)指令進行的。如果需要讓tom用戶具有上傳文件的權(quán)限,可以修改/etc/vsftpd/vusers/tom文件,在里面添加如下選項即可。
anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO}另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。