FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱爲“文傳協議”。
工作方式
主動模式:客戶端從一個任意的非特權端口N(N>1024)連接到FTP服務器的命令端口,也就是21端口。然後客戶端開始 監聽端口N+1,併發送FTP命令“port N+1”到FTP服務器。接着服務器會從它自己的數據端口(20)連接到客戶端指定的數據端口(N+1)。
被動模式:當開啓一個 FTP連接時,客戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口連接服務器的21端口,但與主動方式的FTP不同,客戶端不會提交PORT命令並允許服務器來回連它的數據端口,而是提交 PASV命令。這樣做的結果是服務器會開啓一個任意的非特權端口(P > 1024),併發送PORT P命令給客戶端。然後客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。
先安裝vsftpd
[root@localhost ~]# yum install vsftpd -y
[root@localhost ~]# systemctl start vsftpd #啓動vsftpd
[root@localhost ~]# systemctl status vsftpd #查看vsftpd狀態
vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since 五 2018-02-02 08:22:39 CST; 1min 50s ago
Process: 12558 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 12559 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─12559 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
vsftp三種認證模式
annoymous 匿名用戶 #無虛輸入密碼即可訪問
local user 真實用戶 #服務器上存在的用戶
guest user 虛擬用戶 #映射到ftp服務器的用戶
vsftpd的默認配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES #允許匿名用戶登陸
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES #允許本地用戶登陸
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES #允許本地用戶讀寫
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022 #本地用戶創建文件的umask值
......
dirmessage_enable=YES #當用戶進入某個目錄時,會顯示該目錄需要注意的內容是 message
xferlog_enable=YES #啓動維護記錄服務器上傳和下載情況的日誌文件
connect_from_port_20=YES #FTP PORT主動模式進行數據傳輸時使用20端口
xferlog_std_format=YES #傳輸日誌文件將以標準 xferlog 的格式書寫
listen_ipv6=YES #監聽ipv6
pam_service_name=vsftpd #pam認證模塊的名字
userlist_enable=YES #拒絕登陸ftp的名單
tcp_wrappers=YES #限制IP訪問vsftpd
匿名用戶認證
我們剛纔已經開啓了vsftpd 我們已經可以登陸ftp站點 #需關閉防火牆或設置規則 並關閉selinux
我們已經登陸到ftp站點了
試着創建一個文件夾 出現550報錯 是因爲我們是以匿名用戶登陸到FTP站點 並沒有給匿名用戶創建目錄的權限
在vsftpd配置文件中添加
anon_upload_enbale #允許匿名用戶上傳
anon_mkdir_write_enable=yes #允許匿名用戶創建目錄
anon_other_write_enable=yes #允許匿名用戶修改目錄名稱或刪除目錄
再賦予匿名用戶登陸的文件夾最高權限chmod 777 /var/ftp/pub
已經可以創建並修改文件夾
還有一種方法 是將匿名用戶登陸到的目錄系統用戶改成ftp 就不用修改目錄權限
[root@localhost ~]#chown -Rf ftp /var/ftp/pub
本地用戶模式
修改vsftp配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
加入一行
local_root=/etc/ftp
創建 一個用戶
[root@localhost ~]#useradd 51cto
[root@localhost ~]# passwd 51cto
更改用戶 51cto 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
創建這個目錄
[root@localhost ~]#mkdir /etc/ftp
重啓一下vsftpd
用我們剛創建的用戶登陸
登陸成功
誒? 既然說本地用戶模式是 服務器上真是存在的用戶 那我們的管理員root 也是真實存在的 那是否可以登陸呢?
無法登陸 這是爲什麼呢?
這是因爲vsftpd有一個禁止用戶登陸的名單
在上面的匿名用戶說過 vsftpd默認是開啓禁止用戶名單的 我們的root用戶在名單之中 自然就無法登陸了 禁止root用戶登陸也對服務器提升了安全性 防止***通過ftp爆破root密碼
虛擬用戶
虛擬用戶是這三種認證模式中最安全的一種 也稍微複雜一些
虛擬用戶是用PAM認證模塊中配置 FTP認證的數據庫文件來進行加密
關於PAM認證可以看http://blog.51cto.com/tyjhz/1436175
首先我們在/etc/目錄下 創立一個用戶數據庫文件
奇數行爲賬戶偶數行爲密碼
爲了安全我們用db_load命令 用哈希算法將明文信息轉換成密文數據庫文件並降低文件的權限 避免其他人看到數據庫文件
[root@localhost etc]#db_load -T -t hash -f /etc/ftp/ftp.txt ftp.db
[root@localhost etc]#rm ftp.txt
[root@localhost etc]#chmod 600 ftp.db
我們用默認的pam文件 註釋其他行
新加兩行
db_load 後面跟的是數據庫的路徑不用寫數據庫的後綴
創建存放虛擬用戶配置文件的目錄
[root@localhost etc]#mdir -p /etc/ftp
配置虛擬用戶權限
[root@localhost ftp]#vim user1
[root@localhost ftp]#vim user2
創建兩個用戶登陸的目錄
[root@localhost ftp]#mkdir -p /home/user1
[root@localhost ftp]#mkdir -p /home/user2
賦予最高權限
[root@localhost ftp]#chmod 777 /home/*
修改vsftpd配置文件
重啓一下vsftpd
測試一下權限