ftp
安裝包:vsftpd-2.2.2-11.el6.x86_64.rpm 服務(wù)端
lftp-4.0.9-1.el6.x86_64.rpm 客戶(hù)端
配置文件:/etc/vsftpd/vsftpd.conf
端口:20 21
服務(wù)數(shù)據(jù)目錄:/var/ftp
啟動(dòng)服務(wù):service vsftpd restart
客戶(hù)端:
[root@robin ~]# lftp 172.16.110.1 ls查看重新鏈接,可能是防火墻的原因
lftp 172.16.110.1:~> get biji.txt
指定目錄下載:
lftp 172.16.110.1:~> lcd /tmp/
lftp 172.16.110.1:/> get biji.txt
或者
lftp 172.16.110.1:/> get biji.txt -o /home/
或者
[root@robin ~]# wget ftp://172.16.110.1/biji.txt
下載目錄
lftp 172.16.110.1:/> mirror software/
上傳文件
lftp 172.16.110.1:/> put /root/install.log
上傳目錄
lftp 172.16.110.1:/pub> mirror -R /boot/
匿名模式
上傳文件 (還要對(duì)文件有寫(xiě)權(quán)限,777)
anonymous_enable=yes
anon_upload_enable=yes 27
anon_mkdir_write_enable=yes 31
anon_umask=022
上傳文件下載
anon_umask=022 (在添加此權(quán)限之前上傳的文件都不刻意再下載,只有開(kāi)啟次權(quán)限后再上傳的文件可以再下載)
限速
anon_max_rate=20000
修改匿名帳號(hào)登錄位置
方法:1.修改ftp用戶(hù)家目錄(家目錄權(quán)限必須是755)
ftp:x:14:50:FTP User:/tmp/ftp:/sbin/nologin
方法2:
[root@robin ftp]# vim /etc/vsftpd/vsftpd.conf
anon_root=/tmp/ftp
工作原理
主動(dòng)模式
C S
1024+n---------->21
1024+m- -------->21
1024+m<------- --20
主動(dòng)方式的FTP是這樣的:客戶(hù)端從一個(gè)任意的非特權(quán)端口N(N>1024)連接到FTP服務(wù)器的命令端口,也就是21端口。然后客戶(hù)端開(kāi)始監(jiān)聽(tīng)端口N+1,并發(fā)送FTP命令"port N+1"到FTP服務(wù)器。接著服務(wù)器會(huì)從它自己的數(shù)據(jù)端口(20)連接到客戶(hù)端指定的數(shù)據(jù)端口(N+1)。
針對(duì)FTP服務(wù)器前面的防火墻來(lái)說(shuō),必須允許以下通訊才能支持主動(dòng)方式FTP:
1. 任何端口到FTP服務(wù)器的21端口 (客戶(hù)端初始化的連接 S<-C)
2. FTP服務(wù)器的21端口到大于1024的端口(服務(wù)器響應(yīng)客戶(hù)端的控制端口 S->C)
3. FTP服務(wù)器的20端口到大于1024的端口(服務(wù)器端初始化數(shù)據(jù)連接到客戶(hù)端的數(shù)據(jù)端口 S->C)
4. 大于1024端口到FTP服務(wù)器的20端口(客戶(hù)端發(fā)送ACK響應(yīng)到服務(wù)器的數(shù)據(jù)端口 S<-C)
總結(jié):
命令連接:客戶(hù)端>1024端口-> 服務(wù)器21端口
數(shù)據(jù)連接:客戶(hù)端>1024端口<- 服務(wù)器20端口
端口模式
C S
1024+n--------->21
<-----------------1024+m
1024+x--------->1024+m
為了解決服務(wù)器發(fā)起到客戶(hù)的連接的問(wèn)題,人們開(kāi)發(fā)了一種不同的FTP連接方式。這就是所謂的被動(dòng)方式,或者叫做PASV,當(dāng)客戶(hù)端通知服務(wù)器它處于被動(dòng)模式時(shí)才啟用。
在被動(dòng)方式FTP中,命令連接和數(shù)據(jù)連接都由客戶(hù)端,這樣就可以解決從服務(wù)器到客戶(hù)端的數(shù)據(jù)端口的入方向連接被防火墻過(guò)濾掉的問(wèn)題。當(dāng)開(kāi)啟一個(gè) FTP連接時(shí),客戶(hù)端打開(kāi)兩個(gè)任意的非特權(quán)本地端口(N > 1024和N+1)。第一個(gè)端口連接服務(wù)器的21端口,但與主動(dòng)方式的FTP不同,客戶(hù)端不會(huì)提交PORT命令并允許服務(wù)器來(lái)回連它的數(shù)據(jù)端口,而是提交 PASV命令。這樣做的結(jié)果是服務(wù)器會(huì)開(kāi)啟一個(gè)任意的非特權(quán)端口(P > 1024),并發(fā)送PORT P命令給客戶(hù)端。然后客戶(hù)端發(fā)起從本地端口N+1到服務(wù)器的端口P的連接用來(lái)傳送數(shù)據(jù)。
對(duì)于服務(wù)器端的防火墻來(lái)說(shuō),必須允許下面的通訊才能支持被動(dòng)方式的FTP:
1. 從任何端口到服務(wù)器的21端口 (客戶(hù)端初始化的連接 S<-C)
2. 服務(wù)器的21端口到任何大于1024的端口 (服務(wù)器響應(yīng)到客戶(hù)端的控制端口的連接 S->C)
3. 從任何端口到服務(wù)器的大于1024端口 (入;客戶(hù)端初始化數(shù)據(jù)連接到服務(wù)器指定的任意端口 S<-C)
4. 服務(wù)器的大于1024端口到遠(yuǎn)程的大于1024的端口(出;服務(wù)器發(fā)送ACK響應(yīng)和數(shù)據(jù)到客戶(hù)端的數(shù)據(jù)端口 S->C)
總結(jié):
命令連接:客戶(hù)端>1024端口-> 服務(wù)器21端口
數(shù)據(jù)連接:客戶(hù)端>1024端口-> 服務(wù)器>1024端口
客戶(hù)端傳輸模式(客戶(hù)端開(kāi)啟被動(dòng)模式)
[root@robin tmp]# vim /etc/lftp.conf
set ftp:passive-mode off
服務(wù)器關(guān)閉被動(dòng)模式
[root@data1 ftp]# vim /etc/vsftpd/vsftpd.conf
pasv_enable=no
用戶(hù)驗(yàn)證登錄(基于系統(tǒng)用戶(hù))
[root@robin tmp]# useradd robin 此用戶(hù)是在服務(wù)端
[root@robin tmp]# passwd robin
[root@robin tmp]# lftp -u robin,123 172.16.110.1 默認(rèn)進(jìn)入用戶(hù)的家目錄
ftp用戶(hù)將shell設(shè)置為:/sbin/nologin
當(dāng)然你要保證自己能讀寫(xiě)自己的目錄,就要在配置文件vsftpd.conf里設(shè)置一下就可以讀寫(xiě)了.
local_enable=yes
write_enable=yes
local_umask=022
限制本地用戶(hù)切換目錄
不限制此功能可以隨意切換目錄 ls,并在有權(quán)限的目錄下上傳文件(tmp)
方法1:
[root@robin tmp]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES 限制所有用戶(hù)切換目錄
設(shè)置本地用戶(hù)登錄目錄(不要求目錄權(quán)限,如果上傳就需要寫(xiě)權(quán)限)
local_root=/tmp/manager
限制本地用戶(hù)速度
local_max_rate=200000
限制用戶(hù)使用ftp
方法1:
將不允許登錄的用戶(hù)寫(xiě)入該文件:/etc/vsftpd/ftpusers (執(zhí)行命令時(shí),顯示連接)
方法2:黑白名單
userlist_enable=YES
userlist_deny=YES
名單文件:/etc/vsftpd/user_list 黑名單
userlist_enable=YES
userlist_deny=NO
名單文件:/etc/vsftpd/user_list 白名單(名單以外的用戶(hù)不可操作)
虛擬用戶(hù)
1.建立用戶(hù)數(shù)據(jù)庫(kù)
cat /etc/vsftpd/ftpuser.txt
test111 # 賬戶(hù)
pass111 # 密碼
test222
pass222
2.轉(zhuǎn)換文本文件為數(shù)據(jù)庫(kù)文件
[root@robin ~]# rpm -qf $(which db_load)
db4-utils-4.7.25-17.el6.x86_64
[root@robin ~]# db_load -T -t hash -f /etc/vsftpd/ftpuser.txt /etc/vsftpd/vsftpd_login.db
[root@robin ~]# chmod 600 /etc/vsftpd/vsftpd_login.db
3.更改驗(yàn)證方式
[root@robin ~]# mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
[root@robin ~]# vim /etc/pam.d/vsftpd 新建一個(gè)虛擬用戶(hù)的pam文件
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
4.建立系統(tǒng)帳號(hào)做為虛擬帳號(hào)的映射帳號(hào)
[root@robin ~]# useradd -d /home/vsftp virtual
[root@robin ~]# chmod 755 /home/vsftp
5.修改配置文件啟用虛擬用戶(hù)
[root@robin ~]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES # 開(kāi)啟虛擬用戶(hù)功能
guest_username=virtual # 指定虛擬用戶(hù)使用的系統(tǒng)用戶(hù)
權(quán)限:
virtual_use_local_privs=YES 該選項(xiàng)為YES虛擬帳號(hào)權(quán)限和本地用戶(hù)相同
virtual_use_local_privs=NO 該選項(xiàng)為NO虛擬帳號(hào)權(quán)限和匿名用戶(hù)相同
給每個(gè)用戶(hù)設(shè)置權(quán)限
[root@robin ~]# vim /etc/vsftpd/vsftpd.conf
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftp_user_conf
[root@robin ~]# mkdir /etc/vsftpd/vsftp_user_conf
[root@robin ~]# touch /etc/vsftpd/vsftp_user_conf/test111
[root@robin ~]# cat /etc/vsftpd/vsftp_user_conf/test111
write_enable=NO
local_max_rate=20000000
[root@robin ~]# touch /etc/vsftpd/vsftp_user_conf/test222
[root@robin ~]# cat /etc/vsftpd/vsftp_user_conf/test222
write_enable=YES
local_max_rate=1000000
登錄后目錄都是 /home/vsftp
可以在/etc/vsftpd/vsftp_user_conf/test111 中添加
local_root=/home/vsftp/test111
添加vsftp 用戶(hù)的步驟
1.在/etc/vsftpd/ftpuser.txt中添加用戶(hù)和密碼
2.運(yùn)行db_load命令將用戶(hù)和密碼加入數(shù)據(jù)庫(kù)
3.在/home/vsftp 中新建文件夾與用戶(hù)同名
4.在vsftpd_user_conf 中新建和用戶(hù)同名的文件并加入local_root=/home/vsftp/name
=========================
7. 實(shí)現(xiàn)虛擬路徑
將某個(gè)目錄掛載到FTP服務(wù)器下供用戶(hù)使用,這就叫做虛擬路徑.
比如將gxl用戶(hù)的目錄掛載到FTP服務(wù)器中,供FTP服務(wù)器的用戶(hù)使用,使用如下命令即可:
[[root@localhost](mailto:root@localhost) opt]# mount --bind /home/gxl /var/ftp/pub #使用掛載命令
[[root@localhost](mailto:root@localhost) opt]# ls /var/ftp/pub
LumaQQ Screenshot.png 桌面
8. 打開(kāi)vsFTPd的日志功能
添加下面一行到vsftpd.conf文件中,一般情況下該文件中有這一行,只要把前面的注釋符號(hào)#去掉即可,沒(méi)有的話(huà)就添加,或者修改:
xferlog_file=/var/log/vsftpd.log
9. 限制鏈接數(shù),以及每個(gè)IP最大的鏈接數(shù)
修改配置文件中,例如vsftp最大支持鏈接數(shù)100個(gè),每個(gè)IP能支持5個(gè)鏈接:
max_client=100
max_per=5
10. 限制傳輸速度
修改配置文件中,例如讓匿名用戶(hù)和vsftd上的用戶(hù)(即虛擬用戶(hù))都以80KB=1024*80=81920的速度下載
anon_max_rate=81920
local_max_rate=81920
11. 將用戶(hù)(一般指虛擬用戶(hù))限制在自家目錄
修改配置文件中,這樣用戶(hù)就只能訪(fǎng)問(wèn)自己家的目錄了:
chroot_local_user=yes
如果只想某些用戶(hù)僅能訪(fǎng)問(wèn)自己的目錄,其它用戶(hù)不做這個(gè)限制,那么就需要在chroot_list文件(此文件一般是在/etc/vsftpd/中)中添加此用戶(hù).
編輯此文件,比如將test用戶(hù)添加到此文件中,那么將其寫(xiě)入即可.一般的話(huà),一個(gè)用戶(hù)占一行.
[root@localhost vsftpd]# cat chroot_list
test
12. 綁定某個(gè)IP到vsFTPd
有時(shí)候要限制某些IP訪(fǎng)問(wèn)服務(wù)器,只允許某些IP訪(fǎng)問(wèn),例如只允許192.168.0.33訪(fǎng)問(wèn)這個(gè)FTP,同樣修改配置文件:
listen_address=192.168.0.33
配置 vsftpd.conf
anonymous_enable=NO #禁止匿名
local_enable=YES #允許本地登錄
write_enable=YES #允許寫(xiě),如需上傳,則必須
local_umask=027 #將上傳文件的權(quán)限設(shè)置為:777-local_umask
anon_upload_enable=YES #允許虛擬用戶(hù)和匿名用戶(hù)上傳
anon_other_write_enable=YES #允許虛擬用戶(hù)和匿名用戶(hù)修改文件名和刪除文件
dirmessage_enable=YES
xferlog_enable=YES #打開(kāi)日志記錄
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log #日志存放位置
xferlog_std_format=YES #標(biāo)準(zhǔn)日志格式
idle_session_timeout=600 #空閑連接超時(shí)
data_connection_timeout=120
ftpd_banner=Welcome to ChinaRise FTP service #歡迎信息
guest_enable=yes #允許虛擬用戶(hù)
guest_username=vsftpdguest #虛擬用戶(hù)使用的系統(tǒng)賬號(hào)
virtual_use_local_privs=YES #虛擬用戶(hù)擁有本地系統(tǒng)權(quán)限
chroot_local_user=NO
chroot_list_enable=YES
#以上兩行將虛擬用戶(hù)限制在其目錄下,不能訪(fǎng)問(wèn)其他目錄,或者直接用
chroot_local_user=YES
listen=yes #監(jiān)聽(tīng)/被動(dòng)模式
listen_port=21 #監(jiān)聽(tīng)端口
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #虛擬用戶(hù)名單保存在文件/etc/vsftpd/vsftpd.chroot_list 中
user_config_dir=/etc/vsftpd/vsftpd_user_conf #每個(gè)虛擬用戶(hù)名的更加詳細(xì)的培植保存在/etc/vsftpd/vsftpd_user_conf 中
虛擬用戶(hù)其他設(shè)置
在/etc/vsftpd/vsftpd.chroot_list 文件中寫(xiě)入允許登陸的虛擬用戶(hù)名稱(chēng),每行一個(gè)
在/etc/vsftpd/vsftpd_user_conf 文件夾中創(chuàng)建一個(gè)以虛擬用戶(hù)用戶(hù)名命名的文件,
寫(xiě)入:local_root = /var/FTP/子目錄名
然后在/var/FTP下創(chuàng)建一個(gè)對(duì)應(yīng)的目錄即可