vsftpd服務配置
- ftp簡介
-
- vsftpd服務程式
- FTP配置實踐
-
- 安裝FTP服務程式
- 防火牆設定
-
- 切換至internal區域,并開啟ftp服務
- 儲存原始ftp配置檔案
- 匿名開放模式
-
- 坑一
- 坑二
- 坑三
- 結果顯示
- 匿名模式總結
- 本地使用者模式
-
- 配置vsftpd.conf檔案
- 檢視結果
- 虛拟使用者模式
-
- 建立FTP認證的使用者資料庫檔案
- hash加密資料庫檔案
- 虛拟使用者映射
- 建立PAM檔案
- 編輯vsftpd配置檔案
- 為虛拟使用者設定不同權限
- 添加user_config_dir參數
- 設定SElinux域允許政策
- 坑一
- 結果顯示
ftp簡介
FTP(file Transfer Protocol)全稱文本傳輸協定。旨在解決不同架構,不同裝置之間的檔案傳輸。FTP是一種基于用戶端/伺服器模式的網際網路檔案傳輸協定。FTP預設使用20、21号端口,其中20端口用于進行資料傳輸,21端口号用于接受用戶端發出的相關FTP指令域參數。
特點:
- 支援檔案多點下載下傳
- 支援斷點續傳技術
FTP伺服器: 使用FTP協定在網際網路上提供檔案存儲和通路服務的主機
FTP用戶端: 向用戶端發送連接配接請求,建立資料傳輸鍊路的主機
工作模式:
- 主動模式: FTP伺服器主動向用戶端發起連接配接請求
- 被動模式(預設工作模式): FTP伺服器等待用戶端發起連接配接請求
vsftpd服務程式
vsftpd作為更加安全的檔案傳輸服務程式。允許使用者以三種認證模式登入到FTP伺服器。
- 匿名開放模式: 一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登入到FTP伺服器。
- 本地使用者模式: 通過Linux系統本地賬戶密碼資訊進行認證的模式,比匿名開放模式更安全,配置更簡單那。但如果黑客破解了賬戶資訊,就就可以暢通無阻的登入FTP伺服器,控制整個伺服器。
- 虛拟使用者模式: 最安全的認證模式,需要為FTP服務單獨建立使用者資料庫檔案,虛拟出用來進行密碼認證的賬戶資訊,而這些賬戶資訊在伺服器系統中實際上是不存在的,僅供FTP服務程式進行認證使用。是以,即使破解了賬戶資訊也無法登入伺服器,降低破壞範圍和影響。
FTP配置實踐
安裝FTP服務程式
詳細步驟請參考CentOS8 配置apache 搭建靜态網站 踩坑向
[[email protected] ~]# yum install vsftpd
[[email protected] vsftpd]# yum install ftp
防火牆設定
在iptables防火牆中預設禁止了FTP傳輸協定的端口号。關閉iptables防火牆,使用firewalld防火牆
切換至internal區域,并開啟ftp服務
firewall-cmd --set-default-zone=internal
firewall-cmd --permanent --zone=internal --add-service=ftp
儲存原始ftp配置檔案
vsftpd.conf配置檔案儲存在
/etc/vsftpd
路徑下。
将原始vsftpd配置檔案另存為vsftpd.conf.backup檔案。
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=whoever
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
data_connection_timeout=120
nopriv_user=ftpsecure
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
deny_email_enable=YES
banned_email_file=/etc/vsftpd/banned_emails
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
參數 | 作用 |
---|---|
listen=[Yes|No] | 是否以獨立運作的方式監聽服務 |
listen_address=IP | 設定要監聽的IP位址 |
listen_port=21 | 設定FTP服務要監聽的端口 |
download_enable=[Yes|No] | 是否允許下載下傳檔案 |
userlist_enable=[Yes|No] userlist_deny=[Yes|No] | 設定使用者清單為允許還是禁止操作 |
max_clients=0 | 最大用戶端連接配接數,0為不限制 |
anonymous_enable=[Yes|No] | 是否允許匿名使用者通路 |
anon_upload_enable=[Yes|No] | 是否允許匿名暈乎上傳檔案 |
anon_umask=022 | 匿名使用者上傳檔案的umask值 |
anon_root=/var/ftp | 匿名使用者deFTP根目錄 |
anon_mkdir_write_enable=[Yes|No] | 是否允許匿名使用者建立目錄 |
anon_other_write_enable=[Yes|No] | 是否開放匿名使用者的其他寫入權限(重命名、删除等) |
anon_max_rate=0 | 匿名使用者的最大傳輸速率(位元組/秒),0為不限制 |
local_enable=[Yes|No] | 是否允許本地使用者登入FTP |
local_umask=022 | 本地使用者上傳檔案的umask值 |
local_root=/var/ftp | 本地使用者的ftp根目錄 |
chroot_local_user=[Yes|No] | 是否将使用者權限禁锢在FTP目錄,以確定安全 |
local_max_rate=0 | 本地使用者最大傳輸速率(位元組/秒),0為不限制 |
匿名開放模式
匿名開放模式一般用來通路不重要的公開檔案。vsftpd服務程式預設開啟了匿名開放模式。
-----------------------------------------------------------匿名開放模式權限參數---------------------------------------------
參數 | 作用 |
---|---|
anonymous_enable=Yes | 允許匿名通路模式 |
anon_umask-022 | 匿名使用者上傳檔案的umask值 |
anon_upload_enable=Yes | 允許匿名使用者上傳檔案 |
anon_mkdir_write_enable=Yes | 允許匿名使用者建立目錄 |
anon_other_write_enable=Yes | 允許匿名使用者修改目錄名稱或删除目錄 |
坑一
在vsftpd配置檔案配置為匿名開放模式,添加如下配置。
anonymous_enable=YES
anon_umask=0
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
重新開機vsftpd服務程式,并将vsftpd服務加入開機啟動項。
systemctl restart vsftpd
systemctl enbale vsftpd
當使用root使用者連接配接ftp伺服器時出現如下錯誤。
[[email protected] vsftpd]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
500 OOPS: vsftpd: cannot locate user specified in 'chown_username':whoever
原因: 隻是因為當使用匿名使用者登入ftp伺服器時,匿名使用者要以一個FTP伺服器中已存在的賬戶來進行操作。也就是匿名使用者都是假借這個FTP伺服器中已存在的身份進行操作的,匿名使用者的身份除了受
anon_umask
的值的影響,還受匿名使用者假借的這個身份所擁有的權限的影響。
解決辦法: 在
vsftpd.conf
配置檔案中
chown_uploads=YES
chown_username=yan <<<<将此處的whoever修改為ftp伺服器中存在的使用者名
坑二
在解決上一問題之後,再此連接配接到FTP伺服器,出現如下情況。
[[email protected] vsftpd]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
500 OOPS: cannot read anon e-mail list file:/etc/vsftpd/banned_emails
提示資訊說無法打開banned-emails 檔案。
原因: 在目前檔案路徑下使用
ll
指令檢視該路徑下的所有檔案。發現沒有
banned_emails
檔案。
解決辦法: 使用
touch
建立
banned_emails
檔案。
[[email protected] vsftpd]# ll
總用量 24
-rw-r--r--. 1 root root 0 8月 12 10:31 banned_emails
-rw-------. 1 root root 126 8月 12 10:30 ftpusers
-rw-------. 1 root root 361 4月 24 11:01 user_list
-rw-------. 1 root root 730 8月 12 10:28 vsftpd.conf
-rw-------. 1 root root 5081 8月 11 10:40 vsftpd.conf.backup
-rwxr--r--. 1 root root 348 4月 24 11:01 vsftpd_conf_migrate.sh
[[email protected] vsftpd]# systemctl restart vsftpd 《《《重新開機vsftpd服務
坑三
解決上一問題後再次連接配接FTP伺服器,出現如下問題。
[[email protected] vsftpd]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
500 OOPS: cannot locate user entry:ftpsecure
原因: 提示資訊顯示缺少
ftpsecure
使用者
解決辦法: 建立
ftpsecure
使用者
結果顯示
[[email protected] vsftpd]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 Welcome to blah FTP service.
Name (192.168.10.10:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.
在排除上面的錯誤後,還不能在
/var/ftp
目錄下進行建立、編輯操作。通過檢視
/var/ftp
目錄權限屬性可知,目前目錄屬于root使用者,其他使用者是沒有操作權限的。
drwxr-xr-x. 3 root root 33 8月 12 10:21 ftp
修改目錄所屬使用者
[[email protected] ~]# chown -Rf ftp /var/ftp
drwxr-xr-x. 3 ftp root 33 8月 12 10:21 ftp
此時連接配接ftp伺服器再次進行編輯建立操作,還是無法成功,這是因為selinux拒絕了ftp的相關操作。
檢視selinux中與ftp服務相關的規則。
getsebool -a | grep ftp <<<檢視與ftp服務相關的selinux設定
setsebool -P ftpd_full_access=on <<<<開啟ftp準入連接配接
vsftpd
目錄下檔案狀态如下所示
[[email protected] ~]# cd /etc/vsftpd/
[[email protected] vsftpd]# ll
總用量 24
-rw-r--r--. 1 root root 0 8月 12 16:19 banned_emails
-rw-------. 1 root root 144 8月 12 16:21 ftpusers
-rw-------. 1 root root 370 8月 12 15:17 user_list
-rw-r--r--. 1 root root 755 8月 12 16:37 vsftpd.conf
-rw-------. 1 root root 5081 8月 11 10:40 vsftpd.conf.backup
-rwxr--r--. 1 root root 348 4月 24 11:01 vsftpd_conf_migrate.sh
[[email protected] vsftpd]# cat ftpusers
# Users that are not allowed to login via ftp
#root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
#ftpsecure
#yang
[[email protected] vsftpd]# 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.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
yang
ftp
[[email protected] vsftpd]# cat vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
#chown_username=root
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
data_connection_timeout=120
#nopriv_user=root
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
#chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=NO
listen_ipv6=YES
allow_writeable_chroot=YES
pam_service_name=vsftpd
userlist_deny=NO
匿名模式總結
在匿名開放認證模式下,通路vsftpd服務程式的賬戶一律為:
anonymous
,密碼為
空
。當遇到
vsftpd: refusing to run with writable root inside chroot()
的出錯提示時,應該先把
/var/ftp
目錄的權限設定為
755
。
本地使用者模式
對比匿名開放模式,本地模式更安全,配置更簡單。
--------------------------------------------------本地使用者模式權限參數--------------------------------------------------------
參數 | 作用 |
---|---|
anonymous_enable=NO | 禁止匿名通路模式 |
local_enable=YES | 允許本地使用者模式 |
write_enable=YES | 設定可寫權限 |
local_umask=022 | 本地使用者模式建立檔案的umask值 |
userlist_enable=YES | 啟用禁止使用者名單,名單為ftpusers和user_list |
userlist_deny=YES | 開啟使用者作用名單檔案功能 |
配置vsftpd.conf檔案
檔案配置如下所示
#匿名開放模式
anonymous_enable=NO
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#本地使用者模式
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
#chown_username=root
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
data_connection_timeout=120
#nopriv_user=root
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=NO
listen_ipv6=YES
allow_writeable_chroot=YES
pam_service_name=vsftpd
在編輯好配置檔案之後,可能會出現缺少
chroot_list
檔案的提示而導緻登入失敗。此時使用
touch chroot_list
指令建立檔案即可。
- 無論配置何種服務,修改之後即應當重新開機該服務
- 重新開機服務之後,将服務加入開啟啟動項
systemctl enable 服務
- 如果登入不成功需要檢視
兩個檔案,看所使用的使用者是否與這兩個檔案相關。這兩個檔案的作用直接看注釋資訊即可ftpusers和user_list
- 如果登入不成功同樣需要檢視selinux中與
相關的規則是否開啟ftp
檢視結果
[[email protected] vsftpd]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 Welcome to blah FTP service.
Name (192.168.10.10:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
登入ftp伺服器賬号與密碼即為使用者登入伺服器的賬号與密碼。
虛拟使用者模式
虛拟使用者模式是三種模式中最安全的,但配置也相對複雜。
建立FTP認證的使用者資料庫檔案
[[email protected] ~]# cd /etc/vsftpd/
[[email protected] vsftpd]# ll
總用量 24
-rw-r--r--. 1 root root 0 8月 12 16:19 banned_emails
-rw-r--r--. 1 root root 0 8月 12 19:13 chroot_list
-rw-------. 1 root root 144 8月 12 19:11 ftpusers
-rw-------. 1 root root 370 8月 12 19:11 user_list
-rw-r--r--. 1 root root 812 8月 12 19:13 vsftpd.conf
-rw-------. 1 root root 5081 8月 11 10:40 vsftpd.conf.backup
-rwxr--r--. 1 root root 348 4月 24 11:01 vsftpd_conf_migrate.sh
[[email protected] vsftpd]# vim vuser.list
liyunlong 《《《《虛拟使用者1
zhaogang 《《《《虛拟使用者1密碼
eryingzhang 《《《《《虛拟使用者2
yidalipao 《《《《《虛拟使用者2密碼
hash加密資料庫檔案
原因: 明文資訊不安全,不符合vsftpd服務程式加載格式
步驟:
- 使用
指令用db_load
算法将原始明文資訊轉換成資料庫檔案hash
- 降低資料庫檔案權限(避免他人看到資料庫檔案内容)
- 删除原始明文資訊
[[email protected] vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[[email protected] vsftpd]# ll
總用量 40
-rw-r--r--. 1 root root 0 8月 12 16:19 banned_emails
-rw-r--r--. 1 root root 0 8月 12 19:13 chroot_list
-rw-------. 1 root root 144 8月 12 19:11 ftpusers
-rw-------. 1 root root 370 8月 12 19:11 user_list
-rw-r--r--. 1 root root 812 8月 12 19:13 vsftpd.conf
-rw-------. 1 root root 5081 8月 11 10:40 vsftpd.conf.backup
-rwxr--r--. 1 root root 348 4月 24 11:01 vsftpd_conf_migrate.sh
-rw-r--r--. 1 root root 12288 8月 12 19:42 vuser.db
-rw-r--r--. 1 root root 41 8月 12 19:35 vuser.list
[[email protected] vsftpd]# chmod 600 vuser.db
[[email protected] vsftpd]# rm -r vuser.list
rm:是否删除普通檔案 'vuser.list'?y
虛拟使用者映射
- 建立vsftpd服務程式用于存儲檔案的根目錄(虛拟使用者登入後所通路的位置)
- 将虛拟使用者映射到系統本地使用者
[[email protected] ~]# useradd -d /var/virdir -s /sbin/nologin ftpuser 《《《建立一個專用于使用ftp服務的使用者,同時建立一個ftp通路時的根目錄其所有者和所有組都屬于該使用者
[[email protected] ~]# cd /var
[[email protected] var]# ll
drwx------. 3 ftpuser ftpuser 78 8月 12 20:07 virdir
[[email protected] var]# chmod -Rf 755 virdir 《《《限制非管理者的操作權限
其中的目錄名稱可以自己取,使用者名稱可以自己取。
建立PAM檔案
建立支援虛拟使用者的PAM檔案。
PAM(可插拔認證子產品)
是一種認證機制,通過一些動态連結庫和統一的API把系統提供的服務和認證方式分開,使得系統管理者可以根據需求靈活調整服務程式的不同認證方式。
步驟:
- 建立一個用于虛拟使用者認證的PAM檔案
vsftpd.vu
- 檔案内的
參數為使用db=
指令生成的賬戶密碼資料庫檔案路徑,db_load
不寫資料庫檔案名字尾
[[email protected] ~]# cd /etc/pam.d/
[[email protected] pam.d]# vim vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
編輯vsftpd配置檔案
---------------------------------------------------------利用pam認證時使用的參數------------------------------------------
參數 | 作用 |
---|---|
guest_enable=YES | 開啟虛拟使用者模式 |
guest_username=使用者名 | 指定虛拟使用者賬戶 |
pam_service_name=pam檔案 | 指定pam檔案 |
allow_writeable_chroot=YES | 允許對禁锢的FTP根目錄執行寫入操作,而且不拒絕使用者的登入請求 |
配置資訊如下所示
#匿名開放模式
anonymous_enable=NO 《《《關閉匿名使用者模式
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#本地使用者模式
local_enable=NO 《《《《關閉本地使用者模式
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=NO
##虛拟使用者模式
guest_enable=YES
guest_username=ftpuser
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
#chown_username=root
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
data_connection_timeout=120
#nopriv_user=root
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=NO
listen_ipv6=YES
為虛拟使用者設定不同權限
針對不同使用者設定不同的權限以差別對待。例如允許建立
liyunlong
使用者上傳、建立、修改、檢視、删除檔案,對于建立的
eryingzhang
使用者隻允許其檢視檔案。
步驟:
- 建立一個新目錄夾
- 在目錄夾中建立以使用者名命名的檔案
- 在檔案中寫入相關的參數(使用匿名使用者的參數)
[[email protected] vsftpd]# mkdir user_rights
[[email protected] vsftpd]# cd user_rights
[[email protected] user_rights]# vim liyunlong
anon_upload_enable=YES 《《《允許該使用者上傳
anon_mkdir_write_enable=YES 《《允許該使用者修改
anon_other_write_enable=YES 《《《允許該使用者其他寫入操作
[[email protected] user_rights]# touch eryingzhang 《《不寫入權限,隻允許檢視
添加user_config_dir參數
修改
vsftpd.conf
檔案,添加參數
user_config_dir
定義使用者權限配置檔案所在路徑。
##虛拟使用者模式
guest_enable=YES
guest_username=ftpuser
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/user_rights
重新開機ftp服務,加入開啟自啟項
設定SElinux域允許政策
略,詳情見前兩種模式中的設定。
坑一
在完成以上設定後,還需将設定的虛拟使用者添加至
ftpusers和user_list
中,才可以實作登入。在設定虛拟使用者模式時,一定要把本地使用者模式打開,否則無法登入。
結果顯示
[[email protected] vsftpd]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 Welcome to blah FTP service.
Name (192.168.10.10:root): liyunlong
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.
[[email protected] vsftpd]# su yan
[[email protected] vsftpd]$ ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 Welcome to blah FTP service.
Name (192.168.10.10:yan): eryingzhang
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.