linux之FTP服務vsftpd和pure-ftpd常用配置

carol2014發表於2024-08-01

vsftpd

vsftpd介紹部分參考自 vsftpd 操作手冊 - 完整版 - HOsystem - 部落格園 (cnblogs.com)

vsftpd 認證模式

  • 匿名開放模式:是最不安全的一種認證模式,任何人都可以無須密碼驗證而直接登入到FTP伺服器。
  • 本地使用者模式:是透過Linux系統本地的賬戶密碼資訊進行認證的模式,相較於匿名開放模式更安全,而且配置起來也很簡單。但是如果駭客破解了賬戶的資訊,就可以暢通無阻地登入FTP伺服器,從而完全控制整臺伺服器。
  • 虛擬使用者模式:更安全的一種認證模式,它需要為FTP服務單獨建立使用者資料庫檔案,虛擬出用來進行密碼驗證的賬戶資訊,而這些賬戶資訊在伺服器系統中實際上是不存在的,僅供FTP服務程式進行認證使用。這樣,即使駭客破解了賬戶資訊也無法登入伺服器,從而有效降低了破壞範圍和影響。

配置檔案及目錄:

  • /etc/vsftpd/vsftpd.conf 核心配置檔案
  • /etc/vsftpd/ftpusers PAM 模組 (/etc/pam.d/vsftpd) 所指定的無法登入的使用者配置檔案,不受任何配製項的影響,總是有效,列表中的使用者不能訪問FTP
  • /etc/vsftpd/user_list 和核心配置檔案中userlist_enable 和 userlist_deny 兩個配置相關,userlist_enable=no時userlist_deny和user_list配置不生效,userlist_enable=yes userlist_deny=yes時user_list作為黑名單使用,user_list檔案中的使用者都被拒絕登入FTP;userlist_enable=yes userlist_deny=no時 user_list作為白名單使用,只有user_list檔案中的使用者都被允許登入FTP
  • /etc/vsftpd/chroot_list 限制某些使用者只能使用指定目錄
  • /etc/pam.d/vsftpd vsftpd 使用 PAM 模組時的相關配置檔案
  • /usr/sbin/vsftpd 執行程式目錄
  • /var/ftp/ 預設匿名者登入的根目錄

/etc/vsftpd/vsftpd.conf

  • 與伺服器環境較相關的設定值
引數設定值 預設值 作用
connect_from_port_20=YES|NO YES 指定FTP使用20埠進行資料傳輸
listen_port=21 21 設定FTP伺服器建立連線所監聽的埠
dirmessage_enable=YES|NO YES 如果啟動選項,第一次進入目錄時,若有.message這個檔案,則會出現此檔案的內容,通常這個檔案會放置歡迎話語,或是對該目錄的說明;
message_file=.message .message 設定目錄訊息檔案,可將要顯示的資訊寫入該檔案。預設值為.message
listen=YES|NO YES 設定vsftpd伺服器是否以standalone模式執行
pasv_enable=YES|NO YES 是否使用PASV工作模式(被動模式)
use_localtime=YES|NO NO vsftpd使用本機時間作為vsftpd時間;預設為顯示格林威治時間(GMT);
write_enable=YES|NO YES 允許登陸使用者有寫許可權;屬於全域性設定,預設值為YES。
connect_timeout=60 60 PORT 方式下建立資料連線的超時時間,單位為秒
accept_timeout=60 60 建立FTP連線的超時時間,單位為秒
data_connection_timeout=120 300 建立FTP資料連線的超時時間,單位為秒
idle_session_timeout=300 300 多長時間不對FTP伺服器進行任何操作,則斷開該FTP連線,單位為秒
max_clients=0 0 vsftpd允許的最大連線數,預設值為0,表示不受限制
max_per_ip=0 0 設定每個IP允許與FTP伺服器同時建立連線的數目,預設值為0,表示不受限制
pasv_min_port=0, pasv_max_port=0 pasv_min_port:0
pasv_max_port:0
在PASV工作模式下,資料連線可以使用的埠範圍的最小埠,0 表示任意埠;
在PASV工作模式下,資料連線可以使用的埠範圍的最大埠,0 表示任意埠;
ftpd_banner=文字說明 NULL 用來定義歡迎話語的字串,而ftpd_banner 則是字串的形式
banner_file=/path/file NULL 用來定義歡迎話語的字串,banner_file是檔案的形式
  • 與實體使用者較相關的設定值
