ftp :文件傳輸協議 獨立服務linux
vsftpd工具:ftp用戶(系統用戶)管理維護,在後臺運行進程vim
ftp默認端口 2 1 數據端口 2 0 端口(主動模式);默認狀況下ftp服務運行在被模式下。windows
ftp原理:安全
主動模式:客服機向服務器的21端口發送請求,服務接受鏈接,創建一條命令鏈路,須要傳送數據時候,客服端命令鏈路上用RORT命令回覆服務端接口已經打開能夠鏈接,服務端的從20端口向客戶端改21端口發送鏈接請求,創建一條數據鏈接來傳送數據。數據鏈路創建過程服務器主動請求。服務器
被動模式:客服端向服務器的控制端口發送鏈接請求,服務端接受鏈接,創建一條命令鏈路,當須要傳送數據時候,服務端在命令鏈路上用PASV命令告訴客服端:端口打開了某個端口,告訴端來鏈接,客服端向服務端的該端口發送鏈接,創建一條數據鏈路來傳送數據。在數據創建的過程當中是服務端被動向等待客服端請求。網絡
創建好環境 客服端:windows: ftp://10.1.1.1 linux:ftp 、lftpapp
搭建服務的步驟:一、關閉防火牆和selinux
dom
二、配置YUM源ssh
三、軟件三部曲(查看、安裝、查看配置文件)tcp
rpm -q vsftp 是否安裝 ***
yum -y install vsftpd
四、瞭解主配置文件 man 5 vsftpd.conf
# cat /etc/vsftpd/vsftpd.conf|grep -v ^#|grep -v ^$
anonymous_enable=YES 容許匿名用戶訪問
local_enable=YES 容許本地用戶訪問
write_enable=YES 寫總開關(本地用戶)
local_umask=022 本地用戶的默認權限
dirmessage_enable=YES 開啓消息功能 .messages
xferlog_enable=YES 開啓日誌功能
connect_from_port_20=YES 支持主動模式(默認被動模式)
xferlog_std_format=YES 日誌格式
listen=YES 以獨立服務運行
pam_service_name=vsftpd 認證服務名
userlist_enable=YES 開啓用戶列表
tcp_wrappers=YES 支持tcp_wrappsers功能,相似防火牆,可是沒有防火牆功能強大
五、根據需求修改配置文件
六、啓動服務,開機自動動
#serivce vsftpd start
#chkconfig vsftpd no
#setstat -nltp | grep 21 端口是否開啓
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3087/vsftpd
七、測試驗證(須要安裝ftp和lftp)
默認測試的結果:一、默認容許本地用戶和匿名用戶訪問
二、默認匿名用戶沒有權限上傳文件能夠下載;本地用戶能夠上傳、刪除文件。
需求 1:容許匿名用戶上傳、下載文件、刪除及重命名,匿名用戶不能夠下載別人上傳的文件
一、 #vim /etc/vsftpd/vsftpd.conf
...
anon_upload_enable=YES 容許上傳
anon_mkdir_write_abled=YES 容許建立
anon_other_write_enable=YES 重命名
二、 重啓服務 # service vsftpd restart
三、測試: # lftp 10.1.1.1
lftp 10.1.1.1:/> put test1
put: Access failed: 553 Could not create file. (test1) 目錄權限
lftp 10.1.1.1
lftp 10.1.1.1:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root 查看不了
# lftp 10.1.1.1:~>
緣由:權限太大,不安全。修改目錄的權限
解決辦法:
#chmod o - w /var/ftp
#chmod o + w /var/ftp/pub ——>在 ftp 家目錄下建立一個目錄
需求 2 : 匿名用戶容許下載其餘匿名用戶上傳的文件
匿名用戶上傳文件的默認權限, man 文檔查看
default: anon_umask:077
匿名用戶建立 file 的默認權限:600
dir 的默認權限:700
一、 #vim /etc/vsftpd/vsftpd.conf ——>修改主配置文件(修改默認權限)
...
anon_umask=02
二、重啓服務
需求 3 :開啓匿名用戶和本地用戶家目錄裏的消息功能
局部:
anon:/var/ftp
echo hello anon > /var/ftp/.message
local:/home/$username
echo hello local > /home/user01/.message
# vim /etc/vsftpd/vsftpd.conf ——>全局修改
...
banner_file=/etc/vsftpd/banner 其餘人登陸時會看見該文件的內容呢
#echo banner xxx > /etc/vsftpd/banner
#service vsftpd restart
需求 4 :禁錮本地用戶的家目錄
一、 #vim /etc/vsftpd/vsftpd.conf
...
chroot_local_user=YES 禁錮全部本地用戶,只能在本身的家目錄裏活動
#service vsftpd restart 重啓
二、#vim /etc/vsftpd/vsftpd.conf
...
chroot_local_user=YES 只容許user01能夠切換,其餘任何人都不容許
chroot_list_enable=YES
#( default follows )
chroot_list_file=/etc/vsftpd/chroot_list
#echo user01 > /etc/vsftpd/chroot_list
三、#vim /etc/vsftpd/vsftpd.conf
...
#chroot_local_user=YES 只拒絕user01,其餘人均可以切換
chroot_list_enable=YES
#( default follows )
chroot_list_file=/etc/vsftpd/chroot_list
#echo user01 > /etc/vsftpd/chroot_list
需求 5 :容許拒絕某人訪問 ftp 服務(ftp 自身訪問控制)
/etc/vsftpd/ftpusers:黑名單 /etc/vsftpd/user_list: 白名單
若是ftpusers 和 user_list 文件衝突,ftpusers黑名單 優先
#echo user01 >>ftpusers 用戶放入黑名單
client:
Name (192.168.1.102:root): user01
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>
一、只容許 user01 訪問 ftp 服務
# cat user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
#vim vsftpd.conf
...
userlist_deny=NO
重啓服務,測試:
Name (192.168.1.102:root): user02 沒在user_list裏面,所一拒絕登陸
530 Permission denied.
Login failed.
ftp>
需求 6 :容許或者拒絕網絡中的主機
# ldd /usr/sbin/vsftpd |grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f42562a0000)
/etc/hosts.deny 拒絕訪問
/etc/hosts.allow 容許訪問先匹配
/etc/hosts.deny , 再去匹配
hosts.allow ; 若是兩個文件都不存在,默認都容許;若是兩個文件有衝突,allow優先
The extensible language uses the following format:
daemon_list : client_list : option : option ...
ALL: .friendly.domain: ALLOW 容許friendly.domain域下面的全部主機訪問全部服務
ALL: ALL: DENY 拒絕全部人來訪問全部服務
ALL: .bad.domain: DENY 拒絕.bad.domain下面的全部主機訪問全部服務
ALL: ALL: ALLOW 容許全部人來訪問全部服務
#vim /etc/hosts.deny ——>拒絕列表
...
服務名稱:選項
vsftpd:all 拒絕全部人來訪問 ftp 服務
vsftpd:192.168.1.3 , 192.168.1.110
vsftpd : 192.168.1.0/255.255.255.0
vsftpd , sshd : .uplooking.com except vm01.uplooking.com
#vim /etc/hosts.allow ——> 容許列表
...
vsftpd:all except:192.168.1.3
重啓服務測試
需求 7 :自定義匿名用戶和本地用戶的數據根目錄
/anon/data :匿名用戶數據根目錄
/local/data:本地用戶數據的根目錄
一、建立相應的目錄
#mkdir /anon/data -p
#mkdir /local/data -p
二、修改配置文件
#vim /etc/vdftpd/vsftpd.conf
...
anon_root=/anon/data
local_root=/local/data
三、重啓服務
四、測試驗證
其餘訪問控制: max _clients : 客戶端最大鏈接次數 默認是2000 max_per_ip : 客戶端每一個 IP 最大鏈接次數 默認 50 max_login_fails : 客戶端最大登陸失敗的次數 默認 3 local_max_rate : 本地用戶傳輸文件的最大速率 默認沒限制 單位是 字節