天天看點

CentOS8 vsftpd服務配置ftp簡介FTP配置實踐

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用戶端: 向用戶端發送連接配接請求,建立資料傳輸鍊路的主機

工作模式:

  1. 主動模式: FTP伺服器主動向用戶端發起連接配接請求
  2. 被動模式(預設工作模式): FTP伺服器等待用戶端發起連接配接請求

vsftpd服務程式

vsftpd作為更加安全的檔案傳輸服務程式。允許使用者以三種認證模式登入到FTP伺服器。

  1. 匿名開放模式: 一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登入到FTP伺服器。
  2. 本地使用者模式: 通過Linux系統本地賬戶密碼資訊進行認證的模式,比匿名開放模式更安全,配置更簡單那。但如果黑客破解了賬戶資訊,就就可以暢通無阻的登入FTP伺服器,控制整個伺服器。
  3. 虛拟使用者模式: 最安全的認證模式,需要為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

指令建立檔案即可。

  1. 無論配置何種服務,修改之後即應當重新開機該服務
  2. 重新開機服務之後,将服務加入開啟啟動項

    systemctl enable 服務

  3. 如果登入不成功需要檢視

    ftpusers和user_list

    兩個檔案,看所使用的使用者是否與這兩個檔案相關。這兩個檔案的作用直接看注釋資訊即可
  4. 如果登入不成功同樣需要檢視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服務程式加載格式

步驟:

  1. 使用

    db_load

    指令用

    hash

    算法将原始明文資訊轉換成資料庫檔案
  2. 降低資料庫檔案權限(避免他人看到資料庫檔案内容)
  3. 删除原始明文資訊
[[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
           

虛拟使用者映射

  1. 建立vsftpd服務程式用于存儲檔案的根目錄(虛拟使用者登入後所通路的位置)
  2. 将虛拟使用者映射到系統本地使用者
[[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把系統提供的服務和認證方式分開,使得系統管理者可以根據需求靈活調整服務程式的不同認證方式。

步驟:

  1. 建立一個用于虛拟使用者認證的PAM檔案

    vsftpd.vu

  2. 檔案内的

    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

使用者隻允許其檢視檔案。

步驟:

  1. 建立一個新目錄夾
  2. 在目錄夾中建立以使用者名命名的檔案
  3. 在檔案中寫入相關的參數(使用匿名使用者的參數)
[[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.
           

繼續閱讀