如何在程序内临时sudo?

时间:2014-04-04 04:12:21

标签: linux sudo

我写了一个文件管理器,现在我想允许用户输入密码,如果他想要复制或编辑需要sudo的文件。我可以使用gksudosudo启动程序的新副本并隐藏当前副本。但这是否可以在同一过程中完成?

我已经阅读过geteuid和其他一些函数的文章,但我觉得我在这里缺乏一些基本的理解,因为对我来说没有多大意义。

1 个答案:

答案 0 :(得分:0)

为了执行仅限root的操作,进程必须以有效uid为0开始,或者具有允许它模拟此类euid(CAP_SETUID)的功能。

使用特殊文件系统属性设置有效uid,称为“setuid”标志:

# ls -l /bin/su
-rws--x--x 1 root root 36720 Mar 28  2013 /bin/su

记下文件权限标记中的's'。

以上意思是,当任何用户运行su命令时,它将代表可执行文件的所有者运行,在本例中为root(因此该进程将以您的普通用户ID运行,但有效的用户ID将是root用户的那个。因此,这样的过程将能够做任何事情root

另一种更现代的方法是提供流程选择功能,例如CAP_SETUID。可以使用setcap / getcap命令设置和查询这些命令,并允许更精细的控制过程可以做什么和不能做什么。这是否会带来更安全的系统,仍然是一个悬而未决的问题。

https://wiki.archlinux.org/index.php/Using_File_Capabilities_Instead_Of_Setuid

可能存在安全问题的概述:

http://forums.grsecurity.net/viewtopic.php?f=7&t=2522&sid=c6fbcf62fd5d3472562540a7e608ce4e#p10271