当前位置:  开发笔记 > 运维 > 正文

如何在Linux上使用C执行过程中切换用户

如何解决《如何在Linux上使用C执行过程中切换用户》经验,为你挑选了1个好方法。

我正在Linux上使用C编写应用程序。在我的应用程序中,我需要在开始时以普通用户(非root用户)执行一些任务,而在执行过程中也需要以root用户执行一些任务。

顺便说一句,我不能修改普通用户的配置。因此,我无法将普通用户添加到sudoers。我也无法修改任何操作系统配置。

我的应用程序真正要做的是执行应用程序,获取其输出以进行分析。

某些应用程序需要使用root运行。我使用多线程并行执行和分析这些应用程序的输出,然后将每个应用程序的报告存储在称为“报告”的单例中。我execvp在子流程中使用这些应用程序。

我的应用程序的主要目的是自动化软件测试。并且大多数任务需要在不能为root的软件所有者中运行。

所以,问题是

如何在执行期间切换用户?

无论如何,我可以在1个可执行文件中实现它吗?

使用POSIX API更好。

以普通用户身份运行我的应用程序,为我的应用程序提供root密码,使用root密码切换到root。

Basile Stary.. 5

阅读有关setuid可执行文件以及setreuid(2)和execve(2)系统调用的更多信息。请注意,在更改其所有权(使用chown(1))后,您需要将setuid标志放在chmod u+s(使用chmod(1))上的可执行文件上,并仔细编码以避免安全漏洞。

(因此,我建议让知道setuid机制并了解安全性问题的人员审查您的代码)

setuid后的基本机制(通过使用susudosuperlogin程序以获取(或撤消)的权限等)。请参阅凭据(7)和功能(7)。

启动一些帮助程序进程(以root身份启动,或者在/usr/libexec/...中启动某个setuid可执行文件),并使用一些进程间通信工具(例如pipe(7) ...)进行通信,可能会更安全。例如,不建议在根进程中使用GUI工具包,例如GTK或Qt。如果您的应用程序具有一些GUI,则可以在非root用户(普通用户)进程中运行其GUI,并以root用户身份运行(希望很小的)帮助程序进程,以完成需要特殊特权的实际工作。

在编码之前,我建议您读一本好书,例如Advanced Linux Programming和syscalls(2)以及您将要使用的每个系统调用的文档。安全方面尤其重要。

Setuid可执行文件不一定需要或使用任何密码。这是另一种方式圆:节目需要密码(特别是loginsusudo等...)是的setuid(他们是自由软件在Linux上,所以你可以学习他们的源代码); 尝试ls -l /bin/su /usr/bin/sudo /bin/login 检查一下。

由于要模拟各种用户环境,因此请注意environ(7)。



1> Basile Stary..:

阅读有关setuid可执行文件以及setreuid(2)和execve(2)系统调用的更多信息。请注意,在更改其所有权(使用chown(1))后,您需要将setuid标志放在chmod u+s(使用chmod(1))上的可执行文件上,并仔细编码以避免安全漏洞。

(因此,我建议让知道setuid机制并了解安全性问题的人员审查您的代码)

setuid后的基本机制(通过使用susudosuperlogin程序以获取(或撤消)的权限等)。请参阅凭据(7)和功能(7)。

启动一些帮助程序进程(以root身份启动,或者在/usr/libexec/...中启动某个setuid可执行文件),并使用一些进程间通信工具(例如pipe(7) ...)进行通信,可能会更安全。例如,不建议在根进程中使用GUI工具包,例如GTK或Qt。如果您的应用程序具有一些GUI,则可以在非root用户(普通用户)进程中运行其GUI,并以root用户身份运行(希望很小的)帮助程序进程,以完成需要特殊特权的实际工作。

在编码之前,我建议您读一本好书,例如Advanced Linux Programming和syscalls(2)以及您将要使用的每个系统调用的文档。安全方面尤其重要。

Setuid可执行文件不一定需要或使用任何密码。这是另一种方式圆:节目需要密码(特别是loginsusudo等...)是的setuid(他们是自由软件在Linux上,所以你可以学习他们的源代码); 尝试ls -l /bin/su /usr/bin/sudo /bin/login 检查一下。

由于要模拟各种用户环境,因此请注意environ(7)。

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有