2013-04-20 37 views
0

我寫一個簡單的程序Linux;更改UID爲root,如果你不是根

當你運行這個程序,如果你不是root用戶,輸入root密碼,然後更改uid根

if (getuid()) 
{ 
    char *pass = getpass(""); 
    //how to change uid to root ? 
} 

如何當你得到root密碼時,將uid更改爲root?

+0

只需提及:不要在您的程序中存儲未加密的root密碼,請使用散列函數。 – TNW 2013-04-20 03:10:13

+0

'if(getuid)'與'if(getuid())'有很大不同。前者永遠是真的...... – 2013-04-20 03:15:31

+0

@TNW:如果沒有未經過哈希處理的版本就無法進行身份驗證,這並沒有什麼幫助。 – Ryan 2013-04-20 03:22:54

回答

5

無法從非root用戶更改爲root用戶。這就是整個問題。像login,sshdsu這樣的程序最初以作爲根開始工作,或者是因爲它們的祖先或在可執行文件上有suid位,並且仔細地限制了您可以執行的操作,直到您使用密碼或其他方法進行身份驗證,然後切換到適當的uid(root或用戶登錄的用戶)和另一個程序(通常是shell)。

+0

能夠成爲root的程序確實是* setuid * root(例如以root身份啓動),但更重要的是它必須經過非常仔細的設計,以避免在系統中打開巨大的安全漏洞。所以不要這樣做,除非你花費大量的時間來了解所有的技巧和影響....閱讀http://advancedlinuxprogramming.com/ – 2013-04-20 08:21:09