VSFTPDで準仮想ユーザ

純粋な仮想ユーザではない方法。PAMで認証時に独自ユーザーDBで認証した後、シェル等の確認をさせる。

#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     /lib/security/pam_userdb.so db=/etc/vsftpd/vpasswd
auth       required     pam_shells.so
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth

# original are below
##%PAM-1.0
#auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
#auth       required     pam_stack.so service=system-auth
#auth       required     pam_shells.so
#account    required     pam_stack.so service=system-auth
#session    required     pam_stack.so service=system-auth

この方法の利点?は、ApacheでSuexecを使えるようにしてるとき、各ユーザごとにSuexecが使える。VSFTPDのドキュメントに書いてる、仮想ユーザの使い方だと、ある単一のユーザIDの下で、すべてのファイルが来てしまうので、FTPサーバとWebサーバがバラバラならいいが、一緒になっているような場合に困る。特にSuexecを使えるような場合は、すべて同じユーザ権限で動くので、あるユーザのCGIから他のユーザのディレクトリに書き込みとかできてしまう。これはマズイので、手軽に仮想ユーザを使いつつ、独立したホームディレクトリやSuexecを利用できるようにしたのが、上の設定。

システムのユーザIDを使いつつ、システムと別のパスワードを設定できるため、セキュリティ的にちょいマシになる。まあ、うちの場合はSSHの登録済みキーでしか入れないから、万一パスワードが漏れても直接は進入できないと思うが。(FTPDとかのサーバの脆弱性から進入されるとNGだなぁ)まあ、何にせよシステムで設定されているパスワードが漏れる、というのは精神衛生上良くないので。