问题标签 [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.
linux - 带有 setuid 二进制文件的 LD_PRELOAD
我正在尝试使用LD_PRELOAD
具有 setuid 权限的应用程序预加载库。起初尝试过LD_PRELOAD
,似乎它被 setuid 二进制文件忽略了,尽管当我与其他人一起尝试时它正在工作ls
,dir
等等。
从 LD_PRELOAD 的文档中:
我尝试按照上面的文档将库放入/usr/lib
,/usr/local/lib
和/usr/lib64
setuid 权限,但它似乎仍然不起作用。如果我LD_PRELOAD
在标准目录中使用 setuid 有库的情况下没有给出路径,它似乎无法找到该库。如果我给它路径,它不会做任何事情。
setuid 二进制文件是在非 root 用户 shell 中运行的 root 权限二进制文件。有什么想法吗?不确定我是否缺少路径、环境变量,或者我误解了上面的文档。
编辑:请求的权限是:
图书馆:
应用程序:
c - 在 C 中运行 setuid 程序的正确方法
我有一个权限为 4750 的进程。我的 Linux 系统中存在两个用户。root 用户和 appz 用户。该进程继承了以“appz”用户身份运行的进程管理器的权限。
我有两个基本的例程:
我的流程如下:
如您所见,我想以 root 身份执行一些命令。我正在尝试暂时放弃权限,如果任务需要 root 访问权限,我将命令包装在 do_root 和 undo_root 调用之间。
但是,我的程序似乎无法正常工作。
规范的方法是什么?
c - 在 seteuid(0) 之后调用 popen 失败
我的 C 代码做了一个
即使我用 seteuid(0) 调用它也会失败。(可执行文件已打开 setuid)。
似乎 seteuid 和 popen 不能一起工作。
当 popen 调用它时,它会在 stderr 中打印以下消息
换句话说,popen“成功”,但是因为创建了一个新的shell,所以没有维护权限并且用例失败了。
我该如何解决这个问题?
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 访问权限。有没有办法防止这种情况?
ios - 使用 NSUserDefaults 校对设置/保存 UISwitch 状态
为越狱设备开发。
我在这里寻找我的问题的灵魂。使用 NSUserDefaults 存储 UISwitch 状态,但人们说很多代码不起作用。
我正在使用 UISwitch 加载/卸载 iOS 的启动守护程序。我已经非常接近了,但开关状态不会保存。这是我使用的代码。
bool 值写在我的应用 plist 中。我似乎不知道我做错了什么。我从没有运气的溢出问题中拼凑了一些例子。不管命令是否失败,交换机都应该保存。
有人可以解释并告诉我应该编辑什么。这一直让我发疯。
c - setreuid 调用无法重新建立进程权限
我对 setreuid 有点困惑。
场景:一个进程以普通用户身份运行(id:cateof),但在很短的时间内需要以 root 身份运行。我必须从 cateof 提升对 root 的权限,然后再恢复为普通用户。我的第一个想法是在 setreuid(0, 0); 之间嵌套我的“根调用”。和一个 setreuid(ruid, euid); 就够了,但我错了。回到普通用户的唯一方法是在“root call”之后直接调用 setreuid(ruid, euid) 两次。
这是代码:
如果我不在最后一行调用setreuid(geteuid(), getuid()),则该进程将继续以 root 身份运行。为什么我需要调用它两次???
c - 我可以将 argv 从 main 传递给 execv 吗?
该execv()
函数需要一个终止字符串的数组,NULL
但不接受参数的数量。它使用标记值(NULL
指针)来确定数组何时结束。
状态的手册页execv()
...
按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。指针数组必须以 NULL 指针终止。
......所以我的问题是......
我想传递argv
frommain()
到execv()
。
我可以确定进入 main 的 argv 会被 NULL 指针终止吗?也就是说,我可以放心argv[argc] == NULL
还是必须分配我自己的 size + 1char*
数组并放入索引?argc
NULL
argc
如果我可以放心,它是否记录在某个地方?
谢谢,~埃里克
c - setgid() 失败 - 不允许操作
我在 C 中创建了一个 setuid 程序。可执行文件如下所示:
我执行程序userA/users
并尝试将 uid/gid 设置为userB/otherUsers
. setgid()
失败,不允许操作。userA
不是otherUsers
我如何更改有效 gid 的一部分?
[编辑]这是我所做的一个小总结。我的 C 程序以 userA 身份执行,将 uid 和 gid 设置为 userB 并创建一个文件。与预期不同,该文件属于组 root,因为setgid()
失败。
c - 在 fork() 之后使用 setuid()
我有一个服务器正在处理不同用户的请求。连接到客户端后,我分叉了一个子进程并用于setuid()
切换到客户端用户。看起来它还设置了父级的 uid。
如何仅为子进程设置 uid?
[编辑]我把所有东西放在一个小例子中,它工作正常。感谢您的提示fork()
;
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) 程序中被普通用户调用时会失败?