2011-01-06 72 views
0

好吧,所以我的问题很简单,但我有点新C,我希望有人能帮助我。我想更改为C中的其他用户。例如,我知道用户的密码,如果用户键入: ./change user1 它将更改为user1。我知道这可能是一个安全问题,但我现在并不担心安全问题。C改变用户

+2

在C中,没有用户这样的事情。这将取决于正在使用的操作系统,完全有可能无法做到您想要的。 – 2011-01-06 21:49:56

+0

这个问题在很大程度上取决于操作系统:你的目标是什么操作系统? – Thanatos 2011-01-06 21:50:01

回答

2

你将要使用的setuid可以在unistd.h被发现,因此可以用POSIX系统(所以任何Linux/UNIX falvour应该没问题)

从man页面

如果进程具有适当的权限,setuid()应将实际用户标识, 有效用户标识以及调用进程保存的set-user-ID设置为uid。

如果进程没有适当的权限,但uid等于真实的 用户ID或保存的set-user-ID,则setuid()应将有效用户ID设置为uid; 真实用户ID和保存的设置用户ID应保持不变。

setuid()函数不应以任何方式影响补充组列表。

这里是一个example

0

你必须找出使用getpwuid()的UID。 Afterwords必须在您的程序中设置UID,然后输入setuid(),然后选择您希望以这些新权限运行的应用程序/函数,例如贝壳。要使用当前 UID使用system()启动应用程序。

1

调用su二进制文件(如通过system()fork()的组合的exec功能之一),它知道改变凭证的所有复杂性,无论是Unix的一般和在你的系统。该终端被共享并继续属于原始用户。

一些简单的setuid()调用不处理这些错综复杂的情况是组,帐户禁用和资源限制。

如果这只是为了好玩,setuid()前面有setgid()initgroups()可能就足够了。