引數設定值 預設值 作用
guest_enable=YES|NO NO 啟用虛擬使用者
guest_username=ftp ftp 用來對映虛擬使用者
local_enable=YES|NO YES 控制是否允許本地使用者登入,YES 為允許本地使用者登入,NO為不允許
local_max_rate=0 0 本地使用者使用的最大傳輸速度,單位為B/s,0 表示不限制速度
chroot_local_user=YES|NO NO 用於指定使用者列表檔案中的使用者是否允許切換到上級目錄
chroot_list_enable=YES|NO NO 設定是否啟用chroot_list_file配置項指定的使用者列表檔案
chroot_list_file=/etc/vsftpd.chroot_list 用於指定使用者列表檔案, 該檔案用於控制使用者可以切換到使用者家目錄的上級目錄
userlist_enable=YES|NO NO 是否啟用vsftpd.user_list檔案
userlist_deny=YES|NO YES 決定vsftpd.user_list檔案中的使用者是否能夠訪問FTP伺服器;
設定為YES,則vsftpd.user_list檔案中的使用者不允許訪問FTP;
若設定為NO,則只有vsftpd.user_list檔案中的使用者才能訪問FTP;
userlist_file=/etc/vsftpd/user_list NO 控制使用者訪問FTP的檔案,裡面寫著使用者名稱稱。一個使用者名稱稱一行
  • 與匿名使用者登入相關的設定值
引數設定值 預設值 作用
anonymous_enable=YES|NO YES 控制是否允許匿名使用者登入,YES 為允許匿名登入,NO 為不允許
anon_world_readable_only=YES|NO YES 如果設為YES,則允許匿名登入者下載可閱讀的檔案
anon_other_write_enable=YES|NO NO 允許匿名登入者擁有上傳或者建立目錄之外的許可權;如,刪除或者重新命名;
anon_upload_enable=NO,則匿名使用者不能上傳檔案,但可刪除或重新命名已經存在的檔案;
anon_mkdir_write_enable=NO,則匿名使用者不能上傳或者新建資料夾,但可以刪除或者重新命名已經存在的資料夾;
anon_mkdir_write_enable=YES|NO NO 允許匿名登入者有新增目錄的許可權,只有在write_enable=YES時,此項才有效;
匿名使用者必須要有對上層目錄的寫入權;
anon_upload_enable=YES|NO NO 允許匿名登入者有上傳檔案(非目錄)的許可權,只有在write_enable=YES時,此項才有效;
匿名使用者必須要有對上層目錄的寫入權;
deny_email_enable=YES|NO NO 啟動這項功能,則必須提供一個檔案/etc/vsftpd/banner_emails,內容為email address;
若是使用匿名登入,則會要求輸入email address;
若輸入的email address 在此檔案內,則不允許進入;
banned_email_file=/etc/vsftpd/banned_emails /etc/vsftpd.banned_emails 用來輸入email address,只有在deny_email_enable=YES時,才會使用到此檔案;
若是使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不允許進入;
no_anon_password=YES|NO NO 啟動這項功能,則使用匿名登入時,不會詢問密碼
anon_max_rate=0 0 設定匿名登入者使用的最大傳輸速度,單位為B/s,0 表示不限制速度
anon_umask=077 077 設定匿名登入者新增或上傳檔案時的umask 值
  • 與 vsftpd 系統安全相關的設定值
引數設定值 預設值 作用
ascii_download_enable=YES|NO NO 設定是否啟用ASCII 模式下載資料
ascii_upload_enable=YES|NO NO 設定是否啟用ASCII 模式上傳資料
one_process_model=YES|NO YES
tcp_wrappers=YES|NO YES 設定vsftpd是否與tcp wrapper相結合來進行主機的訪問控制;
啟用,則vsftpd會檢查/etc/hosts.allow/etc/hosts.deny 中的配置,來決定請求連線的主機,是否允許訪問該FTP伺服器;
xferlog_enable=YES|NO YES 是否啟用上傳/下載日誌記錄;
啟用,則上傳與下載的資訊將被完整紀錄在xferlog_file 所定義的檔案中;
xferlog_file=/var/log/xferlog /var/log/vsftpd.log 設定日誌檔名和路徑
xferlog_std_format=YES|NO NO 啟用,則日誌檔案將會寫成xferlog的標準格式,如同wu-ftpd 一般
dual_log_enable=YES|NO, vsftpd_log_file=/var/log/vsftpd.log /var/log/vsftpd.log 編寫vsftpd樣式日誌檔案的檔案的名稱;
僅當 設定了選項xferlog_enable並且未設定xferlog_std_format時, 才會寫入此日誌;
或,如果已設定選項dual_log_enable,則會寫入;
如果設定了 syslog_enable,則不會寫入此檔案,而是將輸出傳送到系統日誌;
nopriv_user=nobody vsftpd在完全沒有特權的情況下使用的使用者名稱;
這應該是專用使用者,而不是任何人
pam_service_name=vsftpd /etc/pam.d/vsftpd 設定PAM使用的名稱

pure-ftpd

配置項詳解

# 限制所有使用者在其主目錄中
ChrootEveryone yes

