问题标签 [suid]

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 投票
1 回答
309 浏览

linux - 将 suid 位设置为 root 用户的 shell 脚本

我需要一个 Shell 脚本,这个 shell 脚本应该: 1. 创建另一个 shell 脚本 2. 将新脚本的 suid 位设置为 root 用户 3. 以当前用户身份运行这个新脚本

我们可以这样做吗?任何人都可以提供任何想法或一些代码片段?

0 投票
1 回答
1464 浏览

php - 带有 C 包装器的脚本上的 Setuid

我只想像本教程一样使用具有 C 包装器的具有 root 权限的 php 脚本。

ls -l :

创建配置.c:

测试.php:

索引.php:

但是当在浏览器上运行 index.php 时,我得到了这个错误:

谢谢

0 投票
1 回答
719 浏览

c - 来自“set-user root”程序的 root 命令

我希望从“set-user root”程序启动一个 root 命令,所以我编写了以下 C 示例程序:

在 Debian 6(64 位)上测试它,我注意到"/bin/sh"作为参数传递,我总是得到一个ROOT SHELL,即使argc == 2

在 Slackware 14(32 位)上,它的行为不同:

如果我将“/usr/bin/dolphin”作为参数,也会有不同的行为。
在 Debian 上我无法让它工作:

在 Slackware 上,它仅适用于argc == 2,因此我无法以 root 身份启动 dolphin。
为什么?

0 投票
2 回答
422 浏览

linux - SUID 许可(及其对所有权的影响)

我目前正在学习 LPIC-1 Linux 认证。为此,我正在使用由 McGraw Hil 发布并由 Robb Tracy 编辑的“一体化”考试指南。(第一版,McGraw Hill 网站上没有勘误表)。

我在网上研究SUID特殊权限时,大部分信息类似于:


程序以文件所有者的权限(而不是执行它的用户的权限)执行。

当对可执行文件设置 SUID 权限时,运行此文件的进程将根据文件所有者(通常是 root)而不是运行可执行文件的用户授予访问权限。


...现在,在我的教科书中,信息的表述略有不同。看哪:

图 1:章节内容

图 2:测验问题 在此处输入图像描述

图 3:测验答案 在此处输入图像描述

我认为,根据我在网上阅读的内容,正确答案是“A”:创建文件的用户仍然是所有者。所有权和许可是两个不同的东西,对吧?因此,虽然 SUID 会向执行二进制文件的用户授予临时权限,但它不应更改二进制文件的所有者。

所以...要么我很困惑,要么这是第一版搞砸了。

兄弟姐妹?帮助!!

0 投票
1 回答
2056 浏览

perl - 如何在 Debian wheezy 中启用 suidperl?

我有一个由 root 拥有并具有 setuid 的 Perl 脚本。

在此脚本中,我正在更改作为参数传递的文件的所有者。

但是在运行这个脚本时,我得到了

有人告诉我,如果启用,则默认情况下使用 suidperl 运行带有 setuid 的脚本。

但我不认为这发生在我的案例中。

任何人都可以在这件事上帮助我吗?我正在使用 Debian wheezy。我的 Perl 版本是 5.14.2。我试过了

但它没有用。

在 Perl 中没有给我与 suid 相关的候选人。

这是我的 Perl 程序

0 投票
2 回答
1349 浏览

macos - 如何通过 DMG 分发带有 suid 位的 OSX 程序?

我有一个小型诊断 OSX 程序 - 一个小型菜单托盘应用程序 - 我需要将其提供给客户。该程序使用 dtrace。因此,它在其 MacOS 目录中有一个辅助可执行文件,其 suid 位设置和所有权设置为 root:wheel。助手的唯一作用是立即使用包含的 dtrace 脚本执行 exec() 到 dtrace。

我的问题是我想不出一个很好的方法来把它交给客户。天真地将其放入 .zip 存档中会消除所有特殊权限。

当我试图将它放入 DMG 时,root:wheel 所有权被重置为我的 (ted:staff)。我发现我应该在 DMG 上使用diskutiltoenableOwnership来让它开始尊重文件对象所有权设置。所以现在我可以看到在 DMG 内部,我的帮助程序具有所需的 root:wheel 和 +s suid 权限集。

但是,现在,我发现当我将应用程序包从 DMG 拖放到桌面上时,权限会再次重置。此外,当我尝试从 DMG 运行应用程序时,它的行为就像帮助程序没有设置 suid 位一样。

稍微退后一步,我不明白为什么这应该起作用。允许开发人员分发具有这样设置的 suid 位的应用程序包似乎是一个令人讨厌且非常明显的安全漏洞。

那么这到底是怎么做的呢?我需要软件包安装程序吗?这会保留 suid 位吗?有人可以教我这应该如何工作吗?

0 投票
1 回答
1381 浏览

python - 以适当的权限运行 pycharm 和 scapy

我想使用 PyCharm 为 python 开发 scapy 网络包。它需要 root 访问权限来制作某些数据包并通过某些端口。我目前正在以 root 身份运行 PyCharm,但我想知道是否有更安全的方法来执行此操作。我尝试使用 SUID 设置 python,这可能更糟,但 scapy 仍然无法运行。任何建议,将不胜感激。

0 投票
2 回答
23777 浏览

google-chrome - 由于 SUID 沙盒问题,编译和执行 Chromium 失败

我正在尝试做的事情:

在 Ubuntu 13.10 上编译和运行 Chromium 源代码

我采取的步骤:

问题 :

获取源代码并编译没有问题。但是,当我执行 chrome 时,出现以下错误

正常执行

使用 --no-sandbox 执行

我尝试解决问题的步骤:

  1. 去了https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment
  2. 阅读
  3. 再次使用 chrome_sandbox 构建 chrome
    • ninja -C out/Debug chrome chrome_sandbox
  4. build/update-linux-sandbox.sh再次执行
  5. 再次检查是否~/.bashrc有以下行
    • export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox

我想知道的:

  1. 在上述情况下我应该怎么做才能执行 Chrome?
  2. --no-sandbox该选项不起作用的原因是什么?

任何意见将不胜感激。

年轻的。

0 投票
0 回答
354 浏览

c++ - 是否可以使用 CAP_NET_RAW 功能使程序解释加载的共享库中的 $ORIGIN ?

我正在编写一个同时具有 Python 和 C++ 库的应用程序。Python 部分需要发送和接收原始数据包,因此我为 Python 可执行文件提供了该CAP_NET_RAW功能。

我还在同一个程序中使用 Cython 加载 C++ 共享库。我想用依赖关系的相对路径编译共享库 - 即,使用$ORIGIN特殊变量。

但是,由于 Python 具有该CAP_NET_RAW功能,Linux 将其视为setuid程序并忽略$ORIGIN共享库的依赖项定义中的字符串,因此无法加载

出于安全考虑,动态链接器不允许$ORIGIN对 set-user 和 set-group ID 程序使用替换序列。对于出现在由DT_RUNPATH动态数组条目指定的字符串中的此类序列,将忽略包含该$ORIGIN序列的特定搜索路径(尽管处理同一字符串中的其他搜索路径)。作为参数传递$ORIGIN给的条目或路径中的序列被视为错误。相同的限制可能适用于在安装了扩展安全机制的系统上具有超过最低权限的进程。DT_NEEDEDdlopen()

这个安全特性给我们带来了很多痛苦。我们必须编译共享库将完整路径依赖项,并且它们在开发机器之间不可移植。

有没有办法在 Linux 中禁用此安全功能,以便$ORIGIN为具有额外功能的程序解释?