vsftpd部署(centos7.9)

流年盛夏發表於2024-09-21

說明:
– vsftpd的版本:vsftpd-3.0.2-29.el7_9.x86_64
– ftp根目錄:/var/www
– ftp 配置檔案目錄:/etc/vsftpd
– ftp 虛擬使用者許可權配置檔案目錄:/etc/vsftpd/user_conf

實現目標:
– 匿名使用者可以登入,但是不能訪問虛擬使用者的宿主目錄,只能訪問共享目錄
– 虛擬使用者對自己的宿主目錄有任何許可權,且只能在自己宿主目錄中操作

搭建過程
1. 安裝vsftpd,ftp和libdb-utils(需要安裝db包,用來加密虛擬使用者的賬號資訊,centos7已經安裝好了)

#阿里雲伺服器預設安裝,此處可忽略
[root@CentOS ~]# yum install -y vsftpd ftp
  1. 建立本地使用者(用於對映虛擬使用者)
# 建立ftp使用者目錄
[root@CentOS ~]# mkdir -p /var/www/test.com
# 建立使用者
[root@CentOS ~]# useradd -d /var/www/ vsftp -s /sbin/nologin
# 更改許可權和主組許可權
[root@CentOS ~]# chmod 755 /var/www/
[root@CentOS ~]# chown vsftp.vsftp /var/www/  -R
  1. 修改配置檔案
[root@CentOS ~]# cd /etc/vsftpd
[root@CentOS ~]# mv vsftpd.conf vsftpd.conf.bak
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf
# 不允許匿名使用者訪問
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
#修改ftp預設埠(涉及等保和網路安全檢查會掃描預設的21埠,所以修改埠號)
listen_port=1802
# 限制pasv的開啟埠範圍(不開這個ftp客戶端連不上)
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10010
# 修改ftp預設目錄
chroot_local_user=YES
local_root=/var/www/test.com
anon_root=/var/www/test.com
anon_umask=022
# pam認證檔案,注意下列值要跟第5步檔名一致
pam_service_name=vsftpd
#虛擬使用者許可權配置目錄
user_config_dir=/etc/vsftpd/user_conf
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
one_process_model=NO
#開啟虛擬使用者
guest_enable=YES
guest_username=vsftp
  1. 建立儲存虛擬使用者的檔案
[root@CentOS ~]# mkdir /etc/vsftpd/user_conf/
[root@CentOS ~]# cd /etc/vsftpd/user_conf
[root@CentOS ~]# vim xxx
# 設定登入後禁錮的目錄
local_root=/var/www/test.com
# 開放寫許可權
write_enable=yes
# 開放下載許可權
anon_world_readable_only=no
# 開放上傳許可權
anon_upload_enable=yes
# 開放建立目錄的許可權
anon_mkdir_write_enable=yes
# 開放刪除和重新命名的許可權
anon_other_write_enable=yes
  1. 生成資料庫檔案並建立PAM認證檔案
[root@CentOS ~]# cd /etc/vsftpd/
[root@CentOS ~]# vim virtusers
xxx
gF9@@rH1%hxxyyyyyxxxxxxxxx22;8~
[root@CentOS ~]# db_load -T -t hash -f virtusers virtusers.db
[root@CentOS ~]# chmod 600 virtusers.db
[root@CentOS ~]# cd /etc/pam.d/
[root@CentOS ~]# mv vsftpd vsftpd.bak
[root@CentOS ~]# vim /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
  1. 啟動vsftpd服務
[root@CentOS ~]# systemctl start vsftpd
[root@CentOS ~]# systemctl enable vsftpd
  1. 更改虛擬使用者目錄許可權
[root@CentOS ~]# mkdir /var/ftp/admin && chmod 700 /var/ftp/admin
[root@CentOS ~]# mkdir /var/ftp/user && chmod 700 /var/ftp/user
[root@CentOS ~]# chown -R vsftp.root  /var/ftp
  1. 測試訪問
[root@CentOS ~]# ftp 127.0.0.1
 Connected to 127.0.0.1 (127.0.0.1).
 220 (vsFTPd 3.0.2)
 Name (127.0.0.1:root): xxx
 331 Please specify the password.
 Password:
 230 Login successful.
 Remote system type is UNIX.
 Using binary mode to transfer files.
 ftp> exit
 221 Goodbye.
  1. 新增新使用者(不需要重啟vsftpd服務)
[root@CentOS ~]# vim /etc/vsftpd/vuser_list
admin
123456
user
123456
test
123456
#建立test使用者對應的目錄並授權
[root@CentOS ~]# mkdir /var/ftp/test && chown vsftp:root /var/www/test
#重新生成加密的db檔案
[root@CentOS ~]# cd /etc/vsftpd
[root@CentOS ~]# db_load -T -t hash -f vuser_list vuser_list.db
# 刪除使用者就是把新增使用者的操作撤銷,然後刪除加密的db檔案重新生成即可。
# 測試訪問,此時新增的test使用者的/var/ftp/test目錄的許可權是755,匿名使用者可以登入。若要遮蔽,修改許可權為700即可。
  1. 問題處理

– 報錯1:226 Transfer done (but failed to open directory)
解決:關閉selinux和防火牆
– 報錯2:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解決:配置檔案中加入 allow_writeable_chroot=YES 針對標準vsftpd(standonly)模式,然後重啟ftp。

  1. vsftp上傳檔案許可權問題
    file_open_mode上傳檔案的許可權,與chmod 所使用的數值相同。如果希望上傳的檔案可以執行,設此值為0777。
    預設情況下vsftp上傳之後檔案的許可權是600,目錄許可權是700

* local_umask=xxx這是指定本地使用者上傳後的檔案許可權設定
* anon_umask=xxx這是指定虛擬使用者上傳後的檔案許可權設定
* umask是unix作業系統的概念,umask決定目錄和檔案被建立時得到的初始許可權
* umask = 022時,新建的目錄 許可權是755,檔案的許可權是 644
* umask = 077時,新建的目錄 許可權是700,檔案的許可權時 600

  1. 部署雲伺服器上,安全組放開1802還是連線失敗
    按照配置檔案中設定被動埠範圍,放開安全組

  2. 使用FileZilla連線報超時
    修改配置

相關文章