我们可以将权限从用户更改为root吗?

时间:2013-05-20 17:11:22

标签: c linux unix

我有一个C程序,它创建一个文件“abcd.txt”并将一些数据写入其中。我通过使用用户名“bobby”来执行我的代码,因此创建文件abcd.txt时所有者为bobby。

但我的任务是,即使我用一些用户名“bobby”执行我的代码,也应该始终以root用户身份创建该文件。有人可以帮我说一下这可能吗?

3 个答案:

答案 0 :(得分:3)

作为一般原则,当您正在编写文件或对文件执行chown(2)时,您需要有效的uid(euid为root)。

如果您在Linux下执行此操作,则可以使用 linux特定的方法。

通用解决方案

没有sudo的可用性

这是旧的UNIX DAC方法,它充满了危险。它假设您没有安装sudo或无法安装它。

您的可执行文件应由root拥有,并且可执行文件setuid位设置。

过程

对于大多数操作,您应该使用seteuid()将权限从root删除到bobby,包括写入。完成后,使用seteuid(0)将权限级别恢复为root,并对文件执行chown()(或fd上的fch)以将其所有权更改为root。

一些基本安全

为了安全起见,设置它以便你的可执行文件由root拥有:safegrp其中'safegrp'是允许执行此文件的用户所特有的组的名称(将bobby添加到safegrp);并确保setuid可执行文件的模式为4510;

有sudo的可用性

如果您的系统上有sudo,那么请按照上述相同的流程处理可执行文件中的权限,但不要将文件模式设置为setuid,为此可执行文件添加safegrp sudoers,现在可以使用bobby用sudo / your / bin / prog

运行它

Linux特定解决方案

POSIX.1e

可以更严格地控​​制文件使用POSIX.1e功能支持。在您的情况下,您希望将SYS_CHOWN授予您的程序;

出于安全原因,我可能会将其设置为完全独立的二进制文件或子进程,并仍使用sudo并执行适当的权限删除。

linuxacl [在Linux上使用访问控制列表的ACL]有关于此主题的优秀教程

SE-Linux的

您可以使用强制访问控制来限制对这种危险二进制文件的访问,但是SE Linux很难配置:^)虽然可能是一种很好的方法

答案 1 :(得分:0)

您可能不希望以root身份运行程序,除非您真的必须这样做。也许在运行程序后从shell脚本运行“chown”?或者,您可以使用以root身份运行的程序中的chown(2)(或使用等效功能在Linux上运行)。

答案 2 :(得分:-1)

使用chown()方法。可能有更权威的链接,但这个很好,因为它包含对getpwnam()的调用。我过去已经做了所有这些,但不幸的是我还没有代码(它由IBM拥有)。

http://manpages.courier-mta.org/htmlman2/chown.2.html