-1

好吧,所以我的问题很简单,但我对 C 有点陌生,我希望有人能帮助我。我想在C中换一个不同的用户,比如我知道用户的密码,如果用户输入: ./change user1 就会变成user1。我知道这现在可能是一个安全问题,但我目前并不担心安全问题。

4

3 回答 3

2

您将希望使用可以 unistd.h在 POSIX 系统上找到的 setuid(因此任何 linux/unix falvour 都应该可以)

从手册页

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

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

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

这是一个例子

于 2011-01-06T21:52:48.210 回答
1

调用su二进制文件(例如通过函数或其中一个函数system()的组合),它知道更改凭证的所有复杂性,无论是在 Unix 通用还是在您的特定操作系统上。终端是共享的,继续属于原用户。fork()exec

其中一些无法通过简单setuid()调用处理的复杂问题是组、帐户禁用和资源限制。

如果这只是为了好玩,那么setuid()之前setgid()并且initgroups()可能对您来说就足够了。

于 2011-01-08T00:29:39.530 回答
0

您必须使用getpwuid()找出 UID 。之后,您必须在程序中使用setuid()设置 UID,然后是您打算使用这些新权限运行的应用程序/功能,例如 shell。要使用当前UID启动应用程序,请使用system()

于 2011-01-06T21:58:08.447 回答