2009-12-22 109 views
1

我在C中編寫了一個在瀏覽器中運行的cgi-bin應用程序,允許用戶打開交互式shell並在Linux機器上查看編輯文件。它作爲標準apache「www-data」用戶運行。我剛剛添加了一個登錄屏幕,用戶輸入他們的名稱和密碼(在表單中),但我無法使用getspnam對用戶進行身份驗證,因爲此功能僅在以root身份運行時纔有效。如何在不以root身份運行時檢查linux中的登錄憑據?

如果沒有以root用戶身份運行,必須檢查用戶的登錄憑據有哪些選項?

PS:在我的交互式shell我可以鍵入「蘇根」,然後輸入我的密碼,它並提升到根細。因此很明顯可以交互進行。

回答

1

關於你PS:好吧,當你做一個su root你切換到root用戶。所以是的,當然,root可以讀取影子文件,你都準備好了。

關於你的問題:你不能讓你的apache進程臨時升級到根目錄(通過調用setuid或類似的方法)來執行身份驗證嗎?

祝你好運!

+0

應該指出,這隻適用於因爲'su'是suid root。如果不是,那麼無論您嘗試切換到哪個用戶,它都會有相同的問題。 – 2009-12-22 19:28:12

+0

我不知道我明白你在說什麼@Evan Teran。他正在做一個'su root'來切換到root用戶。如果他做了一個'su randomUser',那麼他就不能讀取root的文件作爲'randomUser',除非'root'給了'randomUser'許可。這不是一個給定的?或者我誤解了你? – mrduclaw 2009-12-22 19:30:17

+0

使用SetUID解決了我的問題。因爲我是Linux新手,所以之前我不知道這個功能。謝謝! – KPexEA 2009-12-22 19:48:09

3

我想你想看看Pluggable authentication modules。據我所知,PAM處理所有雜亂的東西給你,你只需要做幾個函數調用的任何後端到Linux主機上的用戶進行身份驗證的用戶身份驗證時(無論是隱藏密碼,NIS,LDAP,等等)

下面是關於將C代碼與它們集成的簡短guide

0

正如所建議的,我認爲PAM是現代化的做法。但是,如果你想上學,你需要創建一個setuid-root程序(而不是腳本)來進行認證。

有很多使用setuid-root程序,這就是爲什麼PAM可能是更好的陷阱的。

Here's a link對安全編寫的setuid-root程序的一些好論文。

+0

我剛剛意識到你也可以使用'sudo'將用戶標識更改爲root。這只是一個setuid-root程序,它已經內置了安全性。請注意如何設置它,或者像您自己的setuid-root程序一樣,您將使系統容易受到攻擊。 – 2009-12-22 20:17:42

相關問題