1.?Vsftpd文件共享
1.1簡(jiǎn)介
Vsftpd是“very secure FTP daemon”的縮寫,是一款非常安全的FTP軟件。支持IPv6以及SSL加密。Vsftpd的安全性主要體現(xiàn)三個(gè)方面:進(jìn)程分離,處理不同任務(wù)的進(jìn)程彼此是獨(dú)立運(yùn)行的;進(jìn)程運(yùn)行均以最小權(quán)限運(yùn)行;多數(shù)進(jìn)程都使用chroot進(jìn)行了禁錮,防止客戶訪問(wèn)非法共享目錄。端口號(hào)為21端口
1.2特點(diǎn)
?1.它是一個(gè)安全、高速、穩(wěn)定的FTP服務(wù)器;可以做基于多個(gè)IP的虛擬FTP主機(jī)服務(wù)器
2.vsftpd是以一般身份啟動(dòng)服務(wù),并且用chroot進(jìn)行改換根目錄;匿名服務(wù)設(shè)置方便,根目錄不需要特殊的目錄結(jié)構(gòu)、系統(tǒng)程序或系統(tǒng)文件
????????????? 3.任何需要具有個(gè)較高權(quán)限的vsftpd指令均以一支特殊的上層程序(parent process)所控制,并且該上層程序享有的較高執(zhí)行權(quán)限功能已經(jīng)被限制的相當(dāng)?shù)汀?/b>
????????????? 3.所有的客戶端,想要使用這只上層程序所提供的較高執(zhí)行權(quán)限之vsftpd指令的需求,均被視為不可信任的要求來(lái)處理,必須要經(jīng)過(guò)相當(dāng)程度的身份確認(rèn)后方可利用該上層程序的功能。例如chown、login的要求等等
?????? ?????? 4.上層程序中依然使用chroot的功能來(lái)限制使用者的權(quán)限
?????????? 5.不執(zhí)行任何外部程序,從而減少了安全隱患;
?????? 6.支持虛擬用戶,并且每個(gè)虛擬用戶可以具有獨(dú)立的屬性配置;
?????? 7.可以設(shè)置從inetd中啟動(dòng),或者獨(dú)立的FTP服務(wù)器兩種運(yùn)行方式;
??? ?????? 8.支持兩種認(rèn)證方式:PAP或tcp_wrappers;
??? ??? 9.支持帶寬限制
?1.3?性能
安全性方面:vsftpd服務(wù)只需一般用戶身份啟動(dòng),相對(duì) Linux 系統(tǒng)的使用權(quán)限較低。且任何來(lái)自想使用vsftpd較高執(zhí)行權(quán)限的指令請(qǐng)求, 均被視為不可信任的請(qǐng)求,需經(jīng)過(guò)一定身份認(rèn)證后方可使用。同時(shí),vsftpd 整合了大部分ftp會(huì)使用到的額外指令,因此減少了對(duì)系統(tǒng)功能的依賴。且應(yīng)用 chroot限定了使用者根目錄,限制使用者的執(zhí)行權(quán)限。
速度方面:?使用ASCII代碼的模式下載數(shù)據(jù)時(shí),VSFTP的速度是Wu-FTP的兩倍。如果Linux主機(jī)使用2.4的內(nèi)核,在千兆以太網(wǎng)上的下載速度可達(dá)86MB/S。
穩(wěn)定方面:VSFTP在單機(jī)(非集群)上支持4000個(gè)以上的并發(fā)用戶同時(shí)連接,根據(jù)Red Hat的Ftp服務(wù)器(ftp.redhat.com)的數(shù)據(jù),VSFTP服務(wù)器可以支持15000個(gè)并發(fā)用戶。
1.4?缺點(diǎn)
?vsftp?沒(méi)有處理文件編碼轉(zhuǎn)換,從windows客戶端訪問(wèn)時(shí)有亂碼現(xiàn)象??梢赞D(zhuǎn)換服務(wù)器目錄文件編碼或者使用FTP客戶端工具來(lái)訪問(wèn)服務(wù)器解決亂碼現(xiàn)象。
2.?FTP工作方式
????2.1主動(dòng)FTP工作模式
????????主動(dòng)FTP模式的工作步驟如下:
a.?客戶端隨機(jī)開啟大于1024的X端口與服務(wù)器21端口建立連接通道,通道建立后,客戶端隨時(shí)可以通過(guò)該通道發(fā)送上傳或者下載命令。
b.?當(dāng)客戶端需要與服務(wù)器進(jìn)行數(shù)據(jù)傳輸時(shí),客戶端回再開啟一個(gè)大于1024的隨機(jī)端口Y,并將Y端口號(hào)通過(guò)之前的命令通道傳送給服務(wù)器的21端口
c.?服務(wù)器獲取到客戶端的第二個(gè)端口后會(huì)主動(dòng)連接客戶端的該端口,通過(guò)三次握手后,完成服務(wù)器與客戶端數(shù)據(jù)通道的建立,所有的數(shù)據(jù)均通過(guò)該數(shù)據(jù)通道進(jìn)行傳輸。
2.2被動(dòng)FTP工作模式
?被動(dòng)FTP模式的工作過(guò)程如下:
a.?客戶端你隨意開啟大于1024的X端口與服務(wù)器的21端口建立連接通道
b.?當(dāng)客戶端需要與服務(wù)器進(jìn)行數(shù)據(jù)傳輸時(shí),客戶端從命令通道發(fā)送數(shù)據(jù)請(qǐng)求要求上傳或下載數(shù)據(jù)
c.?服務(wù)器收到數(shù)據(jù)請(qǐng)求后會(huì)隨機(jī)開啟一個(gè)端口Y,并通過(guò)命令通道將該端口信息傳送給客戶端
d.?客戶端在收到服務(wù)器發(fā)送過(guò)來(lái)的數(shù)據(jù)端口Y的信息后,將在客戶端本地開啟一個(gè)隨機(jī)端口Z,此時(shí)客戶端再主動(dòng)通過(guò)本機(jī)的Z端口與服務(wù)器的??? Y端口進(jìn)行連接,通過(guò)三次握手連接完成后,即可進(jìn)行數(shù)據(jù)傳輸。
3.?配置文件解析
賬戶類型設(shè)置參數(shù)
功能
全局設(shè)置lsten=YES是否監(jiān)聽端口
lsten_port=21監(jiān)聽端口號(hào)
write_enable=YES是否允許寫操作
download_enable=YES是否允許用戶下載
dirmessage_enable
進(jìn)入目錄是否顯示消息
xferlog_enable=YES
是否開啟xferlog日志功能
xerlog_std_format=YES
xferlog日志文件格式
connect_from_port_20=YES使用主動(dòng)模式連接,端口20
pasv_enable=YES是否啟用被動(dòng)模式連接,默認(rèn)為被動(dòng)模式
pasv_max_port=24600被動(dòng)模式連接的最大端口號(hào)
pasv_min_port=24500
被動(dòng)模式連接的最小端口號(hào)
userlist_enable=YES
是否啟用userlist用戶列表
userlist_deny=YES
是否禁用userlist文件中額賬戶訪問(wèn)FTP
max_clents=2000
最大允許同事2000客戶端連接,0代表無(wú)限制
max_per_ip=0
每個(gè)客戶端的最大連接限制,0代表無(wú)限制
tcp_wrappers=YES
是否啟用tcp_wrappers
guest_enable=YES
所有的非匿名登錄都映射為guest_username指定的賬戶
guest_username=ftp
anonymous_enable=YES
是否開啟匿名訪問(wèn)功能,默認(rèn)開啟
設(shè)定來(lái)賓用戶
user_config_dir=/etc/vsftpd/conf
指定用戶設(shè)置獨(dú)立配置文件與選項(xiàng)的目錄
dual_log_enable=NO是否啟用雙日志功能,生成兩個(gè)日志文件
anonymous_enable=YES是否開啟匿名訪問(wèn)功能,默認(rèn)開啟
匿名賬戶anon_max_rate=0
匿名數(shù)據(jù)傳輸率(B/s)
anon_root=/var/ftp匿名訪問(wèn)FTP根目錄
anon_upload_enbale=YES
是否允許匿名賬戶上傳,默認(rèn)禁止
anon_mkdir_write_enable=YES
是否允許匿名賬戶創(chuàng)建目錄,默認(rèn)禁止
anon_other_write_enable=YES
是否允許匿名賬戶進(jìn)行其他的所有寫操作
anon_umask=077
匿名上傳權(quán)限掩碼
本地賬戶
local_enable=YES是否啟用本機(jī)賬戶FTP功能
local_max_rate=0
本地賬戶數(shù)據(jù)傳輸率(B/s)
local_umask=077
本地賬戶權(quán)限掩碼
chroot_local_user=YES是否禁錮本地賬戶根目錄,默認(rèn)為NO
local_root=/ftp/common
本地賬戶訪問(wèn)FTP根路徑
1.?Vsftpd案例
4.1本地賬戶FTP
?案例背景:一公司搭建本地FTP服務(wù)器為公司員工使用,初定3位員工:Tom、Jack、Mary
(1)?安裝vsftpd
[root@vsftpd /]# yum -y install vsftpd
[root@vsftpd /]# service vsftpd start
[root@vsftpd /]# chkconfig vsftpd on
(2)?修改配置文件(注意一下配置文件每行最后不能有一個(gè)空格多不然會(huì)報(bào)錯(cuò))
[root@vsftpdetc]# vim vsftpd/vsftpd.conf
anonymous_enable=NO? #是否允許匿名訪問(wèn)????
local_enable=YES???? #是否啟用本機(jī)賬戶FTP功能
write_enable=YES???? #是否允許寫操作 ????????????????
local_umask=022???? #本地賬戶權(quán)限umask?????????
dirmessage_enable=YES#用戶進(jìn)入目錄是否顯示信息
xferlog_enable=YES??? #是否開啟xferlog日志功能
xferlog_std_format=YES #xferlog日志格式???????????
listen=YES???????????????????????? #是否開啟監(jiān)聽??????????????????
pam_service_name=vsftpd #?指定pam的配置文件為vsftpd
userlist_enable=YES???? #啟用userlist用戶文件列表
tcp_wrappers=YES????? #是否啟用tcp_wrappers???
(3)?創(chuàng)建系統(tǒng)賬戶與測(cè)試文件????
[root@vsftpd /]# useradd -s/sbin/nologin Tom
[root@vsftpd /]# useradd -s/sbin/nologin Jack
????????? ? ?????[root@vsftpd /]# useradd -s/sbin/nologin Mary
?????????? ? ????[root@vsftpd /]# touch/home/{Tom,Jack,Mary}/test.txt
????????????(4)? 關(guān)閉防火墻SELINUX和設(shè)置自啟動(dòng)
????[root@vsftpd /]# setenforce 0
? ? [root@vsftpd /]# service iptables stop
? ? [root@vsftpd /]# service vsftpd start
? ? [root@vsftpd /]# chkconfig vsftpd on
????????????(5)? 訪問(wèn)ftp客戶端
在訪問(wèn)客戶端之前需要修改下用戶的密碼(這是必須滴,養(yǎng)成習(xí)慣)
[root@vsftpd /]# passwd Tom
[root@vsftpd /]# passwd Jack
[root@vsftpd /]# passwd Mary
在瀏覽器中輸入?ftp://ip就成功了。。。
4.2虛擬賬戶FTP
?案例背景:滿足大量的賬戶訪問(wèn)需求
(1)?創(chuàng)建虛擬用戶數(shù)據(jù)庫(kù)
創(chuàng)建明文密碼文件:明文文件奇數(shù)行為用戶名,偶數(shù)行為密碼。
使用db_load工具將其轉(zhuǎn)換為數(shù)據(jù)庫(kù)文件
db_load是通過(guò)安裝db4-utils獲得
???[root@vsftpd ~]# yum -yinstall db4-utils???
?[root@vsftpd ~]# vim /etc/vsftpd/vlogin
???????????????????? tomcat
???????????????????? 123456
???????????????????? jerry
???????????????????? 654321
???????????????????? [root@vsftpd~]# db_load –T –t hash –f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db
???????????????????? [root@vsftpd~]# chmod 600 /etc/vsftpd/{vlogin,vlogin.db}
(2)?創(chuàng)建PAM文件,這是虛擬賬戶驗(yàn)證
Linux一般通過(guò)PAM文件設(shè)置賬戶驗(yàn)證機(jī)制,通過(guò)創(chuàng)建新的PAM文件,使用新的數(shù)據(jù)文件進(jìn)行登錄驗(yàn)證
PAM文件中的db選項(xiàng)于指定并驗(yàn)證賬戶和密碼的數(shù)據(jù)庫(kù)文件,數(shù)據(jù)庫(kù)文件無(wú)需.db的名稱后綴
authrequired /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib64/security/pam_userdb.sodb=/etc/vsftpd/vlogin
(3)?設(shè)置虛擬賬戶共享目錄
[root@vsftpd~]# useradd -s /sbin/nologin -d /home/ftp virtual
[root@vsftpd ~]# cp /etc/redhat-release/home/ftp
(4)?修改主配置文件(注意一下配置文件每行最后不能有一個(gè)空格多不然會(huì)報(bào)錯(cuò))
[root@vsftpd /]# vim/etc/vsftpd/vsftpd.conf
anonymous_enable=NO????????????? #是否開啟開啟匿名訪問(wèn)功能
local_enable=YES????????????????????????????????? ?#是否開啟本機(jī)賬戶FTP功能
write_enable=YES???????????????????????????????? #是否允許寫操作???????? ???
anon_upload_enable=YES??????????? #是否允許默認(rèn)上傳功能????
anon_mkdir_write_enable=NO??????? #是否允許匿名賬戶創(chuàng)建目錄功能
anon_other_write_enable=NO??????? #是否允許匿名賬戶其他寫入功能
chroot_local_user=YES??????????????? #是否禁錮本地賬戶根目錄????
guest_enable=YES??????????????????????????????? ?#啟用則所有非匿名登錄都映射為guest_username指定的賬戶
guest_username=virtual ??????????????????? ??#指定來(lái)賓用戶
listen=YES????????????????????????????????????????????? ?? #是否監(jiān)聽端口
listen_port=21???????????????????????????????????????????? #監(jiān)聽端口為21端口
pasv_enable=YES???????????????????????????????????????? #是否啟用被動(dòng)連接模式
pasv_min_port=30000??????????????????????????????? #被動(dòng)連接最小端口號(hào)
pasv_max_port=30999?????????????????????????????? #被動(dòng)連接最大端口號(hào)
pam_service_name=vsftpd.pam??????????????? #指定PAN驗(yàn)證機(jī)制的配置文件
user_config_dir=/etc/vsftpd_user_conf??? #用戶配置文件和選項(xiàng)所在目錄
user_sub_token=$USER???????????????? #為每個(gè)虛擬用戶創(chuàng)建家目錄?
(5)?為每個(gè)用戶設(shè)置獨(dú)立的共享路徑
[root@vsftpd/]# mkdir /etc/vsftpd_user_conf
[root@vsftpd/]# mkdir -p /home/ftp/tomcat
[root@vsftpd /]# service vsftpd restart
(6)?客戶端訪問(wèn)
在瀏覽器中輸入?ftp://ip就成功了。。。
2.?常見問(wèn)題分析
1.??提示錯(cuò)誤代碼: 530 Login incorrect
以上錯(cuò)誤說(shuō)明登錄驗(yàn)證賬戶失敗??赡苁鞘褂?4位系統(tǒng),而pam文件中庫(kù)文件使用的是/lib/ 而不是/lib64/ 還有可能是用戶名和密碼輸入錯(cuò)誤
也可能是vsftpd主配置文件中設(shè)置的pam_servcie_name設(shè)置的pam文件名稱和/etc/pam.d中創(chuàng)建的pam文件名稱不一致導(dǎo)致無(wú)法驗(yàn)證成功。
2.??提示錯(cuò)誤代碼: 500 OOPS: cannot changedirectory: /home/ftp/$USER
該提示代表目錄不存在或無(wú)權(quán)限導(dǎo)致無(wú)法切換至目錄,也可能是由于SELinux導(dǎo)致無(wú)法共享賬戶家目錄,默認(rèn)SELinux不允許共享家目錄
3.??登錄后無(wú)法上傳數(shù)據(jù)
匿名賬戶和虛擬賬戶檢查以anon_開頭的權(quán)限設(shè)置,本地賬戶檢查以local_開頭的權(quán)限設(shè)置,并且要確保全局write_enable設(shè)置為YES
另外,文件系統(tǒng)目錄的權(quán)限也需要修改,確??蛻舳速~戶有權(quán)限訪問(wèn)該目錄。
4.??啟動(dòng)服務(wù)時(shí)報(bào)錯(cuò): 500 OPPS: bad bool valueconfig file
Vsftpd配置文件設(shè)置錯(cuò)誤,檢查配置文件。配置文件要求每個(gè)設(shè)置項(xiàng)占用獨(dú)立的一行,并且不可以有多余的空格