问题标签 [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 投票
2 回答
2933 浏览

windows - 对于基于 Unix 平台的 SUID,我在 MS Windows 平台上有哪些选择?

要理解我在问什么,区分 Unix 中 SUID 的几种用法很重要。

我有一个项目使用用户 PATH 中的可执行文件,该可执行文件归项目所有,并且设置了 SUID 位。这样,当它运行时,它会在文件所有者的上下文中运行,而不是在调用用户的上下文中运行。通过这种方式,它可以访问用户无法访问的内容,从而通过正常的文件系统保护来保护这些内容不受用户的影响。这工作得相当好。计划是将项目迁移到客户端-服务器架构,但这需要一些时间。同时,如何在 Windows 系统上复制这种行为?

请注意,项目的可执行文件不会调用 SETUID 库调用,但坦率地说,在我看来,考虑到项目的功能,这将是一个很棒的功能。该项目不需要系统根权限。第一个安全问题是它需要保护自己的文件不受用户(只是文件所有者以外的任何用户)的影响,如果它能够切换到“用户上下文”来访问文件,那就太好了系统就好像它是调用用户一样。(通过这种方式,它可以更容易地确定项目可以触摸什么,什么不可以。)

该项目是用 C 和 Java 结合编写的 - 带有 SUID 集的 C 程序调用 Java 代码...

我很想知道所有这些机制,并且特别关注那些:

  1. 适用于 C 和 Java,并且;
  2. 易于为非 Windows 程序员实现,并且;
  3. 需要 Windows 独有的最少编码。

如果某些解决方案更好,请分享您在这方面所知道的任何想法。

笔记:

  1. LogonUser:需要纯文本密码。这怎么可能是答案?
  2. RunAs:需要在提示时输入密码!...与 LogonUser 一样,只会更糟;我不明白这是一个答案。
0 投票
2 回答
2664 浏览

ubuntu - 编译shell脚本以便可以使用suid

我需要编写一个脚本,以便权限较少的用户可以执行它。由于您不能 suid 脚本并且只能 suid 可执行文件,因此我想使用通用脚本编译器“shc”来创建可执行文件,然后设置该可执行文件的 suid 位。唯一的问题是,在 ubuntu jaunty 上我找不到 shc,或者当我执行 apt-get install shc 时,它又找不到了。是否有使用 shc 的替代方法(编写我自己的 C 程序除外)或者它是否包含在我可以添加的存储库中,以便 apt-get 找到它?

0 投票
1 回答
3126 浏览

python - Python PAM 模块的安全问题?

我有兴趣编写一个 PAM 模块,该模块将利用流行的 Unix 登录身份验证机制。我过去的大部分编程经验都是在 Python 中进行的,而我与之交互的系统已经有了 Python API。我四处搜索并找到pam_python,它允许 PAM 模块调用 python 解释器,因此允许 PAM 模块基本上Python 编写。

但是,我了解到,当允许用户调用以比用户本身更高的访问级别运行的 Python 代码时存在安全风险,例如 SUID Python 脚本。这些问题是否也适用于 Python PAM 模块?

0 投票
7 回答
29957 浏览

c++ - 如何从 C++ 程序内部重新启动 Linux?

我有一个 Qt 4 GUI,我需要在下拉菜单中有一个选项,允许用户选择重新启动计算机。我意识到这似乎与以其他方式重新启动计算机的能力无关,但选择需要留在那里。我尝试使用 system() 调用以下命令:

  1. suid-root shell 脚本
  2. 一个非 suid 的 shell 脚本
  3. suid-root 二进制程序

他们都只是因为

打印。使用 system() 直接调用 reboot 做同样的事情。我并不是特别喜欢使用 system() 来做到这一点,但这似乎是最直接的选择。

如何从 GUI 重新启动系统?

0 投票
1 回答
1468 浏览

perl - taint-mode perl:通过 system() 运行外部程序时保留 suid

我正在尝试向旧脚本添加功能。该脚本是 suid,并使用 perl -T(污点模式:man perlsec),以获得额外的安全性。我需要添加的功能是在 Python 中实现的。

我的问题是我无法说服 perlsec 保留 suid 权限,无论我如何清洗环境和命令行。

这是令人沮丧的,因为它为其他二进制文件(例如 /bin/id)保留了 suid。/usr/bin/perl 是否存在未记录的特殊情况?这似乎不太可能。

有谁知道使这项工作的方法?(原样:我们没有资源来重新设计整个事情。)


解决方案:(根据@gbacon)

给出了想要的结果!


这是我的脚本的精简版,它仍然显示我的问题。

这是输出:

0 投票
2 回答
15532 浏览

linux - 如何调试需要以用户身份从 gdb (Eclipse) 以 root 身份运行的程序(设置 gdb suid root?)

我需要使用 Eclipse (gdb) 在 Linux 上调试程序。该程序以root身份运行并且非常大。带有调试符号的二进制文件大小约为 250MB,启动后有 60 多个运行线程。

我正在考虑最好的解决方案:

  1. 使用 gdbserver
  2. 以 root 身份运行 Eclipse
  3. 设置 gdb suid

我认为 1 号(gdbserver)将是最好的解决方案,不幸的是它不可靠。gdb 和 gdbserver 之间的连接丢失。我认为eclipse <-> gdb <-> gdbserver之间传输的大量数据存在问题。

数字 2(以 root 身份运行 eclipse)意味着以 root 身份运行每个进程,因此也会干扰版本控制系统,因为 Eclipse 插件将使用 root 用户而不是我的用户来更改版本控制的文件。

我没有尝试 3 号(suid gdb)。你怎么看待这件事?它真的有效吗?我知道 suid root gdb 与根本没有 root-Password 一样安全,但该机器仅供我用于开发和调试。当然,可以有一个“启用/禁用”脚本,仅在必要时设置 suid 位。

你有什么其他的建议?

0 投票
1 回答
641 浏览

permissions - 在文件上设置 SUID 标志?

我有一个要设置 SUID 标志的 python 文件。因此,如果任何普通用户执行它,它将以 root 身份执行。我知道这是一个安全问题,但我仍然需要设置 SUID 标志。

0 投票
3 回答
5431 浏览

python - SUID 的语义(Set-User-ID)

看来我在理解 SUID 位的语义时遇到了一些麻烦,也许有人可以帮我澄清一下情况。

我对SUID位语义的理解如下:当我用一个文件设置SUID位时,文件将作为文件的所有者而不是文件的调用者来执行。因此,为了测试这种行为,我编写了以下 python 脚本:

之后,我使用相应的组“testuser”创建了一个名为“testuser”的用户,并调整了文件权限(chown testuser 文件、chgrp testuser 文件、chmod u+s、g+x 文件)。接下来,我将我的主用户添加到“testuser”组,以便我可以作为该组的成员执行该文件。毕竟文件权限看起来像这样:

因此,当我以 testuser 身份登录时,脚本会产生输出:

...当我以主要用户身份运行脚本时,脚本输出:

现在据我了解,该脚本应该在后面的执行中以具有 uid 1001(文件所有者)的用户身份运行。我是不是把整个概念都弄错了,或者我的错误在哪里?

0 投票
1 回答
9014 浏览

c - seteuid/geteuid:程序总是有root id

我目前正试图弄清楚 SUID 位和相应的函数 seteuid 和 geteuid 是如何工作的。所以我写了这个小程序:

编译它,将其所有者更改为 root,并将文件所有者的 s 位更改为:

但随后产生的输出如下所示:

这是我不明白的。根据我的发现,第一次调用 geteuid 实际上应该返回该程序调用者的用户 ID(即 chris - 我的 ID 为 1000),但程序将 root 显示为有效用户 ID。谁能解释我为什么会这样?

0 投票
1 回答
1911 浏览

objective-c - NSTask、命令行工具和root

我正在开发一个需要使用 dd 的应用程序(我使用应用程序包中的 shell 脚本执行此操作,该脚本从应用程序本身收集参数,进行一些检查,然后启动 dd)。

要进行此操作,我需要使用 root 调用 dd,并且我已经查看了 StackOverflow 上的几个解决方案。在我看来,最简单的实现是http://www.sveinbjorn.org/STPrivilegedTask

问题是我的 NSTask 进行了一些复杂的读/写操作(STPrivilegedTask 中不存在)并且不需要全部特权。

因此,我在 c 中编写了一个小型辅助工具,它使用我的应用程序中的正确参数调用我的脚本。我认为的解决方案是在运行我的小型辅助工具后使用 STPrivilegedTask 到 SUID,这样我就可以使用 root 启动它(以及我的脚本和 dd),并且在成功启动后不久我将辅助工具设置为非 SUID(如果有任何错误,我也会这样做,在应用程序退出、应用程序启动等时更安全)。

我实现了它并且工作得很好,也许它并不完美,但我认为这一切都在包中,并且在 SUID 中使用帮助工具只是为了启动听起来足够安全。

有什么想法吗?

谢谢!