以下是在 Ubunto 16.04 LTS 安裝 vsftpd 並設定虛擬帳號的步驟
安裝 vsftpd
$ sudo apt-get update $ sudo apt-get install vsftpd
編輯設定檔
$ sudo vim /etc/vsftpd.conf
以下設定僅供參考,可依實際使用情形調整(詳細設定及說明可查看 man vsftpd.conf
)
# 設定為 YES 表示 vsftpd 是以 standalone 的方式來啟動
# 註:listen_ipv6 預設接受 IPv6 及 IPv4 連線,因此設定 listen_ipv6 為 YES 即可
listen=NO
listen_ipv6=YES
# 是否允許匿名者登入
anonymous_enable=NO
# 是否以實體用戶的方式登入 vsftpd 伺服器
# 註:使用虛擬帳號時需要一個實體帳號
local_enable=YES
# 是否允許使用者上傳資料
write_enable=YES
# 建立新目錄與檔案的權限預設值
local_umask=022
# 若目錄下有 .message 檔案時,當使用者進入此目錄是否顯示該檔案的內容
dirmessage_enable=YES
# 是否使用本機時間
use_localtime=YES
# 是否將使用者上傳與下載檔案記錄起來
xferlog_enable=YES
# 是否支援主動式連線功能
connect_from_port_20=YES
# 使用者在指定秒數內都沒有命令動作時,是否強制離線
idle_session_timeout=600
# 是否將使用者限制在自己的家目錄之內
chroot_local_user=YES
# 用於 chroot 的空目錄路徑,此目錄不應被 ftp 使用者寫入
secure_chroot_dir=/var/run/vsftpd/empty
# pam 模組的名稱
pam_service_name=vsftpd
# RSA 加密的憑證檔案所在位置
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# RSA 加密的私鑰檔案所在位置
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# 是否啟動 SSL 支援
ssl_enable=NO
# 是否標示 vsftpd 使用 UTF-8 檔案系統
utf8_filesystem=YES
# 是否將目錄中的所有使用者和群組資訊顯示為 "ftp"
hide_ids=YES
# 限制同一時間可以同時連上 vsftpd 的用戶端數量
max_clients=50
# 限制同一時間同一個 IP 的最大連線數量
max_per_ip=5
# 是否支援被動式連線模式
pasv_enable=YES
# 設定被動式連線模式可用的連接埠範圍
pasv_min_port=65400
pasv_max_port=65410
# 指定某個純文字檔作為使用者登入 vsftpd 伺服器時所顯示的歡迎訊息
banner_file=/etc/vsftpd/banner_file
# 是否同時產生 wu-ftpd 格式及 vsftpd 自有格式的記錄檔
dual_log_enable=YES
# vsftpd 格式記錄檔的所在位置
vsftpd_log_file=/var/log/vsftpd.log
# 是否支援 TCP Wrappers 的防火牆機制
tcp_wrappers=YES
# 這個選項允許根據各別用戶來覆蓋本設定檔中指定的任何設定
user_config_dir=/etc/vsftpd/user_conf
# 虛擬帳號是否將使用與本機用戶相同的權限
virtual_use_local_privs=YES
# 基於模板為每個虛擬帳號自動產生主目錄
user_sub_token=$USER
# 設定用戶家目錄
local_root=/var/ftp/$USER
# 是否允許用戶根目錄有寫入權限
allow_writeable_chroot=YES
# 若這個值設定為 YES 時,那麼任何實體帳號,均會被視為 guest
guest_enable=YES
# 指定訪客身份
guest_username=vsftpd
設定虛擬帳號前仍須先建立一個實體帳號,虛擬帳號皆會使用此帳號登入
$ sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
設定虛擬帳號
由於要使用非實體帳號來登入,需另外建立帳號及密碼資料提供 vsftpd 作認證
$ sudo vim /etc/vsftpd/virtual-user
建立帳密文件,格式為一行帳號、一行密碼
user1
user1_password
user2
user2_password
接著將帳密文件轉換成資料庫檔案(Berkeley DB 格式)
$ sudo db_load -T -t hash -f /etc/vsftpd/virtual-user /etc/vsftpd/virtual-user.db
註:若出現 The program 'db_load' is currently not installed.
訊息,則用以下指令安裝必要套件
$ sudo apt-get install db-util
- 因設定檔內有使用了
user_config_dir
設定,可在此目錄內針對各使用者套用額外設定
$ sudo mkdir /etc/vsftpd/user_conf
以下範例為限制 user2
僅擁有上傳權限
$ sudo vim /etc/vsftpd/user_conf/user2
設定內容如下
download_enable=NO
- 修改 vsftpd 認證設定
$ sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.old
$ sudo vim /etc/pam.d/vsftpd
設定內容如下
auth required pam_userdb.so db=/etc/vsftpd/virtual-user
account required pam_userdb.so db=/etc/vsftpd/virtual-user
- 重啟服務
$ sudo systemctl restart vsftpd
現在已可透過虛擬帳號登入囉!