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,從 這裏可以看出如果要虛擬用戶和本地用戶共存,兩部分都不能註釋。網上說的註釋掉下面的部分,這種情況本地用戶都不能登錄。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章