# 如果前一個指令被設定為了 "no",下面組的成員(GID)就不受主目錄的限制了。而其他的使用者還是
# 會被限制在自己的主目錄裡。如果你不想把任何使用者限制在自己的主目錄裡,只要註釋掉 ChrootEveryone
# 和 TrustedGID 就可以了。
# TrustedGID 100

# 相容ie等比較非正規化的ftp客戶端
BrokenClientsCompatibility no

# 伺服器總共允許同時連線的最大使用者數
MaxClientsNumber 50

# 做為守護(doemon)程序執行(Fork in background)
Daemonize yes

# 同一IP允許同時連線的使用者數(Maximum number of sim clients with the same IP address)
MaxClientsPerIP 8

# 如果你要記錄所有的客戶命令,設定這個指令為 "yes"
VerboseLog no

# 即使客戶端沒有傳送 '-a' 選項也列出隱藏檔案( dot-files )。
DisplayDotFiles yes

# 不允許認證使用者 - 僅作為一個公共的匿名FTP。
AnonymousOnly no

# 不允許匿名連線,僅允許認證使用者使用。
NoAnonymous yes

# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# 預設的功能( facility )是 "ftp"。 "none" 將禁止日誌。
SyslogFacility ftp

# 定製使用者登陸後的顯示資訊(Display fortune cookies)
# FortunesFile /usr/share/fortune/zippy

# 在日誌檔案中不解析主機名。日誌沒那麼詳細的話,就使用更少的頻寬。在一個訪問量很大
# 的站點中,設定這個指令為 "yes" ,如果你沒有一個能工作的DNS的話。
DontResolve yes

# 客戶端允許的最大的空閒時間(分鐘,預設15分鐘)
MaxIdleTime 15

# LDAP 配置檔案
# LDAPConfigFile /etc/pureftpd-ldap.conf

# MySQL 配置檔案
# MySQLConfigFile /etc/pureftpd-mysql.conf

# Postgres 配置檔案
# PGSQLConfigFile /etc/pureftpd-pgsql.conf

# PureDB 使用者資料庫
# PureDB /etc/pureftpd.pdb

# pure-authd 的socket 路徑
# ExtAuth /var/run/ftpd.sock

# 如果你要啟用 PAM 認證方式, 去掉下面行的註釋。
# PAMAuthentication yes

# 如果你要啟用 簡單的 Unix系統 認證方式(/etc/passwd), 去掉下面行的註釋。
# UnixAuthentication yes

# 請注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和
# UnixAuthentication 這些指令只能被使用一次,不過,他們能被混合在一起用。例如:如果你使用了
# MySQLConfigFile 和 UnixAuthentication,那麼 SQL 伺服器將被訪問。如果因為使用者名稱未找
# 到而使 SQL 認證失敗的話,就會在/etc/passwd 和 /etc/shadow 中嘗試另外一種認證,如果因
# 為密碼錯誤而使 SQL 認證失敗的話,認證就會在此結束了。認證方式由它們被給出來的順序而被鏈
# 接了起來。

# 'ls' 命令的遞迴限制。第一個引數給出檔案顯示的最大數目。第二個引數給出最大的子目錄深度。
LimitRecursion 2000 8

# 是否允許匿名使用者建立新目錄
AnonymousCanCreateDirs no

# 如果系統被 loaded 超過下面的值,匿名使用者會被禁止下載。
MaxLoad 4

# 被動連線響應的埠範圍- for firewalling.
# PassivePortRange 30000 50000

# 強制一個IP地址使用被動響應
# ForcePassiveIP 192.168.0.1

# 匿名使用者的上傳/下載的比率。
# AnonymousRatio 1 10

# 所有使用者的上傳/下載的比率。
# UserRatio 1 10

# 不接受所有者為 "ftp" 的檔案的下載。例如:那些匿名使用者上傳後未被本地管理員驗證的檔案。
AntiWarez yes


# 客戶端登入的時候的預設編碼,開啟這個選項的話,windows登入時就不會顯示不了中文的了
ClientCharset gbk

# 服務監聽的IP 地址和埠。(預設是所有IP地址和21埠)
# Bind 127.0.0.1,21

# 匿名使用者的最大頻寬(KB/s)。
# AnonymousBandwidth 8

# 所有使用者的最大頻寬(KB/s),包括匿名使用者。
# UserBandwidth 8

# 新建目錄及檔案的屬性掩碼值。<檔案掩碼>;:<目錄掩碼>; .
Umask 133:022

# 認證使用者允許登陸的最小組ID(UID) 。
MinUID 100

# 僅允許認證使用者進行 FXP 傳輸。
AllowUserFXP yes

# 對匿名使用者和非匿名使用者允許進行匿名 FXP 傳輸。
AllowAnonymousFXP no

