首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SUID位删除特权

使用SUID位删除特权
EN

Unix & Linux用户
提问于 2014-02-19 10:27:43
回答 2查看 1.9K关注 0票数 4

这是对我正在研究的系统的描述:

  • “管理器”进程生成所有其他应用程序。
  • 管理程序以root用户的身份运行。
  • 所以现在,它产生的任何进程也继承了root用户权限。

第三点显然使我的应用程序(让我们称它为“player”)具有安全风险,因此一种解决方案是创建一个单独的用户和组,比如'worker‘,然后将'player’进程派生为该用户。

具体实施情况如下:

  • chown二进制文件(player.out)给worker用户和组chown worker:worker player.out
  • 使用chmod a+s player.out在其上设置SUID位。
    • 这确保进程启动时(至少)它的EUID设置为'worker‘。

  • 在应用程序中,main使用setregid()setreuid将RUID设置为与EUID相同的值: if(setregid(getegid(),getegid()) != 0) { if(setreuid(geteuid(),geteuid()) != 0) {}

我的问题分两部分:

  1. 设置了SUID位的进程通常由root拥有,并被称为setuid应用程序,以表示(可能)它们的权限被提升到根用户,而不管哪个用户调用程序。
    • 对于使用SUID位自动删除priveleges的二进制文件,有什么特殊的名称吗?

  2. 还有其他更好的方法来确保“播放器”应用程序放弃骄傲吗?

编辑:我应该澄清,我没有控制产生其他进程的“经理”进程。我只能控制我的player应用程序。

EN

回答 2

Unix & Linux用户

发布于 2014-02-19 11:07:22

  1. 当您正确地声明一个SUID位时,将新进程的有效用户id设置为正在运行的程序文件的所有者。没有提高或降低特权的概念。通常,其中一个“SUID”是根用户,但它可以合法地成为任何其他用户,并且在您选择另一个用户时,它不会真正改变SUID的概念,除了一些用户可以访问某些资源之外。然而,根用户有点特殊,setuid的手册页解释了细微的差异。我不认为有一个特殊的名称更改为一个非根用户,我从来没有联系到suid的特权上升,只是改变用户。
  2. 既然您是自己开发的,它可以在分叉后作为根用户运行,但在执行新进程之前,我不认为suid位必须在可执行文件上使用,如果您不使用,那么如果有老用户运行该播放器,因为可执行文件不是suid,他们将无法正确运行它,因为如果不是root用户,setuid就会失败。对我来说,这似乎比在可执行文件上使用suid位更安全。

--编辑1

因此,您的经理(作为真实有效的uid=0运行)启动player,而您编写/控制播放器(而不是管理器)。如果您没有做什么特别的事情,那么player将与real+effective uid=0一起运行,并且您希望防止这种情况发生。

您只需切换uid在播放器,没有SUID位的播放器,不需要。

票数 3
EN

Unix & Linux用户

发布于 2014-02-19 11:19:25

通常的方法是主进程分叉、删除功能或更改其用户ID,然后执行新进程。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/115873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档