2015年12月15日 星期二

Linux 安裝 vsftpd,設定虛擬帳號

在 CentOS 上,使用 yum 安裝 vsftpd
$ yum install vsftpd

安裝完,可以使用匿名或系統帳號登入,若要用非系統帳號(虛擬帳號)來登入,
須另外建立帳號、密碼資料,讓 vsftpd 用來作帳號認證。
建立帳密文件(之後會轉成 Berkeley DB 格式,檔名、路徑隨意)
$ vi /etc/vsftpd/my-virtual-user
格式為一行帳號,一行密碼
如下,userA 密碼為 aaaa,userB 密碼為 bbbb
userA
aaaa
userB
bbbb

再來須將帳密文件轉成資料庫檔案,這樣 vsftpd 才可以在認證時使用
$ db_load -T -t hash -f /etc/vsftpd/my-virtual-user /etc/vsftpd/my-virtual-user.db
若系統沒 db_load 指令,可安裝 libdb-utils
$ yum install libdb-utils

轉換完,可查看產生的資料庫檔案類型,應該是Berkeley DB
$ file /etc/vsftpd/my-virtual-user.db
/etc/vsftpd/my-virtual-user.db: Berkeley DB (Hash, version 9, native byte-order)

修改 vsftpd 認證設定
$ vi /etc/pam.d/vsftpd
註解原本所有設定,加上以下兩行
auth required pam_userdb.so db=/etc/vsftpd/my-virtual-user
account required pam_userdb.so db=/etc/vsftpd/my-virtual-user
修改完如下
#%PAM-1.0
#session    optional     pam_keyinit.so    force revoke
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
#auth       include     password-auth
#account    include     password-auth
#session    required     pam_loginuid.so
#session    include     password-auth
auth required pam_userdb.so db=/etc/vsftpd/my-virtual-user
account required pam_userdb.so db=/etc/vsftpd/my-virtual-user

設定檔作以下修改,
注意 local_enable 要設為 YES,
因為雖然是虛擬帳號,但還是需要一個系統帳號,來當虛擬帳號登入時的身分。
$ vi /etc/vsftpd/vsftpd.conf
#匿名不可登入
anonymous_enable=NO
local_enable=YES

virtual_use_local_privs=YES
guest_enable=YES
#虛擬帳號登入時,是化身為系統什麼帳號
guest_username=nginx
chroot_local_user=YES
allow_writeable_chroot=YES
#$USER 代表登入的帳號
user_sub_token=$USER
#登入後的 FTP root資料夾
local_root=/home/web/$USER
#檔案擁有者、使用 ftp顯示
hide_ids=YES

#如果要針對不同虛擬帳號做個別設定,可使用 user_config_dir 設定各帳號設定檔放的資料夾
user_config_dir=/etc/vsftpd/userconf

#PASV 被動模式
pasv_enable=YES
pasv_min_port=10001
pasv_max_port=10050
#執行 ps aux | grep vsftpd 可看到誰正在連線
setproctitle_enable=YES
如果有設定 user_config_dir=/etc/vsftpd/userconf
先新增放各帳號設定檔的 /etc/vsftpd/userconf 資料夾
$ mkdir /etc/vsftpd/userconf
然後在該資料夾下,針對要個別化設定的帳號,建立檔名跟帳號名稱一樣的檔案
例如:要針對 userB 帳號做個別設定,先建立該帳號設定檔
$ vi /etc/vsftpd/userconf/userB
個別帳號設定檔,可視需要,寫入多個與主設定檔不同的設定
例如,要另外設定家目錄(local_root)為/home/web/testdir,則內容如下:
local_root=/home/web/testdir
如此,帳號userB登入時,不會使用前面設定的 local_root=/home/web/$USER 資料夾
而會使用此處設定的 /home/web/testdir 資料夾

參考:
CentOS安装配置vsftp虚拟用户登录(Berkeley DB+PAM)
How to setup virtual users for vsftpd with access to a specific sub directory?
VSFTPD/MYSQL Virtual users Tutorial

沒有留言:

張貼留言