# 使用者不能刪除和寫點檔案(檔名以 '.' 開頭的檔案),即使使用者是檔案的所有者也不行。
# 如果 TrustedGID 指令是 enabled ,檔案所屬組使用者能夠訪問點檔案(dot-files)。
ProhibitDotFilesWrite no

# 禁止讀點檔案(檔名以 '.' 開頭的檔案) (.history, .ssh...)
ProhibitDotFilesRead no

# 永不覆蓋檔案。當上傳的檔案,其檔名已經存在時,自動重新命名,如: file.1, file.2, file.3, ...
AutoRename no

# 不接受匿名使用者上傳新檔案( no = 允許上傳)
AnonymousCantUpload no

# 僅允許來自以下IP地址的非匿名使用者連線。你可以使用這個指令來開啟幾個公網IP來提供匿名FTP,
# 而保留一個私有的防火牆保護的IP來進行遠端管理。你還可以只允許一內網地址進行認證,而在另外
# 一個IP上提供純匿名的FTP服務。
#TrustedIP 10.1.1.1

# 如果你要為日誌每一行新增 PID 去掉下面行的註釋。
# LogPID yes

# 使用類似於Apache的格式建立一個額外的日誌檔案,如:
# fw.c9x.org - jedi [13/Dec/1975] "GET /ftp/linux.tar.bz2" 200 21809338
# 這個日誌檔案能被 www 流量分析器處理。
# AltLog clf:/var/log/pureftpd.log

# 使用最佳化過的格式為統計報告建立一個額外的日誌檔案。
# AltLog stats:/var/log/pureftpd.log

# 使用標準的W3C格式建立一個額外的日誌檔案。(與大部分的商業日誌分析器相容)
# AltLog w3c:/var/log/pureftpd.log

# 不接受 CHMOD 命令。使用者不能更改他們檔案的屬性。
# NoChmod yes

# 允許使用者恢復和上傳檔案,卻不允許刪除他們。
# KeepAllFiles yes

# 使用者主目錄不存在的話,自動建立。
# CreateHomeDir yes

# 啟用虛擬的磁碟限額。第一個數字是最大的檔案數。
# 第二個數字是最大的總的檔案大小(單位:Mb)。
# 所以,1000:10 就限制每一個使用者只能使用 1000 個檔案,共10Mb。
# Quota 1000:10

# 如果你的 pure-ftpd 編譯時加入了獨立伺服器( standalone )支援,你能夠改變 pid 檔案
# 的位置。預設位置是 /var/run/pure-ftpd.pid 。
# PIDFile /var/run/pure-ftpd.pid

# 如果你的 pure-ftpd 編譯時加入了 pure-uploadscript 支援,這個指令將會使 pure-ftpd
# 傳送關於新上傳的情況資訊到 /var/run/pure-ftpd.upload.pipe,這樣 pure-uploadscript
# 就能讀然後呼叫一個指令碼去處理新的上傳。
# CallUploadScript yes

# 這個選項對允許匿名上傳的伺服器是有用的。當 /var/ftp 在 /var 裡時,需要保留一定磁碟空間
# 來保護日誌檔案。當所在磁碟分割槽使用超過百分之 X 時,將不在接受新的上傳。
MaxDiskUsage 99

# 如果你不想要你的使用者重新命名檔案的話,就設定為 'yes' 。
# NoRename yes

# 是 'customer proof' : 工作區(workaround)反對普通的客戶錯誤,類似於:'chmod 0 public_html' 的錯誤。
# 那是一個有效的命令,不過,將導致無知的客戶所定他們自己的檔案,將使你的技術支援忙於愚蠢的的問題中。
# 如果你確信你所有的使用者都有基本的Unix知識的話,這個特性將沒什麼用了。不過,如果你是一個主機提供商
# 的話,啟用它。
CustomerProof yes

# 每一個使用者的併發限制。只有在新增了 --with-peruserlimits 編譯選項進行編譯後,這個指令才起
# 作用。(大部分的二進位制的釋出版本就是例子)
# 格式是 : <每一個使用者最大允許的程序>;:<最大的匿名使用者程序>;
# 例如: 3:20 意思是同一個認證使用者最大可以有3個同時活動的程序。而且同時最多隻能有20個匿名使用者程序。
# PerUserLimits 3:20

pure-ftpd常用命令

# 建立虛擬使用者

pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe
-u 將虛擬使用者 joe 同系統使用者 ftpuser 關聯在一起
-d 引數使 joe 只能訪問其 home 目錄

# 更改一個使用者

pure-pw usermod username

# 刪除一個使用者

pure-pw userdel username

# 改變使用者口令

pure-pw passwd username

# 顯示使用者資訊

pure-pw show username

# 提交更改,重新整理資料庫

pure-pw mkdb

# 檢視使用者列表:

pure-pw list

相關文章