FTP服務部署
ftp傳輸的機制:
FTP通過21端口與Client端進行指令傳輸,通過20端口進行數據傳輸,根據工作模式的不同VSFTP分為主動模式和被動模式2種,大多是情況VSFTP是工作在被動模式下
主動模式:
1.Client端以一個大於1024的隨機端口向FTP服務器的21號端口發出建立連接請求
2.Server端收到請求后,會以20端口主動去鏈接Client端的隨機端口+1號端口,如果該端口被占用,則回去找隨機端口+2號端口以此類推,直到找Client端空閑的端口
3.Client端與Server端通過20端口進行數據傳輸
被動模式:
1.Client端以一個大於1024的隨機端口向FTP服務器的21號端口發出建立連接請求
2.Server端會通過21號端口給Client端發送一個類似(xyz,ab)的數值來告訴Client端打開的隨機端口,同時打開xyz*256+ab端口
3.Client端再通過一個隨機端口連接Server端的xyz*256+ab端口進行數據傳輸
而現實環境中無論是Client端還是Server端都是在防火牆后面,在主動模式下VSFTP會鏈接Client端的隨機+1號端口,Client端顯然不會將防火牆上所有隨機端口開放;而在被動下問題同樣的問題仍然會擺在Server端的防火牆面前,這就需要Server端的防火牆開啟連接追蹤功能,即放行與21號端口有關聯的端口訪問請求,這也就是為什么大部分情況下VSFTP是以被動模式工作。
vsftp部署:
環境描述:
服務端系統:CentOS7.5;內存2G;硬盤30G
客戶端系統:Windows10 ; 軟件:xftp客戶端
注意:1)每一步的操作路徑,不要混亂
2) 配置的詳細介紹在本文章的最后部分展示
3)本次安裝vsftpd以yum的形式進行部署
Vsftp的登陸類型:
VSFTP提供了系統用戶、匿名用戶、和虛擬用戶三種不同的登陸方式。所有的虛擬用戶會映射成一個系統用戶,訪問時的文件目錄是為此系統用戶的家目錄;匿名用戶也是虛擬用戶,映射的系統用戶為ftp,詳細信息可以通過man vsftpd.conf查看
1.安裝vsftp
[root@linuxMA ~]# yum -y install vsftpd*
2.使用rpm –qc 查看vsftpd的配置文件
[root@linuxMA ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
#配置文件詳解
/etc/logrotate.d/vsftpd 滾動日志配置文件
/etc/pam.d/vsftpd 認證文件,pam全稱為Plugable Authentication
/etc/vsftpd/ftpusers 控制登陸系統用戶的機制,出現在該文件中的用戶不允許使用ftp服務器,這是在/etc/pam.d/vsftpd中定義的
/etc/vsftpd/user_list 配合/etc/vsftpd/vsftpd.conf中的userlist_enable=YES和userlist_deny=YES|NO實現黑白名單此處需要注意的是:黑白名單的前提是/etc/vsftpd/vsftpd.conf配置文件中userlist_enable=YES,userlist_deny選項默認為YES(黑名單),即該文件中出現的用戶不允許登陸VSFTP,就算手動添加userlist_deny=NO(白名單)即只允許該文件中出現的用戶允許登陸VSFTP,在VSFTP啟動時依然會去檢查/etc/vsftpd/ftpusers文件並且禁止該文件中的用戶登錄
/etc/vsftpd/vsftpd.conf VSFTP主配置文件,所有的配置選項必須頂格寫,配置文件中#后帶空格的是說明,不帶空格的是注釋掉的配置選項
3.將cp命令將配置文件備份
[root@linuxMA ~]# cd /etc/vsftpd/
[root@linuxMA vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@linuxMA vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[root@linuxMA vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
1)配置匿名用戶
[root@linuxMA vsftpd]# 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=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
tcp_wrappers=YES
#開啟vsftp服務,並查看是否啟動成功
[root@linuxMA vsftpd]# systemctl start vsftpd
[root@linuxMA vsftpd]# netstat -lnpt |grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 34531/vsftpd
#登陸驗證:
#測試登陸成功:
#修改權限:
[root@linuxMA ~]# cd /var/ftp/
[root@linuxMA ftp]# ll
總用量 0
drwxr-xr-x 2 root root 6 8月 3 2017 pub
[root@linuxMA ftp]# chown ftp:ftp pub/
[root@linuxMA ftp]# ll
總用量 0
drwxr-xr-x 2 ftp ftp 21 9月 16 10:16 pub
重點:改變根目錄的屬主,如果不改變的話,只能訪問,其他權限不能生效。因為我們是以ftp用戶的身份訪問的,而pub默認的屬主屬組是root。
注意:(1)修改完配置之后需要重啟完服務才能生效
(2)還需要從新從客戶端登陸,否則修改后的配置看不到效果。
2)配置系統用戶
1.創建測試用戶zhangsan、lisi 密碼都為“123456”
[root@linuxMA ~]# useradd zhangsan
[root@linuxMA ~]# useradd lisi
[root@linuxMA ~]# echo "123456" |passwd --stdin zhangsan
更改用戶 zhangsan 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
[root@linuxMA ~]# echo "123456" |passwd --stdin lisi
更改用戶 lisi 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
2.修改配置文件
[root@linuxMA ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=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
[root@linuxMA ~]# vim /etc/vsftpd/user_list //添加用戶到白名單
zhangsan
lisi
[root@linuxMA ~]# systemctl restart vsftpd //重啟服務
#登陸測試:
#登陸成功:
#添加並進行測試
[root@linuxMA ~]# cd /home/zhangsan/
[root@linuxMA zhangsan]# touch zhangsan.txt
3)配置虛擬用戶
1.建立虛擬FTP用戶的帳號
[root@linuxMA ~]# useradd -s /sbin/nologin vu
2.創建虛擬用戶文件
[root@linuxMA ~]# cd /etc/vsftpd/
[root@linuxMA vsftpd]# vim user
wangwu
12345
maliu
12345
基數行代表用戶名,偶數行代表密碼
3. 通過db_load工具創建出Berkeley DB格式的數據庫文件
[root@linuxMA vsftpd]# db_load -T -t hash -f user user.db
[root@linuxMA vsftpd]# ls
ftpusers user user.db user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
db_load -T -t hash -f user user.db
-f 指定數據原文件
-T 允許非Berkeley DB的應用程序使用文本格式轉換的DB數據文件
-t hash 讀取文件的基本方法
4. 建立支持虛擬用戶的PAM認證文件
[root@linuxMA vsftpd]# vim /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.修改配置文件
[root@linuxMA vsftpd]# vim vsftpd.conf
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=vu
pam_service_name=vsftpd.vu
local_enable=YES
local_umask=077
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_dir
6. 為用戶建立獨立的配置目錄及文件
[root@linuxMA vsftpd]# mkdir /etc/vsftpd/user_dir
[root@linuxMA vsftpd]# ls
ftpusers user user.db user_dir user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
[root@linuxMA vsftpd]# cd /etc/vsftpd/user_dir
[root@linuxMA user_dir]# vim wangwu
local_root=/etc/vsftpd/data //虛擬用戶數據的存放路徑
#創建虛擬用戶數據存放目錄
[root@linuxMA user_dir]# cd ..
[root@linuxMA vsftpd]# mkdir data
[root@linuxMA vsftpd]# chmod 777 data/
#重啟服務
[root@linuxMA ]# systemctl restart vsftpd
登陸測試:
#登陸成功。添加文件進行測試
[root@linuxMA vsftpd]# cd data/
[root@linuxMA data]# touch wangwu.txt
重點:本地用戶和虛擬用戶不能同時登錄、因為認證方式只有一種
本地是pam_service_name =vsftpd
虛擬是pam_service_name =vsftpd.vu
配置文件詳解
#常用的匿名FTP配置項
anonymous_enable=YES 是否允許匿名用戶訪問
anon_umask=022 匿名用戶所上傳文件的權限掩碼
anon_root=/var/ftp 設置匿名用戶的FTP根目錄
anon_upload_enable=YES 是否允許匿名用戶上傳文件
anon_mkdir_write_enable=YES 是否允許匿名用戶允許創建目錄
anon_other_write_enable=YES 是否允許匿名用戶有其他寫入權(改名,刪除,覆蓋)
anon_max_rate=0 限制最大傳輸速率(字節/秒)0為無限制
#常用的本地用戶FTP配置項
local_enable=YES 是否允許本地系統用戶訪問
local_umask=022 本地用戶所上傳文件的權限掩碼
local_root=/var/ftp 設置本地用戶的FTP根目錄
chroot_list_enable=YES 表示是否開啟chroot的環境,默認沒有開啟
chroot_list_file=/etc/vsftpd/chroot_list 表示寫在/etc/vsftpd/chroot_list文件里面的用戶是不可以出chroot環境的。默認是可以的。
Chroot_local_user=YES 表示所有寫在/etc/vsftpd/chroot_list文件里面的用戶是可以出chroot環境的,和上面的相反。
local_max_rate=0 限制最大傳輸速率(字節/秒)0為無限制
#常用的全局配置項
listen=YES 是否以獨立運行的方式監聽服務
listen_address=192.168.4.1 設置監聽FTP服務的IP地址
listen_port=21 設置監聽FTP服務的端口號
write_enable=YES 是否啟用寫入權限(上傳,刪除文件)
download_enable=YES 是否允許下載文件
dirmessage_enable=YES 用戶切換進入目錄時顯示.message文件
xferlog_enable=YES 啟用日志文件,記錄到/var/log/xferlog
xferlog_std_format=YES 啟用標准的xferlog日志格式,禁用此項將使用vsftpd自己的格式
connect_from_port_20=YES 允許服務器主動模式(從20端口建立數據連接)
pasv_enable=YES 允許服務器被動模式
pasv_max_port=24600 設置被動模式服務器的最大端口號
pasv_min_port=24500 設置被動模式服務器的最小端口號
pam_service_name=vsftpd 用戶認證的PAM文件位置
(/etc/pam.d/vsftpd.vu)
userlist_enable=YES 是否啟用user_list列表文件
userlist_deny=YES 是否禁用user_list中的用戶
max_clients=0 限制並發客戶端連接數
max_per_ip=0 限制同一IP地址的並發連接數
tcp_wrappers=YES 是否啟用tcp_wrappers主機訪問控制
chown_username=root 表示匿名用戶上傳的文件的擁有人是root,默認關閉
ascii_upload_enable=YES 表示是否允許用戶可以上傳一個二進制文件,默認是不允許的
ascii_download_enable=YES 這個是代表是否允許用戶可以下載一個二進制文件,默認是不允許的
nopriv_user=vsftpd 設置支撐Vsftpd服務的宿主用戶為手動建立的Vsftpd用戶
async_abor_enable=YES 設定支持異步傳輸功能
ftpd_banner=Welcome to Awei FTP servers 設定Vsftpd的登陸標語
guest_enable=YES 設置啟用虛擬用戶功能
guest_username=ftpuser 指定虛擬用戶的宿主用戶
virtual_use_local_privs=YES 設定虛擬用戶的權限符合他們的宿主用戶
user_config_dir=/etc/vsftpd/vconf 設定虛擬用戶個人Vsftp的配置文件存放路徑