【发布时间】:2017-10-17 03:24:42
【问题描述】:
我正在 Linux 上使用 C 语言编写应用程序。在我的应用程序中,我需要在开始时以普通用户(非 root 用户)执行一些任务,而在执行过程中我还需要以 root 用户执行一些任务。
顺便说一下,我无法修改普通用户的配置。所以我无法将普通用户添加到 sudoers。我也无法修改任何操作系统配置。
我的应用程序真正做的是执行应用程序,获取它们的输出以进行分析。
某些应用程序需要以 root 身份运行。我使用多线程并行执行和分析这些应用程序的输出,然后将每个应用程序的报告存储在一个名为 Report 的单例中。我在子进程中使用execvp 调用这些应用程序。
我的应用程序的主要目的是自动化软件测试。并且大多数任务都需要在软件所有者中运行,而不是 root。
那么问题来了
- 如何在执行过程中切换用户?
- 无论如何我可以在 1 个可执行文件中实现它吗?
- 使用 POSIX API 更好。
- 以普通用户运行我的应用程序,为我的应用程序提供 root 密码,使用 root 密码切换到 root。
【问题讨论】:
-
@oakad 谢谢,但是可以用普通用户启动我的应用程序,然后使用 root 密码切换到 root 吗?
-
不,尽管您可以生成一个以 root 身份运行的单独帮助进程,并通过 IPC 与其通信。一种方法是在帮助程序上设置 setuid 位。使帮助程序尽可能地最小化,只为其提供实际需要 root 访问权限的非常基本的功能,并让您的主应用程序完成其余的工作。
-
可执行文件或运行它的用户必须设置 CAP_SETUID。对于用户,可以通过认证链中的
pam_cap模块注入能力。对于可执行文件,有一个setcap实用程序。 -
@PeterYANG:请编辑您的问题以改进它并详细说明您的申请、动机和背景