问题标签 [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.
python - 使用 os.setuid() [python] 时“不允许操作”
我正在尝试构建一个平台来启动一些脚本。此脚本放置在每个用户的主文件夹中。每次启动都应该使用每个用户 ID 完成,因此,我正在为每个用户执行以下操作:
但是,当 python 尝试这样做时os.setuid( user_id )
,会引发此异常:
顺便说一句,启动这个脚本的用户在 root 组中(在 GNU/linux 操作系统上),它拥有所有的 root 权限。
如果我尝试使用 root 用户启动相同的代码,我会得到一个不同的错误:
如果有人可以帮助我了解正在发生的事情,请...
setuid - 非root用户拥有的setuid程序
我有一个 setuid 程序 (getpwd),只有在 root 拥有时才能按预期运行。
换句话说,当用户“alice”在命令行上执行我的程序时,一切正常
程序在目录中打开一个文件/home/secure
并将内容打印到屏幕上。
但是,当我更改文件的所有权并设置 setuid 时:
以用户“alice”执行时,程序不会运行。
为什么会这样?
perl - 在 perl 脚本中执行 setuid perl 脚本
我有两个 perl 脚本:
getPwd.pl - 返回密码的 setuid perl 脚本
子 getOraPwd{ ... 返回 getOraPwd; } getOraPwd();
testDBConn.pl
我想在 testDBConn.pl 脚本中调用 getPwd.pl 并将 getPwd 脚本的结果分配给 $password 变量以连接到数据库。请记住 getPwd.pl 脚本是 setuid,因此设置 testDBConn.pl 以运行 getPwd.pl
例如。
iphone - 在 setuid iPhone 应用程序中加载 MobileSubstrate
我的 iPod touch (Installer4) 上有一个根应用程序,我希望它加载 MobileSubstrate,这样我就可以开始进行调整以修复它的错误。我知道根应用程序有一个中间可执行文件,能够在应用程序不崩溃的情况下对其设置 6755 权限,在安装程序的情况下,它被命名为 Scythe。我尝试制作一个新的来使用 execve() 加载 MobileSubatrate,但没有成功。该应用程序不会崩溃,它仍然是 root,但 MobileSubatrate 不会加载:/(我知道这是因为 Activator 不起作用)。
这是我的 Scythe.c(基于来自 Icy 的 Trichlorotrifluoroethane.c):
如您所见,我研究了如何使用 execve() 加载 dylib,并且找到了 LD_PRELOAD 和 LD_LIBRARY_PATH,但两者都不起作用。而且我没有安装程序的源代码来执行 dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY),无论如何,如果我有它,我不会问这个问题。
我希望有人能解决这个问题。
c++ - 以 root 身份运行时如何获取用户的语言环境?
我以 root 身份运行,但有用户的 uid(例如504
)。如何计算出用户的语言环境(在我的情况下en_GB
)?以下不起作用:
这en_US
为我输出。
python - python脚本上的Setuid位:Linux vs Solaris
我作为非特权用户在 linux 和 Solaris 上运行这个小 python 脚本:
在运行之前,在脚本上设置了 setuid 位(而不是在 python 解释器上):
在 Solaris 上,由于 setuid 位设置了有效的 uid:
但不是在 Linux 上:
请注意,Solaris 和 Linux 的 python 版本都是 2.6
是否可以让 Python Linux 作为 Python Solaris 工作?
linux - 文件所有者:组在位置 /proc/ 处不会更改/ 在 setuid() 之后?
我需要以 root 身份生成一个进程,然后将其权限授予非 root 用户,因此为了实现这一点,我使用 setbit 作为二进制文件并将所有者更改为 root。然后我以非 root 用户身份生成该进程,最初它以 root 身份启动,在完成必要的任务后,我使用 setuid(getuid()) 调用将其权限授予非 root 用户。发生这种情况的是所有者:位置 /proc/(pid)/ 处所有文件的组仍然是 root:root。由于我的进程产生的线程(在放弃特权后)。在 /proc/(pid)/exe 中拒绝访问。有人知道为什么 setuid 没有在文件位置 /proc/(pid) 处设置所有者:组吗?
linux - 在 Linux 2.6 / IBM DB2 v9.7 上使用“db2 connect to table”为 csh 脚本设置专用用户/密码
我们有许多遗留的 csh 脚本,它们使用“db2 connect to < table >”命令连接到我们的 db2 数据库。他们没有明确使用“db2 connect to < table > user < user > using < password >”,因此连接默认为运行脚本的用户。
我们希望将 db2 连接从运行 csh 脚本的用户帐户更改为专用 db2 帐户(称为“dblegacy”)。
我尝试编写一个以root身份加载/运行的包装器可执行文件,然后在执行csh脚本之前将帐户更改为“dblegacy”。唯一的问题是 Linux (ld.so) 从 setuid() 帐户更改为“dblegacy”后加载的所有脚本/文件中删除 LD_LIBRARY_PATH 环境变量。当然,csh 脚本需要共享库。
所以,我需要一种让“db2 connect to table”使用或默认使用这个“dblegacy”帐户的方法。
linux - RealUID,保存的 UID,有效的 UID。这是怎么回事?
这是一个 set-root-uid 程序
源代码:
输出
我的问题
手册页指出 setuid 将更改真实的、保存的和有效的 uid。所以在调用之后setuid(1000)
,三个都变成了1000
。那setuid(0)
让我怎么euid
改0
?
linux - ELF 中的 set-uid 和 INTERP(动态链接器)的相对路径的安全问题
ELF 二进制文件的 INTERP 部分中的 set-uid 和相对路径的组合非常危险。
我不太确定应该如何以及在哪里报告这个问题,但在我看来,这就像一个关于 linux/glibc 中的动态链接如何工作的一般安全问题,所以让我解释一下它是什么:
考虑构建一个动态链接的二进制文件并在 ELF INTERP 部分指定一个相对路径(使用 --dynamic-linker gcc 选项),以便您可以使用动态链接的商业应用程序重新分发自定义 glibc 版本(不允许静态链接反对 LGPL glibc,但仍然需要使您的二进制文件在具有不同 glibc 版本的不同 linux 发行版中工作)。
如果您将二进制文件chown 为root,并将set-uid 标志放在您的二进制文件上,它实际上就变成了一个rootkit。从不同目录执行它时,允许您替换动态链接器可执行文件,该可执行文件将以 root 权限执行。
为了证明这一点,请查看以下 C 代码 (issue.c):
如果您现在像这样执行 set-uid 二进制文件
甚至只是这样做
而不是得到你所期望的,例如:
你得到:
现在关键是你可以用你喜欢的任何东西替换 ld-linux-x86-64.so.6 二进制文件。
如果设置了 set-uid 标志,则通过不解析 RPATH 中的 $ORIGIN 或忽略 LD_LIBRARY_PATH 似乎已经解决了类似的问题。
所以我想知道是否必须忽略 ELF 中的 INTERP,只要设置了 set-uid 标志(即使用默认动态链接器 - /lib32/ld-linux.so.2 或 /lib64/ld-linux-x86- 64.so.2)?
那么你怎么看,应该在哪里修复或报告 - 在 glibc 或内核中?