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_sub_token=$USER # $USER 代表登入的帳號
local_root=/home/web/$USER # 登入後的 FTP root資料夾
hide_ids=YES #檔案擁有者、使用 ftp顯示


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

沒有留言:

張貼留言