问题标签 [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.
linux - 如何使用 $ORIGIN 和 suid 应用程序?
我正在使用启用了 setcap CAP_NET_RAW 的 python。我的 python 脚本导入了一个共享库,它的 RPATH 中有 $ORIGIN。由于我的 python 现在是一个 suid 应用程序,$ORIGIN 没有被评估并且库没有正确加载(这是由于glibc 中发现的安全漏洞)。有没有办法告诉链接器我的库路径是安全的并仍然加载库?
还有一些注意事项:
- 我只在开发阶段需要这个功能。我不是在寻找生产解决方案。
- 以 root 身份工作时,一切正常。
- 我不想以 root 身份工作。
谢谢,戴夫
shell - gdb可以调试suid root程序吗?
我做了一个调用 setuid(0) 和 execve("/bin/bash",NULL,NULL) 的程序。
然后我做了chown root:root a.out && chmod +s a.out
当我执行时,./a.out
我得到一个 root shell。但是,当我这样做时,gdb a.out
它会以普通用户身份启动该过程,并启动一个用户 shell。
那么...我可以调试一个 suided 根程序吗?
php - 以 root 身份从 PHP/Apache、exec() 或 system() 程序:“sudo:无法打开审计系统:权限被拒绝”
我已经花了半天时间试图弄清楚这一点,并且我已经做了很多研究。我也熟悉有关该主题的许多现有讨论,例如: 如何以 root 身份运行 PHP exec()?
不幸的是,我发现的任何建议似乎都不适合我。
首先,我正在为规范写一些东西,所以我无法避免这样做。此外,所有机器都将存在于未连接到 Internet 的专用网络上。虽然拥有一定的安全性很重要,但最重要的是要防止错误。我的目标是配置一些“瘦服务器”。通过 PHP 脚本,我需要能够更改网络配置(静态或 DHCP)并重新启动网络。
我尝试的第一件事是编写一个 SUID root 的 C 程序。它读取、修改和写入网络配置文件。如果我以普通用户身份运行它,它工作得很好,可以访问和修改 root 拥有的文件。但是如果我从 PHP 脚本运行它,我会遇到访问错误。似乎 Apache 以某种方式阻止了 SUID root。
根据其他讨论的建议,我尝试了“sudo”方法。暂时,我将它添加到 /etc/sudoers: apache ALL=(ALL) NOPASSWD: ALL
我得到的错误是:sudo:无法打开审计系统:权限被拒绝
根据this page in Russian,这是因为像RHEL(我正在使用Fedora)这样的系统默认为sudoers的requiretty。所以我将此行添加到 /etc/sudoers: Defaults !requiretty
我仍然得到同样的错误。sudo:无法打开审核系统:权限被拒绝
我在这里完全受阻。也就是说,除非我想以 root 身份运行 Apache 本身,否则这会比其他任何事情都更不方便。
有人可以在这里提出任何建议吗?我意识到我正在尝试做的事情很奇怪。而且我敢打赌,你们中的一些人会向我指出一些用于远程配置 Fedora 机器的现有系统(现在我想到了,我现在就去研究它)。
顺便说一句,我正在运行 SELinux,因为这就是 Fedora 15 默认配置的方式。
谢谢。
编辑:
我找到了这个教程:
http ://www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/
不幸的是,当我运行“setsebool httpd_disable_trans 1”时,我收到错误:
无法更改活动布尔值:无效布尔值
我还尝试直接编辑不存在的“/etc/selinux/targeted/booleans”,然后重新启动apache,但这也不起作用。
macos - 权限如何在 Mac OS X 中传播?
因此,如果我在我的 mac 上创建了一个程序 suid root,并且该程序在 /bin/sh 上运行 exec,则 shell 不是 root,而如果我在 Linux 上执行相同的操作,则 shell 是 root。Mac 不会像 Linux 那样传播权限吗?还是 suid 位有什么不同?我的理解是具有 suid root 的程序以 root 权限运行。并且由于调用 /bin/sh 的根 shell 将创建另一个根 shell,所以在 /bin/sh 上调用 exec 的 suid 根程序不应该创建一个根 shell 吗?
c - Run SUID C scripts under Apache
i have a cgi script in c the same as this:
after compile and set SUID:
if run this in shell, every thing seem okay :
but if run it under apache and in cgi-bin, he say, can not open file. although the EUID seem to be okay :
Thanks!
python - 这是(Python)脚本的安全 suid/capability 包装器吗?
(注意:我想到的是 Linux,但这个问题可能适用于其他平台。)
问题: Linux 不执行 suid #! 脚本也不会在它们上激活“Linux 功能”。
为什么我们会遇到这个问题?因为在内核解释器设置运行脚本期间,攻击者可能已经替换了该文件。如何?以前受信任的 suid/capability-enabled 脚本文件可能位于他可以控制的目录中(例如,可以删除不属于他的受信任文件,或者该文件实际上是他拥有的符号链接)。
正确的解决方案:在以下情况下使内核允许 suid/cap 脚本:a) 很明显调用者对脚本文件没有权力 - 或者 - 像其他几个操作系统一样 b) 将脚本作为 /dev/fd/ 传递x,指的是最初内核打开的可信文件。
我正在寻找的答案:对于无法做到这一点的内核(所有 Linux),我需要一个安全的“现在”解决方案。
我有什么想法?一个二进制包装器,它以安全的方式执行内核不执行的操作。
我想
- 听取已建立的(Python)脚本包装器的消息,这些包装器将 Linux 功能和可能的 suid 从脚本文件传递到解释器以使其有效。
- 获得对我在下面提出的包装器的评论
sudo 的问题:sudo 不是一个好的包装器,因为它无助于内核不陷入刚刚解释的“脚本被替换”陷阱(警告下的“man sudo”是这样说的)。
建议的包装器
- 实际上,我想要一个生成包装器的小程序
- 命令行,例如:sudo suid_capability_wrapper ./script.py
- script.py 已经设置了 suid 位和功能(没有功能,只是信息)
- 生成器 suid_capability_wrapper 确实
- 生成 C(?) 源代码并编译
- 将输出编译为: default:
basename script.py .py
,或参数 -o - 像 script.py 一样设置包装器所有者、组、suid
- 设置允许的功能,如 script.py,忽略可继承和有效的上限
- 如果解释器(例如 /usr/bin/python)在其可继承集中没有相应的大写字母,则发出警告(这是系统限制:没有 suid-root 否则无法传递能力)
- 生成的代码会:
- 检查文件描述符 0、1 和 2 是否打开,否则中止(可能为过于疯狂的环境条件添加更多检查)
- 如果编译的目标脚本是用相对路径编译的,则通过 /proc/self/exe 确定 self 的位置
- 将自己的路径与脚本的相对路径结合起来找到它
- 检查目标脚本所有者、组、权限、大写、suid 是否仍然像原来的(编译的)[这是我想要包括的唯一非必要的安全检查:否则我信任该脚本]
- 将继承的能力集设置为允许的能力集
- execve() 解释器类似于内核所做的,但使用我们知道的脚本路径和我们得到的环境(脚本应该照顾环境)
suid_capability_wrapper 可能会打印一堆注释和警告,以教育用户:
- 确保没有人可以操纵脚本(例如世界可写)
- 请注意 suid/capabilities 来自包装器,没有人关心脚本文件的 suid/xattr 挂载
- 解释器(python)是 execve()ed,它会从这里得到一个肮脏的环境
- 它还将通过它传递标准流程环境的其余部分,即…………(阅读 exec 手册页开始)
- 使用 #!/usr/bin/python -E 使 python 解释器免受环境变量的影响
- 在脚本中自己清理环境,或者注意有很多代码作为副作用运行,它们确实关心其中一些变量
gnu-screen - 运行 GNU Screen suid root 是使多用户模式工作的唯一方法吗?
我正在运行 Ubuntu 11.10 和 GNU Screen 版本“4.00.03jw4”,并且正在尝试使用多用户模式。
以下过程对我有用:
这是令人沮丧的。我一直在努力寻找,但找不到更好的方法。有吗?
maven - 我的服务器和本地之间的不同对象用于 Maven 部署
我使用 maven 和 weblogic-maven-plugin 2.8.0-SNAPSHOT 在 weblogic 服务器(8.1)上部署 .war。
但是我遇到了这个问题:
我知道服务器和本地的 ObjectName 版本不同,但我不知道如何更改它。
谢谢。
linux - Linux SUID config 导致二进制文件无法执行
我有一个二进制文件(名称是 bmu),在调用 statfs 函数时需要 root 权限。
操作系统是SuSE Linux 2.6.16.60-0.21-smp
运行 bmu 的用户是 test 并且是非 root 用户
我已经测试了 3 种场景。
--->场景1
如果bmu没有配置SUID,可以执行bmu但调用会失败。
--->场景2
如果bmu配置了SUID,当bmu通过test运行时会失败,提示“DBMS API Library 'libclntsh.so' loading failed”
--->scenario 3
如果 bmu 以 root 运行,则执行成功。当然,无论是否配置了 SUID。
从场景二看,好像是LD_LIBRARY_PATH
config的问题,但从场景一看,这应该不是LD_LIBRARY_PATH
config的问题。从场景 3 中,我们可以发现 bmu 可以被 root 执行。
只有场景2有问题,所以有人可以提出一些建议吗?谢谢!
python - 以不同的权限运行 python
我正在尝试以其他用户(不是 root)身份运行 python 脚本,该用户也是没有 shell 的系统用户。我知道我不能直接在脚本上设置 suid 标志,所以我写了一个 C++ 包装器。
包装器.cpp
并设置以下权限
最后,要尝试一下,我有一个 python 脚本
如果这很重要,则具有以下权限
现在,当我以用户“测试”的身份运行整个事情时,我看到了:
如您所见,有效用户仍然是“测试”。有人可以指出我做错了什么,因为我已经看过几个例子,它们似乎都或多或少地展示了完全相同的东西?