1. 程式人生 > >vsftpd 安裝以及配置虛擬使用者上傳下載

vsftpd 安裝以及配置虛擬使用者上傳下載

新增的檔案以及資料夾(不需要執行,下面用到的時候會建立)

touch /home/login_user.txt #存放虛擬使用者名稱和密碼(單行使用者名稱,雙行密碼)
/etc/vsftpd/login_user.db #虛擬庫(認證)檔案
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_back #備份
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_back #備份
mkdir /etc/vsftpd/vsftpd_user_conf #虛擬使用者配置檔案目錄
touch /etc/vsftpd/vsftpd_user_conf/jin01 #虛擬使用者配置檔案

1、安裝

yum install -y vsftpd       #vsftpd安裝程式,配置檔案預設在 /etc/vsftpd
yum install -y pam* db4*    #vsftpd虛擬登陸賬戶必要依賴包

2、建立虛擬使用者

1)建立使用者名稱和密碼

vi /home/login_user.txt     #編輯
jin01                       #單行:使用者名稱
123456                      #雙行:密碼
:wq                         #退出儲存

2)生成虛擬庫(認證)檔案

執行下面命令生成虛擬庫(認證)檔案

db_load -T -t hash -f /home/login_user.txt /etc/vsftpd/login_user.db

虛擬庫(認證)檔案只對 root 使用者可讀寫

chmod 600 /etc/vsftpd/login_user.db

擴充套件

-rw------- (600)     #只有擁有者有讀寫許可權。
-rw-r--r-- (644)     #只有擁有者有讀寫許可權;而屬組使用者和其他使用者只有讀許可權。
-rwx------ (700)     #只有擁有者有讀、寫、執行許可權。
-rwxr-xr-x (755)     #擁有者有讀、寫、執行許可權;而屬組使用者和其他使用者只有讀、執行許可權。
-rwx--x--x (711) #擁有者有讀、寫、執行許可權;而屬組使用者和其他使用者只有執行許可權。 -rw-rw-rw- (666) #所有使用者都有檔案讀、寫許可權。 -rwxrwxrwx (777) #所有使用者都有讀、寫、執行許可權。

3)配置 PAM 檔案

先備份 vsftpd,再修改 vsftpd

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_back    #備份
vi /etc/pam.d/vsftpd                           #編輯

在檔案 vsftpd 最上面增加下面內容

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

4)增加系統使用者,來對應所有虛擬使用者,虛擬使用者使用系統使用者來訪問ftp伺服器

系統使用者 ftpuser ,登入目錄 /home/ftpuser ,禁止登入

useradd ftpuser -d /home/ftpuser -s /bin/false
chown ftpuser:ftpuser /home/ftpuser

5)修改配置檔案 vsftpd.conf ,使虛擬使用者可以訪問 vsftpd 伺服器

先備份,後修改

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_back      #備份
vi /etc/vsftpd/vsftpd.conf                                   #修改

增加下面配置

#使用PAM驗證
pam_service_name=vsftpd
#啟用虛擬使用者,啟用虛擬賬戶
guest_enable=YES
#把虛擬賬戶繫結為系統賬戶ftpuser
guest_username=ftpuser
#虛擬使用者配置檔案目錄
user_config_dir=/etc/vsftpd/vsftpd_user_conf

6)配置虛擬使用者配置檔案

建立 vsftpd_user_conf 配置檔案目錄

mkdir /etc/vsftpd/vsftpd_user_conf

設定虛擬使用者配置檔案,與虛擬賬戶同名,上面的 2.1

vi /etc/vsftpd/vsftpd_user_conf/jin01

配置 jin01 檔案,增加下面配置

#瀏覽FTP目錄和下載
anon_world_readable_only=NO
#允許上傳
anon_upload_enable=YES
#允許建立和刪除目錄
anon_mkdir_write_enable=YES
#允許改名和刪除檔案
anon_other_write_enable=YES
#指定虛擬使用者在系統使用者下面的路徑,限制虛擬使用者的家目錄,虛擬使用者登入後的主目錄。
local_root=/home/ftpuser

3、啟動 vsftpd 或重啟 vsftpd

systemctl start vsftpd           #啟動
systemctl restart vsftpd         #重啟

4、解決登入異常

  • 暫時不用
setsebool -P tftp_home_dir 1
  • 執行下面命令解決 500 OOPS: cannot change directory:/home/ftpuser 異常
setsebool -P ftpd_full_access 1

注意:在 centos7 已經沒有 ftp_home_dir,使用 tftp_home_dir 替代了

  • 在配置檔案 /etc/vsftpd/vsftpd.conf 中增加下面配置,解決 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 異常
allow_writeable_chroot=YES
  • 登入看不到目錄問題
    確保 在配置檔案 vsftpd.conf 中有
#隨機埠
pasv_min_port=30000
pasv_max_port=30100

再開啟埠,執行下面命令

# 開放埠,永久
firewall-cmd --zone=public --add-port=30000-30100/tcp --permanent
# 過載配置檔案
firewall-cmd --reload
# 重啟firewalld服務
systemctl restart firewalld

5、vsftpd.conf 檔案配置說明(可以直接複製使用)

#不允許匿名登入(預設YES)
anonymous_enable=NO

#允許本地登入,可以確保任何非匿名使用者可以登入工作,包括虛擬使用者(預設NO)
local_enable=YES

#啟用任何形式 FTP 寫入命令(預設NO)
write_enable=YES

