Calvert's murmur

如何在 Ubuntu 中為 vsftpd 設置虛擬帳號

2017-02-06

約 2814 字 / 需 15 分鐘閱讀

以下是在 Ubunto 16.04 LTS 安裝 vsftpd 並設定虛擬帳號的步驟

  1. 安裝 vsftpd

    $ sudo apt-get update
    $ sudo apt-get install vsftpd
  2. 編輯設定檔

    $ sudo vim /etc/vsftpd.conf

以下設定僅供參考,可依實際使用情形調整(詳細設定及說明可查看 man vsftpd.conf

/etc/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

  1. 設定虛擬帳號前仍須先建立一個實體帳號,虛擬帳號皆會使用此帳號登入

    $ sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
  2. 設定虛擬帳號
    由於要使用非實體帳號來登入,需另外建立帳號及密碼資料提供 vsftpd 作認證

$ sudo vim /etc/vsftpd/virtual-user

建立帳密文件,格式為一行帳號、一行密碼

/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
  1. 因設定檔內有使用了 user_config_dir 設定,可在此目錄內針對各使用者套用額外設定
$ sudo mkdir /etc/vsftpd/user_conf

以下範例為限制 user2 僅擁有上傳權限

$ sudo vim /etc/vsftpd/user_conf/user2

設定內容如下

/etc/vsftpd/user_conf/user2
download_enable=NO
  1. 修改 vsftpd 認證設定
$ sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.old
$ sudo vim /etc/pam.d/vsftpd

設定內容如下

/etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/virtual-user account required pam_userdb.so db=/etc/vsftpd/virtual-user

  1. 重啟服務
$ sudo systemctl restart vsftpd

現在已可透過虛擬帳號登入囉!

Tags: Linux