FTP全名是File Transfer Protocol(文件傳輸協議) C/S架構linux
下面是關於FTP這個服務的屬性數據庫
(1)FTP服務相關軟件vim
IIS Serv-U Vsftpd proftpd pureftpdwindows
(2)FTP客戶端相關軟件服務器
ftp命令 CuteFTP FlashFTP LeapFTP Filezilla gftp kuftp網絡
(3)VSFTP的守護進程架構
/usr/sbin/vsftpdapp
(4)FTP的啓動腳本tcp
/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)查看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目錄下,能夠建立和上傳測試目錄了。
注意:(1)修改完配置以後須要重啓完服務才能生效
(2)還須要重新從客戶端登錄,不然修改後的配置看不到效果。
實驗2
建立測試用戶,而且設置密碼
[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