问题标签 [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.
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更改文件权限。
c - Linux C 编程以用户身份执行
我有一个以 root 身份运行的程序。我希望程序以普通用户身份执行另一个应用程序。我试过setgid()
了,它可以工作,但我不能再回到 root 或其他用户。程序暂时很简单;
我怎样才能做到这一点?就像命令的动作su $user-c $command
c - Windows 服务:获取每个用户的 %APPDATA% 变量
我的应用程序作为服务运行,在某些时候它需要遍历系统上所有现有的用户帐户(我认为这可以用 来完成NetUserEnum()
)并尝试访问每个找到的用户的 %APPDATA% 路径下的某个文件。问题是我不知道如何获取该用户特定的路径(%APPDATA%)。
由于应用程序作为服务(SYSTEM)运行,我无法使用环境或SHGetFolderPath()
. 最初我以为我可以使用,LogonUser()
但无论我是在用户、管理员还是 SYSTEM 下运行我的应用程序测试代码,它总是向我抛出错误 1326。(winxp作为测试平台)。如果有办法获取用户登录句柄,我可以在 API 中使用,对SHGetFolderPath()
吗ExpandEnvironmentStringsForUser()
?
因此,到目前为止,我使用 LogonUser() 尝试的代码大致如下(是的,用户名是正确的):
它可能需要我的密码,但我无法在客户机器上知道。我通过快速搜索找到的所有 API 都依赖于 LogonUser() 中的 HANDLE,而我显然无法拥有...
欢迎任何非棘手和棘手的想法!
python - 将python子进程作为另一个用户使用时环境错误
我有这个以root身份运行的简单python脚本,但将以其他用户身份执行子进程:
如果 cmd 为“sleep 60”,则脚本以用户身份生成 sleep:
但是,如果 cmd 是“echo $USER”,则输出为“root”。如果我将子进程作为另一个用户生成,我需要做些什么来获取用户的环境吗?
macos - setuid(0) 在 Mac OS X 10.9 上提供 EPERM
执行此操作时:
我得到这个输出:
错误代码 1 表示 EPERM 错误。关于我应该如何解决它的任何想法?
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
linux - 可执行文件上的 setuid 似乎不起作用
我编写了一个小型 C 实用程序,调用killSPR
它来杀死我的 RHEL 机器上的以下进程。这个想法是让任何登录到这个 linux 框的人都能够使用这个实用程序来杀死下面提到的进程(这不起作用 - 下文解释)。
该实用程序归用户所有cadmn
(这些进程在其下运行),并在其上设置了 setuid 标志(如下所示)。
C代码如下:
用户 ( pmn
)cadmn
尝试使用此实用程序终止上述进程并失败(如下所示):
当用户在上面等待回车时,该进程killSPR
被检查并被视为以用户身份运行cadmn
(如下所示),尽管 killSPR 无法终止进程。
顺便说一句,主分区nosuid
上都没有
可执行文件上的 setuid 标志似乎没有达到预期的效果。我在这里想念什么?我是否误解了 setuid 的工作原理?
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);
. 它可能是流氓指针。如果是这样,解决方法是什么?它会是什么样子?
如果有人可以修复这些错误并给我工作代码,那就太好了。另外,我想知道我做错了什么。
帮助表示赞赏,
c - 第二个 getpwuid 调用似乎覆盖了旧值
这是一个小型 C 程序,当文件设置了 setuid 标志时,它会打印(嗯,应该打印)进程的真实有效 ID。在这个程序中,当我getpwuid
第二次调用(L.No 38)时,它往往会覆盖在 L.No 24 中获得的变量的值。realUserName
我无法解释这种行为。这是预期的行为吗?为什么?我正在 Linux 机器(RHEL 2.6.18-371.1.2.el5)中尝试这个。
输出:
c - 从 set-root-id 程序调用的函数 seteuid() 有效,但显示错误消息
我编译了这个示例 set-root-id 程序:
调用 seteuid(0) 有效,但显示错误消息:“不允许操作”:
为什么 seteuid(0) 有效但显示错误消息?我注意到省略对 seteuid(1001) 的调用或对 seteuid(1000) 的调用没有出现错误消息。
谢谢
(我在 Debian 6 上工作,gcc 版本 4.4.5)