问题标签 [setuid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
735 浏览

permissions - 为什么在 OpenBSD 中设置 SUID 位不设置有效并将 UID 保存到可执行文件所有者?

我在 Parallels for Mac 上使用全新安装的 OpenBSD 5.3 作为来宾操作系统:

令我惊讶的是,一个由 root 拥有且设置了 SUID 位的二进制文件使用 UID 运行,就好像未设置 SUID 一样。也就是说,当 UID 1000 运行这样的程序时,程序启动状态为:

并且不在状态:

正如预期的那样。

为什么会这样?

以下是有关我如何发现问题的详细信息:

我编写了一个交互式 C 程序(编译为setuid_min.bin)用于评估不同 Unix 系统中的 setuid 行为。该程序位于 UID 1000 的主目录的子目录中,使用sudo命令更改所有权和 SUID;然后程序运行,我输入uid来报告进程的真实、有效和保存的 UID:

注意上面的some_pid是setuid_min.bin进程的 pid 。程序通过报告以下 shell 命令的输出来报告真实 UID、有效 UID 和保存的 UID:

其中my_pid是由getpid()报告的 pid 。关于为什么会出现这种情况,我唯一的猜测是 OpenBSD 具有一些底层权限结构,该结构使用setuid_min.bin所在目录的所有权/权限,或者当非特权用户使用时实际上并没有更改所有权/SUID 位sudo更改文件权限。

0 投票
3 回答
8207 浏览

c - Linux C 编程以用户身份执行

我有一个以 root 身份运行的程序。我希望程序以普通用户身份执行另一个应用程序。我试过setgid()了,它可以工作,但我不能再回到 root 或其他用户。程序暂时很简单;

我怎样才能做到这一点?就像命令的动作su $user-c $command

0 投票
3 回答
816 浏览

c - Windows 服务:获取每个用户的 %APPDATA% 变量

我的应用程序作为服务运行,在某些时候它需要遍历系统上所有现有的用户帐户(我认为这可以用 来完成NetUserEnum())并尝试访问每个找到的用户的 %APPDATA% 路径下的某个文件。问题是我不知道如何获取该用户特定的路径(%APPDATA%)。

由于应用程序作为服务(SYSTEM)运行,我无法使用环境或SHGetFolderPath(). 最初我以为我可以使用,LogonUser()但无论我是在用户、管理员还是 SYSTEM 下运行我的应用程序测试代码,它总是向我抛出错误 1326。(winxp作为测试平台)。如果有办法获取用户登录句柄,我可以在 API 中使用,对SHGetFolderPath()ExpandEnvironmentStringsForUser()

因此,到目前为止,我使用 LogonUser() 尝试的代码大致如下(是的,用户名是正确的):

它可能需要我的密码,但我无法在客户机器上知道。我通过快速搜索找到的所有 API 都依赖于 LogonUser() 中的 HANDLE,而我显然无法拥有...

欢迎任何非棘手和棘手的想法!

0 投票
3 回答
2440 浏览

python - 将python子进程作为另一个用户使用时环境错误

我有这个以root身份运行的简单python脚本,但将以其他用户身份执行子进程:

如果 cmd 为“sleep 60”,则脚本以用户身份生成 sleep:

但是,如果 cmd 是“echo $USER”,则输出为“root”。如果我将子进程作为另一个用户生成,我需要做些什么来获取用户的环境吗?

0 投票
2 回答
641 浏览

macos - setuid(0) 在 Mac OS X 10.9 上提供 EPERM

执行此操作时:

我得到这个输出:

错误代码 1 表示 EPERM 错误。关于我应该如何解决它的任何想法?

0 投票
1 回答
781 浏览

c - setuid() C function changes euid value too?

This sample suid program

has 'noemi' (id=1001) as owner:

If started from user 'sarah' (id=1000) euid changes to 1000
Why? p.bin changes only uid (this should have no effect, since uid was 1000 when p.bin was started by 'sarah'):

I am using Debian 6 64 bit.
Please help me understand. Thank you

0 投票
3 回答
9052 浏览

linux - 可执行文件上的 setuid 似乎不起作用

我编写了一个小型 C 实用程序,调用killSPR它来杀死我的 RHEL 机器上的以下进程。这个想法是让任何登录到这个 linux 框的人都能够使用这个实用程序来杀死下面提到的进程(这不起作用 - 下文解释)。

该实用程序归用户所有cadmn(这些进程在其下运行),并在其上设置了 setuid 标志(如下所示)。

C代码如下:

用户 ( pmn)cadmn尝试使用此实用程序终止上述进程并失败(如下所示):

当用户在上面等待回车时,该进程killSPR被检查并被视为以用户身份运行cadmn(如下所示),尽管 killSPR 无法终止进程。

顺便说一句,主分区nosuid上都没有

可执行文件上的 setuid 标志似乎没有达到预期的效果。我在这里想念什么?我是否误解了 setuid 的工作原理?

0 投票
1 回答
411 浏览

c - 此 C 包装器中的分段错误

我是 C 新手,这是一个简单的包装器(rootsetuidwrapper.c),用于以不同的用户身份执行脚本。我要执行的脚本是路径 (/home/neehar) 上的 ubuntu-server-secure.sh 作为 root。我的操作系统是 Ubuntu 12.04.03 LTS。有人可以帮我解决这些错误吗?我用 gcc 编译并通过调用将编译后的代码称为 rootsuidwrap gcc -o rootsuidwrap rootsetuidwrapper.c。当我通过执行 ./rootsuidwrap ubuntu-server-secure.sh [0] 在终端中运行它时。这是正确的称呼方式吗?代码中的用法部分说要这样做。它出现说:Segmentation Fault (core dumped)。它是否与这部分代码有关:*user=cuserid(NULL);. 它可能是流氓指针。如果是这样,解决方法是什么?它会是什么样子?

如果有人可以修复这些错误并给我工作代码,那就太好了。另外,我想知道我做错了什么。

帮助表示赞赏,

0 投票
1 回答
163 浏览

c - 第二个 getpwuid 调用似乎覆盖了旧值

这是一个小型 C 程序,当文件设置了 setuid 标志时,它会打印(嗯,应该打印)进程的真实有效 ID。在这个程序中,当我getpwuid第二次调用(L.No 38)时,它往往会覆盖在 L.No 24 中获得的变量的值。realUserName我无法解释这种行为。这是预期的行为吗?为什么?我正在 Linux 机器(RHEL 2.6.18-371.1.2.el5)中尝试这个。

输出:

0 投票
1 回答
815 浏览

c - 从 set-root-id 程序调用的函数 seteuid() 有效,但显示错误消息

我编译了这个示例 set-root-id 程序:

调用 seteuid(0) 有效,但显示错误消息:“不允许操作”:

为什么 seteuid(0) 有效但显示错误消息?我注意到省略对 seteuid(1001) 的调用或对 seteuid(1000) 的调用没有出现错误消息。

谢谢

(我在 Debian 6 上工作,gcc 版本 4.4.5)