登入認證:
考慮使用者先使用 mysql 驗證,若無法通過則使用原來的 linux 帳號認證,因此 pam 檔使用原先兩個 pam 混合。需要注意式 mysql 的部分,required 要更換成 sufficient,也就是 mysql 的認證通過後,就不再檢查後續的認證。
編輯 pam 檔 /etc/pam.d/vsftpd_mix:
#%PAM-1.0 auth sufficient pam_mysql.so db=vsftpd user=vsftpd passwd=42fdsFDE3$ host=localhost table=accounts usercolumn=username passwdcolumn=password crypt=3 account sufficient pam_mysql.so db=vsftpd user=vsftpd passwd=42fdsFDE3$ host=localhost table=accounts usercolumn=username passwdcolumn=password crypt=3 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
並在 vsftpd.conf 中,調整設定:
pam_service_name=vsftpd_mix
目錄及權限:
原先使用 mysql 中 user時,vsftpd.conf 增加了以下設定:
virtual_use_local_privs=YES guest_enable=YES guest_username=vuser user_sub_token=$USER local_root=/home/vuser/$USER
這些項目僅能針對 virtual user,因此利用 user_config_dir的設定,依照登入帳號,如果是 local account,就反向取消這些設定。
vsftpd.conf 增加設定
user_config_dir = /etc/vsftpd/user_conf
在 /etc/vsftpd/user_conf 下面,針對每個 local account 增加設定檔,例如 local account : xyz
增加 /etc/vsftpd/user_conf/xyz,內容為
virtual_use_local_privs=NO guest_enable=NO user_sub_token=$USER local_root=/home/$USER
PS:亦可反向思考,local account的設定寫在 vsftpd.conf中,每個 virtual user 建立一個檔案在 /user_conf 之下。可考慮哪種方式比較容易處理。