setuid-root程序中的权限问题

时间:2018-11-28 08:38:58

标签: c permission-denied pam setuid

我已经编写了一个程序,对其进行了编译,然后将其复制到/ usr / local / bin /并授予了setuid-root文件权限。

不幸的是,由于权限问题,我无法使程序按期望的方式运行-也就是说,当我从命令行以非特权用户身份调用该程序时,它运行良好,但是当我将该程序作为a调用时,它将引发错误。来自PAM模块pam_exec的非特权用户-这就是我最终要使用它的方式。

到目前为止,从命令行调用和从pam_exec调用之间有以下区别:

  1. 当我不授予该程序的setuid-root文件权限,而是给它提供Linux cap_setuid功能时,该功能可以从命令行使用,但是使用pam_exec时,该程序根本无法运行,并且出现错误“不允许操作”。

  2. 对于程序的进一步执行,不仅有效的,而且真实的UID都不必为0。从命令行来看,当我在程序代码中使用setuid(0)时,但与pam_exec一起使用时,此方法有效,setuid(0)无法更改实际的UID,而我必须使用setreuid(0,0)。

  3. 尽管实际和有效的UID为0,但是从pam_exec调用程序时,仍然出现诸如“权限被拒绝”和“不允许操作”之类的错误。首先,这是在我的setuid-root程序中执行外部命令lvcreate时发生的,而现在我改用lvm dbus库调用解决了此问题之后,当在目录中执行一个简单的chown()时,我什至会得到“不允许的操作”本地文件系统。当然,当我从命令行启动程序时,所有这些都可以正常工作。

对于具有setuid-root文件权限的程序(或具有特殊Linux功能的程序),当它由PAM模块pam_exec的非特权用户调用时,其行为与由.NET调用时有很大不同。命令行中没有特权的用户?或者,即使getuid()和geteuid()都返回0,则怎么可能发生“不允许操作”和“拒绝权限”错误?

问候   克里斯托夫

0 个答案:

没有答案