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

标签 c linux unix

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

但我的任务是,即使我使用某个用户名“bobby”执行我的代码,文件也应该始终以所有者为根创建。有人可以帮我说这怎么可能吗?

最佳答案

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

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

通用解决方案

没有 sudo 的可用性

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

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

过程

对于大部分操作,包括写入,您应该使用 seteuid () 将您的权限从 root 降低到 bobby。完成后,使用 seteuid(0) 将您的权限级别恢复为 root,并对文件执行 chown()(或 fd 上的 fchown)以将其所有权更改为 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 [ACL Using Access Control Lists on Linux] 有关于这个主题的优秀教程

SE-Linux

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

关于我们可以将权限从用户更改为 root 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16654654/

相关文章:

linux - 如何停止自动 Linux 设备初始化

linux - 在 Bash 中,如何在每行后面添加文字\n?

mysql - 以 UTF 8 格式将数据插入 MYSQL 时出现问题

从主线程关闭套接字

c - 在 C 中将字符串的一部分分配给 char *

更改位数组中的值

c - 在mac桌面上读取c中的文件11db错误

c - 写入ini文件

linux - 如何在 awk 中使用多个操作来编辑文本文件

bash - 在不使用临时文件的情况下对文件进行排序