2013-04-20 19 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