FTP全名是File Transfer Protocol(文件傳輸協議) C/S架構
簡介:
下面是關於FTP這個服務的屬性
(1)FTP服務相關軟件
IIS Serv-U Vsftpd proftpd pureftpd
(2)FTP客戶端相關軟件
ftp命令 CuteFTP FlashFTP LeapFTP Filezilla gftp kuftp
(3)VSFTP的守護進程
/usr/sbin/vsftpd
(4)FTP的啓動腳本
/etc/init.d/vsftpd
(5)FTP的端口
TCP協議的20,21端口與客戶端進行通信
20用於建立數據連接,傳輸文件數據。(數據端口)
21用於建立控制連接,並傳輸FTP控制命令。(命令端口)
(6)用戶控制列表文件
/etc/vsftpd/ ftpusers文件中的用戶禁止登錄FTP服務器(黑名單)
/etc/vsftpd/ user_list文件中的用戶可能被禁止或允許登錄FTP服務器,具體看vsftpd.conf的設置
(7)工作模式
主動模式:
客戶端想服務端21端口發送建立連接請求,需要傳輸數據時,客戶端會通過port命令告訴服務器自己監聽的端口,服務器會主動通過20端口與客戶端建立數據連接。
被動模式
客戶端想服務端21端口發送建立連接請求,需要傳輸數據時,
服務器以pasv命令告訴客戶我打開了某個端口(非20端口),你來連接我,客戶端會像服務器的非20端口建立數據連接
(8)根據傳輸文件是否進行字符轉換分爲:
文本模式(又稱爲ASCII)以文本序列傳輸數據,用的較多
二進制模式(又稱爲Binary模式)以二進制序列傳輸數據
主配置文件
/etc/vsftpd/vsftpd.conf
搭建FTP服務:
1、搭建yum倉庫
(1)mount /dev/cdrom /mnt
(2)cat /etc/yum.repos.d/rhel-debuginfo.repo
[rhel-Server]
name=Red Hat Enterprise Server
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
2、安裝
yum -y install vsftpd*
配置選項講解
實驗1
創建測試文件
匿名用戶ftp對/var/ftp/pub有寫入權限
允許匿名用戶瀏覽
允許用戶(匿名,本地,虛擬)有上傳權限
允許匿名用戶有上傳權限
允許匿名用戶有上傳文件夾權限
禁止匿名用戶有刪除,覆蓋等權限
(1)查看ftp的默認根路徑,默認是有一個pub目錄(默認的跟目錄),
[root@Centos2 ~]# ls /var/ftp/
pub
(2)備份配置文件
cd /etc/vsftpd/vsftpd.confg
cp vsftpd.conf vsftpd.bak
vim vsftpd.conf
內容如下
write_enable=YES
anon_umask=022
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO 是否允許匿名用戶有其他寫入權(改名,刪除,覆蓋)
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
(3)啓動服務
service vsftpd start
(4)改變根目錄的屬主,如果不改變的話,只能訪問,其他權限不能生效。因爲我們是以ftp用戶的身份訪問的,而pub默認的屬主屬組是root。
chown ftp /var/ftp/pub
驗證:
在網絡或是計算中輸入ftp地址:格式如下圖。
我們會看到默認的pub目錄。
圖1
進入到pub目錄下,可以創建和上傳測試目錄了。如圖2
圖2
注意:(1)修改完配置之後需要重啓完服務才能生效
(2)還需要從新從客戶端登陸,否則修改後的配置看不到效果。
實驗2
創建測試帳號u1、u2、u3密碼都爲“user”
允許本地用戶訪問
將權限掩碼設爲077
將本地帳號禁錮在宿主目錄中
只允許u1、u2兩個用戶可以登錄
創建測試用戶,並且設置密碼
[root@crushlinux ~]# useradd u1
[root@crushlinux ~]# echo "user" |passwd --stdin u1
[root@crushlinux ~]# useradd u2
[root@crushlinux ~]# echo "user" |passwd --stdin u2
[root@crushlinux ~]# useradd u3
[root@crushlinux ~]# echo "user" |passwd --stdin u3
在配置文件中加入紅色部分內容
[root@crushlinux ~]# vi /etc/vsftpd/vsftpd.conf
local_enable=YES
local_umask=077
chroot_local_user=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
將允許登陸的用戶加入到白名單中
vi /etc/vsftpd/user_list
u1
u2
service vsftpd restart
登陸驗證
格式爲:ftp://用戶名:密碼@ftpIP地址
登陸上默認是空白的,因爲這是用戶的家目錄。
用u3用戶登陸,會報錯誤(windows不同系統報錯不會完全一致):
實驗3
構建基於虛擬用戶的FTP服務
創建賬號數據
1.建立虛擬FTP用戶的帳號數據庫文件
2.創建FTP根目錄及虛擬用戶映射的系統用戶
3.建立支持虛擬用戶的PAM認證文件
添加虛擬用戶支持
4.在vsftpd.conf文件中添加支持配置
5.爲個別虛擬用戶建立獨立的配置文件
啓動服務並測試
6.重新加載vsftpd配置
7.使用虛擬FTP賬戶訪問測試
實驗部分
1.建立虛擬FTP用戶的帳號數據庫文件用到db_load工具先安裝軟件包
rpm -ivh db4-utils-4.7.25-17.el6.x86_64.rpm
cd /etc/vsftpd/
2、創建虛擬用戶文件
vim user
a
1
b
1
c
1
基數行代表用戶名,偶數行代表密碼
通過db_load工具創建出Berkeley DB格式的數據庫文件
db_load -T -t hash -f user user.db
-f 指定數據原文件
-T允許非Berkeley DB的應用程序使用文本格式轉換的DB數據文件
-t hash讀取文件的基本方法
3、創建虛擬用戶對應的系統用戶
useradd -s /sbin/nologin vu
4、建立支持虛擬用戶的PAM認證文件
vi /etc/pam.d/vsftpd.vu
加入以下兩行
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
對應剛纔生成user.db的文件
5、在vsftpd的配置文件中支持虛擬用戶
注意:在做虛擬用戶的時候,一定要去掉userlist_deny=NO
這個選項,否則會顯示用戶驗證失敗
vi /etc/vsftpd/vsftpd.conf
guest_enable=YES 啓用用戶映射功能
guest_username=vu 指定映射的系統用戶名稱
pam_service_name=vsftpd.vu 指定新的PAM認證文件
local_enable=YES
local_umask=077
chroot_local_user=YES 如果紅色3條配置沒有的話就會報錯:用戶身份驗證失敗
virtual_use_local_privs=YES
如果沒有這條配置的話 上傳將會顯示錯誤.這條最重要
還要注意每行配值的末尾不要有空行,否則也會有報錯
6.爲個別虛擬用戶建立獨立的配置文件
vi /etc/vsftpd/vsftpd.conf 加入下面一行
user_config_dir=/etc/vsftpd/user_dir用戶配置目錄支持
爲用戶a、b建立獨立的配置目錄及文件 這一行也是必須有的
mkdir /etc/vsftpd/user_dir
vim a
local_root=/test 規定了a用戶的根目錄 注意:一定要把目錄的屬主改爲虛擬用戶對應的系統用戶。
默認就是所有權限
總結:本地用戶和虛擬用戶不能同時登錄、因爲認證方式只有一種
本地是pam_service_name =vsftpd
虛擬是pam_service_name =vsftpd.vu
實驗4
修改vsftpd服務的監聽地址,端口
IP爲:192.168.200.129
端口爲:2121
使用vsftpd服務的被動模式
下限端口爲24500
上限端口爲24600
限制vsftpd服務的併發數,傳輸速度
限制併發客戶連接最多200
限制每個IP地址的連接數最多50
限制匿名用戶傳輸速率爲50KB/s
限制本地用戶傳輸速率爲200KB/s
[root@crushlinux ~]# netstat -naptu |grep "vsftpd"
[root@crushlinux ~]# vi /etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.200.129
listen_port=2121
pasv_enable=YES
pasv_min_port=24500
pasv_max_port=24600
max_clients=200
max_per_ip=50
anon_max_rate=50000
local_max_rate=200000
[root@crushlinux ~]# service vsftpd restart
[root@crushlinux ~]# netstat -naptu |grep "vsftpd"
tcp 0 0 192.168.200.129:2121 0.0.0.0:* LISTEN 3552/vsftpd