#本地使用者建立檔案的預設許可權(預設077)
local_umask=022

#匿名使用者在特定環境下允許上傳檔案。為了讓它生效,選項write_enable必須啟用(write_enable是前提),
#匿名ftp使用者必須要求上傳位置的寫的許可權。這個設定也要求虛擬使用者具有上傳功能,
#在預設情況,虛擬使用者被當做匿名使用者對待(最大限制)許可權。(預設NO)
#When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
anon_upload_enable=YES

#匿名 FTP 使用者能夠建立新目錄(預設NO)
anon_mkdir_write_enable=YES

#FTP 使用者但第一次進入一個新的目錄將會展示訊息。在預設情況下,目錄掃描.message檔案。但是可以通過message_file重寫檔案的路徑(預設NO)
dirmessage_enable=YES

#錄上傳下載日誌,預設放置到/var/log/vsftpd.log。通過設定屬性 vsftp_log_file 重寫(預設NO)
xferlog_enable=YES

#確保 PORT 傳輸連線來自埠20(預設NO)
connect_from_port_20=YES

#可以安排上傳的匿名檔案由其他使用者擁有,chown_username進行設定(預設NO)
#chown_uploads=YES
#chown_username=whoever

#日誌檔案位置,可以覆蓋
#xferlog_file=/var/log/xferlog

#傳輸日誌檔案的寫的格式是標準的xferlog格式(預設NO)
xferlog_std_format=YES

#超時設定,客戶端兩個命令之間的最大時間(預設300秒)
#idle_session_timeout=600

#資料傳輸過程中暫停/延遲最長時間超時(預設300秒)
#data_connection_timeout=120

#定義一個唯一的使用者,ftp伺服器可以將其用作完全隔離且無特權的使用者
#nopriv_user=ftpsecure

#伺服器將識別非同步ABOR請求。不推薦用於安全性(程式碼非常重要)。但是,不啟用它可能會混淆較舊的FTP客戶端(預設NO)
#async_abor_enable=YES

#ASCII模式資料傳輸資料上傳(預設NO)
#ascii_upload_enable=YES
#ASCII模式資料傳輸資料下載(預設NO)
#ascii_download_enable=YES

#可自定義登入歡迎語
#ftpd_banner=Welcome to blah FTP service.

#指定不允許的匿名電子郵件地址的檔案。顯然對於打擊某些DoS攻擊非常有用(預設NO)
#deny_email_enable=YES
#可自定義匿名電子郵件地址
#banned_email_file=/etc/vsftpd/banned_emails

#登入之後本地使用者(預設)會被限制到其根目錄下(預設NO)
chroot_local_user=YES
#提供一個本地使用者列表,然後改變他們根目錄的位置(登入進來的時候的目錄)(預設NO)
#chroot_list_enable=YES
#可自定義本地使用者列表位置
#chroot_list_file=/etc/vsftpd/chroot_list

#允許使用者使用"ls -R"命令,這個有個很小的風險。因為一個ls -R如果是在大型站點將會消耗大量資源(預設NO)
#ls_recurse_enable=YES

#vsftpd將以獨立模式執行並偵聽IPv4套接字,與 listen_ipv6 互斥(預設YES)
listen=NO

#監聽IPv6套接字,與 listen 互斥(預設NO)
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

#本地使用者登入目錄
local_root=/home
#匿名使用者登入目錄
anon_root=/home/ftpuser
#解決異常 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
#開啟虛擬使用者
guest_enable=YES
#虛擬使用者對映本地使用者
guest_username=ftpuser
#虛擬賬戶配置位置
user_config_dir=/etc/vsftpd/vsftpd_user_conf
#隨機埠
pasv_min_port=30000
pasv_max_port=30100
#與本地時間一致
use_localtime=YES

6、擴充套件之 SELinux

SELinux(Security-Enhanced Linux) 是美國國家安全域性(NSA)對於強制訪問控制的實現,是 Linux歷史上最傑出的新安全子系統

檔案位置:/etc/sysconfig/selinux
相關命令:

查詢 ftp 相關設定資訊(centos7)

getsebool -a | grep ftp

下面註釋僅供參考

#關閉這個布林變數會阻止 vsftpd 讀取 public_content_rw_t 型別的檔案和目錄。如果允許使用者通過 FTP 上傳檔案。必須開放這個布林變數。
allow_ftpd_anon_write
#當開放這個布林變數時只有Linux(DAC)的許可權來控制訪問,通過驗證的使用者可以讀取和寫入標記為 public_content_t 或 public_content_rw_t 型別的檔案。
allow_ftpd_full_access
#當開放這個布林變數時vsftpd 允許 cifs_t 型別的檔案和目錄,因此這個布林變數啟用,可以讓你的 FTP 伺服器可以使用 Samba 檔案系統。
allow_ftpd_use_cif
#當開放這個布林變數時 vsftpd 允許 nfs_t 型別的檔案和目錄,因此這個布林變數啟用,可以讓你的 FTP 伺服器可以使用 NFS 檔案系統。
allow_ftpd_use_nfsvsftpd
#當開放這個布林變數時認證使用者可以讀寫自己的主目錄中的檔案。
ftp_home_dir
#當開放這個布林變數時允許vsftpd 連線資料庫。
ftpd_connect_db
#當開放這個布林變數時容許的 httpd 作為 FTP 伺服器,並且監聽 FTP 埠。
httpd_enable_ftp_server
#當開放這個布林變數時允許TFTP 訪問一個公共的目錄
tftp_anon_write