標籤:
原文網址:https://wiki.archlinux.org/index.php/Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
vsftpd (Very Secure FTP Daemon) 是一個為UNIX類系統開發的輕量,穩定和安全的FTP伺服器端.
Contents [hide]
- 1 安裝
- 2 配置
- 2.1 允許上傳
- 2.2 本機使用者登入
- 2.3 匿名使用者登入
- 2.4 Chroot限制
- 2.5 限制使用者登入
- 2.6 限制串連數
- 2.7 使用xinetd
- 3 小技巧
- 4 問題解決
- 4.1 vsftpd: refusing to run with writable root inside chroot()
- 5 更多資源
安裝
Vsftpd包含在官方軟體庫中, 可以通過pacman輕鬆安裝
# pacman -S vsftpd
修改 /etc/hosts.allow 可以限制vsftp的允許串連:
# 允許所有串連vsftpd: ALL# 只允許固定IP範圍使用者登入vsftpd: 10.0.0.0/255.255.255.0
伺服器可以通過如下指令碼啟動:
# systemctl start vsftpd.service
讓vsftpd隨系統自動啟動:
# systemctl enable vsftpd.service
配置
vsftpd的大多數配置都可以通過編輯/etc/vsftpd.conf檔案實現. 這個檔案自身有大量注釋說明, 所以這一章節只就一些重要的配置予以說明. 如果要瞭解所有的選頂和文檔, 請使用man vsftpd.conf (5).
允許上傳
必需將/etc/vsftpd.conf中的write_enable值設為YES, 以便允許修改系統, 比如上傳:
write_enable=YES
本機使用者登入
可以修改/etc/vsftpd.conf中的如下值, 以便允許/etc/passwd中的使用者登入:
local_enable=YES
匿名使用者登入
/etc/vsftpd.conf如下行控制著匿名使用者登入:
anonymous_enable=YES # 允許匿名使用者登入no_anon_password=YES # 匿名使用者登入不再要求輸入密碼anon_max_rate=30000 # 每個匿名使用者最大下載速度(單位:位元組每秒)
Chroot限制
為了阻止使用者離開家目錄, 可以設定chroot環境. 在/etc/vsftpd.conf添加如下行實現:
chroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list
chroot_list_file 定義了可通過chroot限制的使用者列表.
如果要設定更嚴格的chroot環境, 可以按如下方式設定:
chroot_local_user=YES
預設為所有使用者啟用chroot環境, 此時chroot_list_file 定義了不使用chroot的使用者列表.
限制使用者登入
在/etc/vsftpd.conf添加如下二行:
userlist_enable=YESuserlist_file=/etc/vsftpd.user_list
userlist_file 列出了不允許登入的使用者.
如果你只想要允許特定的使用者登入, 添加這一行:
userlist_deny=NO
此時userlist_file 列出的就是允許登入的使用者.
限制串連數
可以為本機使用者設定資料轉送數率, 最大用戶端數以及每個IP的串連數目, 在/etc/vsftpd.conf添加如下行:
local_max_rate=1000000 # 最大資料轉送速率(單位:位元組每秒)max_clients=50 # 同時線上的最大用戶端數目max_per_ip=2 # 每個IP允許的串連數
使用xinetd
如果要啟用xinetd引導vsftpd,建立/etc/xinetd.d/vsftpd檔案, 並加入如下內容:
service ftp{ socket_type = stream wait = no user = root server = /usr/sbin/vsftpd log_on_success += HOST DURATION log_on_failure += HOST disable = no}
並啟用/etc/vsftpd.conf中的如下選頂:
pam_service_name=ftp
最後, 把xinetd加入/etc/rc.conf精靈列表, 此時不再需要再添加vsftpd,因為它將由xinetd調用:
如果串連伺服器時獲得如下錯誤資訊:
500 OOPS: cap_set_proc
你需要在/etc/rc.conf的 MODULES= 一行添加capability
升級到2.1.0版本後, 串連伺服器時可能會出現如下錯誤:
500 OOPS: could not bind listening IPv4 socket
在先前的版本中, 將下述行注釋掉就足夠了:
# Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd# listen=YES
但在新版本以及未來的版本中, 必須顯示的指定精靈啟動方式:
# Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetdlisten=NO
小技巧虛擬使用者的PAM認證
使用虛擬使用者的最大好處是不需要在系統中建立太多的真實使用者, 將整個環境限制在某個固定容器中可以提供更高的安全性.
一個虛擬使用者資料庫可以通過如下的簡單文本開始建立:
user1password1user2password2
它包含了想啟用的所有虛擬使用者. 將其儲存為logins.txt; 這個檔案名稱並沒有什麼特別的含義. 下一步需要伯克利資料工具, 它被包含在arch的核心系統中. 執行如下命令產生資料庫:
# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
強列建議把vsftpd_login.db檔案賦予更嚴格的許可權:
# chmod 600 /etc/vsftpd_login.db
警告: 在明文中列出密碼是不安全的. 不要忘記刪除臨時檔案,
rm logins.txt.
令PAM使用vsftpd_login.db資料庫.在/etc/pam.d/中建立檔案ftp,並加入如下內容:
auth required pam_userdb.so db=/etc/vsftpd_login crypt=hash account required pam_userdb.so db=/etc/vsftpd_login crypt=hash
注意: /etc/vsftpd_login不包啟.db尾碼名
現在要為虛擬使用者建立家目錄,在這個例子中即為/srv/ftp. 首先建立一個真實使用者virtual, 並將/srv/ftp設為它的家目錄:
# useradd -d /srv/ftp virtual# chown virtual:virtual /srv/ftp
修改/etc/vsftpd.conf, 並加入如下行. 它將所有的虛擬使用者都映射為virtual, 並將之都限制在/srv/ftp中:
anonymous_enable=NOlocal_enable=YESchroot_local_user=YESguest_enable=YESguest_username=virtualvirtual_use_local_privs=YES
如果通過xinetd方法啟動vsftpd服務.現在將只允許資料庫中列出的使用者登入.
為虛擬使用者建立私人目錄
首先建立檔案夾,並把所有者設為virtual使用者
# mkdir /srv/ftp/user1# mkdir /srv/ftp/user2# chown virtual:virtual /srv/ftp/user?/
隨後, 在/etc/vsftpd.conf增加如下行:
local_root=/srv/ftp/$USERuser_sub_token=$USER
問題解決vsftpd: refusing to run with writable root inside chroot()
為了避免一個安全性漏洞,從 vsftpd 2.3.5 開始,chroot 目錄必須不可寫。使用命令:
# chmod a-w /home/user
對於虛擬使用者,使用命令:
# chmod a-w /srv/ftp/user1
【轉】ubuntu安裝ftp伺服器