问题标签 [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.

0 投票
5 回答
18911 浏览

linux - 带有 setuid 二进制文件的 LD_PRELOAD

我正在尝试使用LD_PRELOAD具有 setuid 权限的应用程序预加载库。起初尝试过LD_PRELOAD,似乎它被 setuid 二进制文件忽略了,尽管当我与其他人一起尝试时它正在工作lsdir等等。

从 LD_PRELOAD 的文档中:

我尝试按照上面的文档将库放入/usr/lib,/usr/local/lib/usr/lib64setuid 权限,但它似乎仍然不起作用。如果我LD_PRELOAD在标准目录中使用 setuid 有库的情况下没有给出路径,它似乎无法找到该库。如果我给它路径,它不会做任何事情。

setuid 二进制文件是在非 root 用户 shell 中运行的 root 权限二进制文件。有什么想法吗?不确定我是否缺少路径、环境变量,或者我误解了上面的文档。

编辑:请求的权限是:

图书馆:

应用程序:

0 投票
3 回答
24424 浏览

c - 在 C 中运行 setuid 程序的正确方法

我有一个权限为 4750 的进程。我的 Linux 系统中存在两个用户。root 用户和 appz 用户。该进程继承了以“appz”用户身份运行的进程管理器的权限。

我有两个基本的例程:

我的流程如下:

如您所见,我想以 root 身份执行一些命令。我正在尝试暂时放弃权限,如果任务需要 root 访问权限,我将命令包装在 do_root 和 undo_root 调用之间。

但是,我的程序似乎无法正常工作。

规范的方法是什么?

0 投票
1 回答
1246 浏览

c - 在 seteuid(0) 之后调用 popen 失败

我的 C 代码做了一个

即使我用 seteuid(0) 调用它也会失败。(可执行文件已打开 setuid)。

似乎 seteuid 和 popen 不能一起工作。

当 popen 调用它时,它会在 stderr 中打印以下消息

换句话说,popen“成功”,但是因为创建了一个新的shell,所以没有维护权限并且用例失败了。

我该如何解决这个问题?

0 投票
1 回答
4552 浏览

c - 如何在非 root 用户的程序中设置 setuid 位?

我正在尝试使用 setuid 位设置一个 python 脚本可执行文件。该程序属于用户“bgmc”,必须在目录“/home/bgmc”中创建一些文件,但被另一个用户“client”调用。实际上,我不希望用户“客户端”更改程序创建的文件。我使用 c-wrapper 来调用程序(请参阅shell 脚本上的 setuid):

我设置了程序的 setuid 位。当c编译的程序属于root时,程序运行良好,并创建了预期的文件。那么 c 编译程序的属性是:

但是,当我将 myprogram 的用户组更改为 bgmc:bgmc 时,程序无法再创建文件:“权限被拒绝”。我试图改变这一行:

和:

因为 1002 是“bgmc”的用户 ID(我为此使用了命令“id -u bgmc”),但这没有帮助。

我宁愿不授予对该程序的 root 访问权限。有没有办法防止这种情况?

0 投票
0 回答
995 浏览

ios - 使用 NSUserDefaults 校对设置/保存 UISwitch 状态

为越狱设备开发。

我在这里寻找我的问题的灵魂。使用 NSUserDefaults 存储 UISwitch 状态,但人们说很多代码不起作用。

我正在使用 UISwitch 加载/卸载 iOS 的启动守护程序。我已经非常接近了,但开关状态不会保存。这是我使用的代码。

bool 值写在我的应用 plist 中。我似乎不知道我做错了什么。我从没有运气的溢出问题中拼凑了一些例子。不管命令是否失败,交换机都应该保存。

有人可以解释并告诉我应该编辑什么。这一直让我发疯。

0 投票
1 回答
2553 浏览

c - setreuid 调用无法重新建立进程权限

我对 setreuid 有点困惑。

场景:一个进程以普通用户身份运行(id:cateof),但在很短的时间内需要以 root 身份运行。我必须从 cateof 提升对 root 的权限,然后再恢复为普通用户。我的第一个想法是在 setreuid(0, 0); 之间嵌套我的“根调用”。和一个 setreuid(ruid, euid); 就够了,但我错了。回到普通用户的唯一方法是在“root call”之后直接调用 setreuid(ruid, euid) 两次。

这是代码:

如果我不在最后一行调用setreuid(geteuid(), getuid()),则该进程将继续以 root 身份运行。为什么我需要调用它两次???

0 投票
1 回答
1828 浏览

c - 我可以将 argv 从 main 传递给 execv 吗?

execv()函数需要一个终止字符串的数组,NULL但不接受参数的数量。它使用标记值(NULL指针)来确定数组何时结束。

状态的手册页execv()...

按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。指针数组必须以 NULL 指针终止。

......所以我的问题是......

我想传递argvfrommain()execv()

我可以确定进入 main 的 argv 会被 NULL 指针终止吗?也就是说,我可以放心argv[argc] == NULL还是必须分配我自己的 size + 1char*数组并放入索引?argcNULLargc

如果我可以放心,它是否记录在某个地方?

谢谢,~埃里克

0 投票
1 回答
15422 浏览

c - setgid() 失败 - 不允许操作

我在 C 中创建了一个 setuid 程序。可执行文件如下所示:

我执行程序userA/users并尝试将 uid/gid 设置为userB/otherUsers. setgid()失败,不允许操作。userA不是otherUsers我如何更改有效 gid 的一部分?


[编辑]这是我所做的一个小总结。我的 C 程序以 userA 身份执行,将 uid 和 gid 设置为 userB 并创建一个文件。与预期不同,该文件属于组 root,因为setgid()失败。

0 投票
0 回答
3962 浏览

c - 在 fork() 之后使用 setuid()

我有一个服务器正在处理不同用户的请求。连接到客户端后,我分叉了一个子进程并用于setuid()切换到客户端用户。看起来它还设置了父级的 uid。

如何仅为子进程设置 uid?


[编辑]我把所有东西放在一个小例子中,它工作正常。感谢您的提示fork()

0 投票
1 回答
6519 浏览

c - 使用 setuid 调试 setuid 程序/“权限被拒绝”

这实际上是一个由三部分组成的问题,我将在下面解释,但问题是:

  • 使用gdb,我怎样才能以root权限运行程序的一部分,而其余的则以正常权限运行?
  • 为什么我会在 setuid (to root) 程序中使用 mkstemp 在 /tmp 中创建文件时获得“权限被拒绝”?
  • 为什么“sudo program_name”的执行与 ./program_name 与 setuid 到 root 有任何不同?

我有一个在 Linux(多个发行版)上运行的 C 程序,通常由具有正常权限的用户运行,但程序的某些部分必须以 root 权限运行。为此,我使用了 set-UID 标志,就它而言,它工作得很好。

但是,现在我想以普通用户权限调试程序,我发现我有一个 catch-22。我刚刚添加了一个函数来创建一个临时文件(/tmp/my_name-XXXXXX),并且该函数从程序中的许多点调用。无论出于何种原因,此函数在运行时都会发出以下消息:

(当然,实际名称会有所不同。)然而,该程序能够执行原始套接字功能,我绝对知道除了 root 之外的用户无法完成。(如果我删除 setuid 标志,程序会惨遭失败。)

如果我在没有 sudo 的情况下通过 gdb 运行这个程序,它会在原始套接字的东西上死掉(因为 gdb 显然不 - 或者可能不能 - 尊重程序上的 setuid 标志)。如果我在“sudo gdb”下运行它,那么一切正常。如果我将它作为“sudo ./my_name”运行,一切正常。

这是该程序的 ls -l 输出:

所以我的问题,没有特别的顺序:

  • (如何)我可以在 gdb 下运行具有不同有效 UID 的程序的不同部分吗?
  • 当 ./program 已将 set-uid 设置为 root 时,为什么“sudo ./program”与“./program”不同?
  • 为什么 mkstemp 在 setuid (to root) 程序中被普通用户调用时会失败?