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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章