gpt4 book ai didi

linux - 如何在程序中临时使用 sudo?

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:22 26 4
gpt4 key购买 nike

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

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

最佳答案

为了执行仅限 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 用户的用户 ID)。因此,这样的进程将能够执行 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

关于linux - 如何在程序中临时使用 sudo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22853425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com