簡介
vsftpd
(very secure FTP daemon)是 UNIX
操作系統中的一個開源的、免費的 FTP 服務軟件。它具有以下特點:
- 安全性高,輕小易用
- 支持系統用戶、匿名用戶和虛擬用戶的權限驗證和相關操作,但無論哪種用戶,最終都會映射爲一個對應的 系統用戶
- 用戶認證是基於
PAM
實現的
安裝
yum
安裝 vsftpd
,並開啓程序
# 安裝
[root@instance-36dg06w0 ~]# yum install vsftpd
# 開啓
[root@instance-36dg06w0 ~]# systemctl start vsftpd
配置詳解
vsftpd
的配置文件在爲 vsftpd.conf
,一般在 /etc/vsftpd/
目錄下。
屬性 | 屬性值 | 含義 |
---|---|---|
anonymous_enable | YES /NO |
是否允許匿名用戶(anonymous)登錄 FTP ,如果該設置被註釋,則默認允許 |
local_enable | YES /NO |
是否允許本地系統用戶登錄 |
write_enable | YES /NO |
是否開啓任何形式的 FTP 寫入命令,上傳文件 |
local_umask | xxx | 本地用戶的 umask 設置,如果註釋該設置則默認爲 077 ,但一般都設置成 022 |
anon_upload_enable | YES /NO |
是否允許匿名用戶上傳文件,如果要設置爲允許,則需要先開啓 write_enable ,否則無效,此外對應目錄還要具有寫權限 |
anon_mkdir_write_enable | YES /NO |
是否允許匿名用戶創建新目錄 |
dirmessage_enable | YES /NO |
當進入某個目錄時,發送信息提示給遠程用戶 |
xferlog_enable | YES /NO |
是否開啓 上傳/下載 的日誌記錄 |
connect_from_port_20 | YES /NO |
是否使用 20 端口來連接 FTP |
chown_uploads | YES /NO |
匿名上傳的文件是否由某一指定用戶 chown_username 所有 |
chown_username | 有效用戶名 | 匿名上傳的文件由該設定用戶所有 |
xferlog_file | 有效路徑 | 設置日誌文件的保存位置,默認爲 /var/log/xferlog |
xferlog_std_format | YES /NO |
是否使用標準的 ftpd xferlog 日誌格式,該格式日誌默認保存在 /var/log/xferlog |
idle_session_timeout | 數值 | 設置空閒連接的超時時間,單位 秒 |
data_connection_timeout | 數值 | 設置等待數據傳輸的最大時間,單位 秒(data_connection_timeout 與 idle_session_timeout 在同一時間只有一個有效) |
nopriv_user | 有效用戶名 | 指定一個非特權用戶,用於運行 vsftpd |
async_abor_enable | YES /NO |
是否支持異步 ABOR 請求 |
ascii_upload_enable | YES /NO |
是否開啓 ASCII 模式進行文件上傳,一般不開啓 |
ascii_download_enable | YES /NO |
是否開啓 ASCII 模式進行文件下載,一般不開啓 |
ftpd_banner | … | 自定義登錄標語 |
deny_email_enable | YES /NO |
如果匿名登錄,則會要求輸入 email 地址,如果不希望一些 email 地址具有登錄權限,則可以開啓此項,並在 banned_email_file 指定的文件中寫入對應的 email 地址 |
banned_email_file | 有效文件 | 當開啓 deny_email_enable 時,需要通過此項指定一個保存登錄無效 email 的文件 |
chroot_local_user | YES /NO |
是否將所有用戶限制在主目錄,當爲 NO 時, FTP 用戶可以切換到其他目錄 |
chroot_list_enable | YES /NO |
是否啓用限制用戶的名單列表 |
chroot_list_file | 有效文件 | 用戶列表,其作用與 chroot_local_user 和 chroot_local_user 的組合有關,詳見下表 |
allow_writeable_chroot | YES /NO |
是否允許用戶對 ftp 根目錄具有寫權限,如果設置成不允許而目錄實際上卻具備寫權限,則會報錯 |
ls_recurse_enable | YES /NO |
是否允許 ls -R 指令來遞歸查詢,遞歸查詢比較耗資源 |
listen | YES /NO |
如果爲 YES ,vsftpd 將以獨立模式運行並監聽 IPv4 的套接字,處理相關連接請求(該指令不能與 listen_ipv6 一起使用) |
listen_ipv6 | YES /NO |
是否允許監聽 IPv6 套接字 |
pam_service_name | … | 設置 PAM 外掛模塊提供的認證服務所使用的配置文件名 ,即 /etc/pam.d/vsftpd 文件,此文件中 file=/etc/vsftpd/ftpusers 字段,說明了 PAM 模塊能抵擋的帳號內容來自文件 /etc/vsftpd/ftpusers 中 |
userlist_enable | YES /NO |
是否啓用 user_list 文件來控制用戶登錄 |
userlist_deny | YES /NO |
是否拒絕 user_list 中的用戶登錄,此屬性設置需在 userlist_enable = YES 時纔有效 |
tcp_wrappers | YES /NO |
是否使用 tcp_wrappers 作爲主機訪問控制方式 |
max_clients | 數值 | 同一時間允許的最大連接數 |
max_per_ip | 數值 | 同一個IP客戶端連接的最大值 |
local_root | 有效目錄 | 系統用戶登錄後的根目錄 |
anon_root | 有效目錄 | 匿名用戶登錄後的根目錄 |
user_config_dir | 有效目錄 | 用戶單獨配置文件存放目錄,該目錄下用戶的文件名就是對應用戶名 |
chroot_local_user
和 chroot_local_user
組合功能如下:
chroot_local_user=YES | chroot_local_user=NO | |
---|---|---|
chroot_list_enable=YES | 1.所有用戶都被限制在其主目錄下 2.使用 chroot_list_file 指定的用戶列表 /etc/vsftpd/chroot_list ,這些用戶作爲“例外”,不受限制 |
1.所有用戶都不被限制其主目錄下 2.使用 chroot_list_file 指定的用戶列表 /etc/vsftpd/chroot_list ,這些用戶作爲“例外”,受到限制 |
chroot_list_enable=NO | 1.所有用戶都被限制在其主目錄下 2.不使用 chroot_list_file 指定的用戶列表 /etc/vsftpd/chroot_list ,沒有任何“例外”用戶 |
1.所有用戶都不被限制其主目錄下 2.不使用 chroot_list_file 指定的用戶列表 /etc/vsftpd/chroot_list ,沒有任何“例外”用戶 |
爲每個系統用戶配置各自的 ftp 根目錄
在 /etc/vsftpd/vsftpd.conf
文件末尾添加如下指令:
# 系統用戶登錄後的根目錄
local_root=/var/test/
# 匿名用戶登錄後的根目錄
anon_root=/var/test/
# 設置用戶獨立配置文件保存目錄
user_config_dir=/etc/vsftpd/userconfig/
此外,還要將 chroot_local_user
設置爲 YES
,使 FTP 用戶登錄後直接被鎖定在自己的根目錄上。
通過以上設定,系統用戶和匿名用戶都會將 /var/test/
當做根目錄,並且登錄後直接被鎖定在該目錄。
但是以上的設置是針對所有系統用戶和匿名用戶的,如果想要給每個 FTP 用戶指定根目錄,我們可以給每個用戶創建一個對應的配置文件。具體操作如下:
- 根據
user_config_dir
的設置,我們先在/etc/vsftpd/
目錄下創建一個名爲userconfig
的目錄 - 假設想要給用戶
aaa
單獨指定一個 FTP 根目錄/var/test/1
,我們需要進入userconfig
目錄,在該目錄下創建一個名爲aaa
的配置文件,編輯文件aaa
,配置內容如下:
local_root=/var/test1/