1. 程式人生 > >CentOS7搭建FTP(虛擬使用者)

CentOS7搭建FTP(虛擬使用者)

採用的是虛擬使用者和firewall防火牆

yum install -y vsftpd ftp
firewall-cmd --permanent --zone=public --add-port=20/tcp
firewall-cmd --permanent --zone=public --add-port=21/tcp
firewall-cmd --permanent --zone=public --add-port=22/tcp

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

#檢視selinux關於ftp的狀態
getsebool -a | grep ftp

結果大致如下:

setsebool -P tftp_home_dir 1
setsebool -P ftpd_full_access 1
#這個是SELinux的一些開關
#要把tftp_home_dir、ftpd_full_access開啟
#-P是永久生效,不加-P,則重啟後還原;1是開啟,0是關閉

然後新建一個ftp的宿主使用者(即存在Linux系統的使用者,不是虛擬使用者)

useradd -g root -M -d /var/www/html -s /sbin/nologin ftpuser
passwd ftpuser
#此處的ftpuser就是你的賬戶名
chown -R ftpuser.root /var/www/html #把 /var/www/html 的所有權給ftpuser.root #這裡的 /var/www/html 就是ftp的根目錄,沒有的話自行建立,也可以換成其他目錄

虛擬使用者的使用者認證是通過pam方式去認證的,pam檔案裡面指定了認證的db檔案,db檔案又是通過明文使用者名稱和密碼檔案生成而來。那麼首先我們要指定pam檔案,這個在 /etc/vsftpd/vsftpd.conf 配置檔案是通過 pam_service_name=vsftpd 配置指定的,其位置是 /etc/pam.d/vsftpd,編輯該檔案,把檔案內容全部註釋掉,加上以下兩行:
64位系統:

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

32位系統

auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

db=/etc/vsftpd/vuser_passwd 指定了db檔案的位置,接下來就是生成db檔案,由於db檔案是通過明文使用者名稱和密碼檔案生成而來,所以先建立一個儲存明文使用者名稱和密碼的檔案 vuser_passwd.txt
該檔案奇行為使用者名稱,偶行為密碼:

 vim /etc/vsftpd/vuser_passwd.txt

如下:


然後通過以下命令生成db檔案:

cd /etc/vsftpd
db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db

至此使用者的認證就知道怎麼一回事了。如果要新增新的使用者,在編輯 vuser_passwd.txt 後要再次生成一下db檔案。然後現在每個使用者的具體配置,如指向目錄、可讀寫許可權等又是在哪配置的呢,原來它是通過一個使用者對應一個配置檔案來實現的,且這個檔案必須用FTP使用者名稱去做檔名,建一個目錄專門存放這些檔案:

mkdir vuser_conf
vim vuser_conf/account1

檔案內容大致如下,注意每一行配置的最後不能有空白符

#設定虛擬使用者的目錄
local_root=/var/www/html
#設定虛擬使用者是否可以寫入
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
#允許虛擬使用者的上傳功能
anon_upload_enable=YES
#設定虛擬使用者是否可以建立資料夾
anon_mkdir_write_enable=YES
#設定虛擬使用者是否可以執行其他的寫入操作,比如刪除、重新命名、覆蓋操作。
anon_other_write_enable=YES
#最多允許同一賬號在10個不同的IP登入
max_per_ip=10
#最大下載速度(位元組/秒)
local_max_rate=2500000
#session超時時間
#idle_session_timeout=300
#連線超時時間
#data_connection_timeout=90
#最多連線數
#max_clients=10

最後配置vsftpd.conf,若下面某些欄位沒有在配置中找到,自行新增就好

cd /etc/vsftpd
vim vsftpd.conf

#修改一下幾處
#不允許匿名訪問
anonymous_enable=NO

#本地使用者可以訪問。注意:主要是為虛擬宿主使用者,如果該專案設定為NO那麼所有虛擬使用者將無法訪問
local_enable=YES

#可以進行寫操作
write_enable=YES

#禁止匿名使用者上傳
anon_upload_enable=NO

#禁止匿名使用者建立目錄
anon_mkdir_write_enable=NO

#支援ASCII模式的上傳和下載功能
ascii_upload_enable=YES
ascii_download_enable=YES

#限制使用者只能在FTP主目錄
#若沒有chroot_list檔案,自行建立,每一行為一個使用者名稱
chroot_local_user=NO
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list

#開啟ip4監聽
listen=YES

#關閉ip6監聽
listen_ipv6=NO

#PAM服務下Vsftpd的驗證配置檔名
pam_service_name=vsftpd

#指定vsftpd服務的執行帳戶,不指定時使用ftp
#這裡的ftpuser就是剛才useradd時建立的Linux系統使用者
nopriv_user=ftpuser

# 設定啟用虛擬使用者功能
guest_enable=YES
# 指定虛擬使用者的宿主使用者,CentOS中已經有內建的ftp使用者了
guest_username=ftpuser
# 虛擬使用者配置檔案存放的路徑
user_config_dir=/etc/vsftpd/vuser_conf
# 如果啟用了限定使用者在其主目錄下需要新增這個配置
allow_writeable_chroot=YES
# NO時,虛擬使用者和匿名使用者有相同的許可權,預設是NO
virtual_use_local_privs=YES

最後:
filezilla連線ftp時可能會出現讀取目錄超時的情況,解決方法如下

/etc/vsftpd/vsftpd.conf末尾新增上以下三句

#開啟pasv被動模式
pasv_enable=YES
pasv_min_port=6000
pasv_max_port=7000

#這個是用於檢測pasv的安全檢查,YES為關閉安全檢查
pasv_promiscuous=YES

#firewall防火牆開啟6000-7000埠
firewall-cmd --permanent --zone=public --add-port=6000-7000/tcp
firewall-cmd --reload

配置好後就可以開啟vsftpd服務

systemctl start vsftpd
#開機啟動
systemctl enable vsftpd

總結:

  1. ftp的根目錄在建立ftp宿主使用者時就指定好,在/etc/vsftpd/vuser_conf裡面的虛擬使用者配置中的local_root項要在根目錄裡面;
  2. 改變ftp的根目錄
    • usermod -d /xxx/xxx來切換
    • 同時/etc/vsftpd/vuser_conf裡面的虛擬使用者配置也要跟著換
    • 然後重啟vsftpd