FTP全名是File Transfer Protocol(文件傳輸協議) C/S架構 簡介: 下麵是關於FTP這個服務的屬性 (1)FTP服務相關軟體 IIS Serv-U Vsftpd proftpd pureftpd (2)FTP客戶端相關軟體 ftp命令 CuteFTP FlashFTP Le ...
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
- 1. 創建測試文件
- 2. 匿名用戶ftp對/var/ftp/pub有寫入許可權
- 3. 允許匿名用戶瀏覽
- 4. 允許用戶(匿名,本地,虛擬)有上傳許可權
- 5. 允許匿名用戶有上傳許可權
- 6. 允許匿名用戶有上傳文件夾許可權
- 7. 禁止匿名用戶有刪除,覆蓋等許可權
(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目錄。
進入到pub目錄下,可以創建和上傳測試目錄了。如圖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
cd /etc/vsftpd/user_dir
vim a
local_root=/test 規定了a用戶的根目錄 註意:一定要把目錄的屬主改為虛擬用戶對應的系統用戶。
mkdir /test
預設就是所有許可權
總結:本地用戶和虛擬用戶不能同時登錄、因為認證方式只有一種
本地是pam_service_name =vsftpd
虛擬是pam_service_name =vsftpd.vu
實驗4
1 修改vsftpd服務的監聽地址,埠
1.1 IP為:192.168.200.129
1.2 埠為:2121
2 使用vsftpd服務的被動模式
2.1 下限埠為24500
2.2 上限埠為24600
3 限制vsftpd服務的併發數,傳輸速度
3.1 限制併發客戶連接最多200
3.2 限制每個IP地址的連接數最多50
3.3 限制匿名用戶傳輸速率為50KB/s
3.4 限制本地用戶傳輸速率為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