vsftpd虚拟用户和本地用户不能共存的解决方法
在配置vsftpd的過程中,聽信了網上的讒言,把vsftpd配了一遍,發現配完,虛擬用戶和本地用戶不能共存,即虛擬用戶可以登錄ftp,但是本地用 戶不能登錄的ftp。折騰了很久,包括上網找過很多內容都找不到解決方法,大家貌似都沒有這樣的問題,或者找不到解決辦法(在看眾多教程中貌似有看到過和 本方法一樣的配置,但是那份內容里面完全沒有提到/etc/pam.d/vsftpd里面為什么要這樣寫)。在洗澡過程中想了想,既然本地用戶無法登錄, 那應該是pam驗證的時候就沒有給本地用戶過。實驗證明人在洗澡的時候是最清醒的時候。哈哈!回來實驗,發現如果把/etc/pam.d/vsftpd 中的
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
注 釋掉,然后把里面其它的內容都打開注釋(網上大部分教程教建立虛擬用戶時,都說把上面兩句加入/etc/pam.d/vsftpd中,然后把里面的其它東 西注釋掉),這時候再嘗試,發現本地用戶能登錄!!!這也證明了是pam模塊認證的問題讓虛擬用戶和本地用戶不能共存。所以就去了解了一下pam配置的內 容,如下網址:
http://www.ibm.com/developerworks/cn/linux/l-pam/
里面提到:
Required:堆棧中的所有 Required 模塊必須看作一個成功的結果。如果一個或多個 Required 模塊失敗,則實現堆棧中的所有 Required 模塊,但是將返回第一個錯誤。
也 就意味著,required需要所有內容都滿足才行,當我們前兩條配置虛擬用戶登錄驗證通過后,繼續向下面的配置條目進行驗證,驗證是否是本地用戶時結果 發現不是,又因為,驗證本地用戶的control_flag(見上網址中解釋)也為required,所以這時候,就會返回錯誤,也即驗證不成功。
所以我們不能同時設置虛擬用戶和本地用戶的control_flag為required。按照上面的網址所說:
Sufficient:如果標記為 sufficient 的模塊成功并且先前沒有 Required 或 sufficient 模塊失敗,則忽略堆棧中的所有其余模塊并返回成功。
我們可以把虛擬用戶的驗證配置放在最前面,且把control_flag設為sufficient。這樣的話,如果遇到是虛擬用戶,那么可以通過驗證,如果是本地用戶,忽略掉sufficient的兩條配置規則,只要滿足required就行,所以也能通過驗證。
如下為/etc/pam.d/vsftpd的內容:
#%PAM-1.0
auth sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd
account sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd
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
上 面兩行為后面加上,虛擬用戶pam認證需要的配置條目,下面為原來vsftpd的認證配置規則,可以看到,本地用戶用的是password-auth,從 這里可以看出如果要虛擬用戶和本地用戶共存,兩部分都不能注釋。網上說的注釋掉下面的部分,這種情況本地用戶都不能登錄。
轉載于:https://blog.51cto.com/ktaeef/1265772
總結
以上是生活随笔為你收集整理的vsftpd虚拟用户和本地用户不能共存的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 衡量 mysql性能状态 参数 详解
- 下一篇: ZOJ 3430 Detect the