Articles of setuid

如何使用Java扫描根目录中的SUID文件并访问其属性?

我是UNIX系统的新手。 我负责在根目录中查找SUID文件,并访问其文件属性以完成某些操作。 有反正我可以写一个基于Java的应用程序来search文件的粘滞位,并访问其属性(文件权限/创builddate等)? **为此,我被要求不要在UNIX中使用“find”命令。 请帮忙。

setuid()返回0,但没有效果

我有以下代码: #include <unistd.h> #include <stdio.h> #include <stdlib.h> void main(int argc, char* argv[]) { printf("uid=%u euid=%u\n", getuid(), geteuid()); printf("%d = setuid(euid)\n", setuid(geteuid())); printf("uid=%u euid=%u\n", getuid(), geteuid()); } 编译并运行这种方式: val@particle:/tmp $ sudo gcc foo.c val@particle:/tmp $ sudo chown dev-misc:dev-misc a.out val@particle:/tmp $ sudo chmod u+s a.out val@particle:/tmp $ ./a.out uid=1000 euid=1006 0 = setuid(euid) uid=1000 euid=1006 为什么uid保持不变? […]

Linux,GAIN root访问的唯一方法是执行一个setuid-root文件?

我的假设是正确的,在Unix / Linux上,增加root访问权限的唯一方法是执行一个setuid根文件? 换句话说,系统调用setuid() , setgid()都是关于DROPPING权限的? 请注意,我的问题不是关于利用。

文件所有者:组不会更改位置/ proc / <pid> /后setuid()?

我有要求产生一个进程作为一个根,然后将其权限放到非root用户,所以要实现这个我使用setbit的二进制文件,并将所有者更改为根。 然后我产生了一个非root用户的进程,最初它开始作为根,做了必要的任务之后,我用setuid(getuid())调用将其权限放到非root用户。 这是什么发生的所有者:位置/ proc /(pid)/的所有文件的组/保持根:根。 由于这是由我的进程(删除特权后)产生的线程。 在/ proc /(pid)/ exe中有访问被拒绝的情况。 任何人有任何想法为什么setuid不设置所有者:组在文件位置/ proc /(pid)?

setuid()C函数也改变euid值?

这个样本suid程序 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> void main() { int ret; printf("uid=%d, euid=%d\n", getuid(), geteuid()); ret = setuid(1000); printf("uid=%d, euid=%d\n", getuid(), geteuid()); } 拥有“noemi”(id = 1001) sarah-$ logname sarah sarah-$ ls -l p.bin -rwsr-xr-x 1 noemi noemi 7028 17 dic 10.30 p.bin 如果从用户'sarah'(id = 1000)euid开始更改为1000 为什么? p.bin只改变uid(这应该是没有效果的,因为当p.bin由'sarah'启动时,uid是1000): sarah-$ ./p.bin uid=1000, euid=1001 uid=1000, […]

第二个getpwuid调用似乎覆盖旧的值

下面是一个小的C程序,当文件设置了setuid标志时,打印(当然,应该打印)进程的真实和有效的ID。 在这个程序中,当我第二次调用getpwuid (L.No 38)时,它倾向于覆盖在L.No 24中获得的variablesrealUserName的值。我无法解释这种行为。 这是预期的行为,为什么? 我正在尝试在Linux的一个盒子(RHEL 2.6.18-371.1.2.el5)。 1 /* Filename: test.c 2 * Notes: 3 * 1] ./test owned by user cadmn (userID: 3585) 4 * 2] ./test run by user pmn (4471) 5 * 3] ./test has the setuid bit switched-on. 6 */ 7 #include <stdio.h> 8 #include <pwd.h> 9 #include <sys/types.h> 10 […]

在c99中被废弃吗?

我想编译一个包含调用getresuid的函数。 但是它会产生以下警告: setuid.c:8:3: warning: implicit declaration of function 'getresuid' is invalid in C99 [-Wimplicit-function-declaration] getresuid(&ruid, &euid, &suid); ^ Undefined symbols for architecture x86_64: "_getresuid", referenced from: _main in setuid-ba46f8.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 为什么在架构x86_64中找不到符号的链接器错误? 你如何才能成功链接? 如果有帮助,我的原始代码是: #define _GNU_SOURCE #include <stdio.h> #include <unistd.h> #include […]

PAM堆栈是否始终以root身份运行?

我正在为Linux PAM编写一个模块,它使用setuid()将权限下放到被authentication的用户。 当然,这只有在EUID是根源的情况下才能起作用。 那么,PAM堆栈是否始终以root身份运行,而不pipe使用它的应用程序如何?

pipe道访问权限setuid程序

我正在扩展GNU / Linux(Ubuntu 14.04)下运行的一些软件(我不是作者),它由一个manager进程和几个worker进程组成。 pipe理员可以通过我可以在configuration文件中指定的命令行来启动一个worker。 启动一名工人后,pipe理人员使用pipe道与其通信。 出于安全原因,我们决定让工人在不同于pipe理者的用户下运行(让我们称他们为manager-user和worker-user )。 这是通过编写一个小的包装脚本来实现的,该脚本用su来切换用户并启动一个新的worker。 在此之后,经理可以通过pipe道与工作进程进行通信。 这种方法现在已经运行了好几个月了。 作为su的替代,我们已经考虑使用setuid位来运行工作者。 所以我们写了一个C封装器,可以由pipe理器调用来启动一个worker。 如果我们将包装器configuration为由manager-user拥有,则worker正确启动(当然,但具有错误的权限)。 如果我们将包装程序configuration为由worker-user拥有并设置setuid位,则启动worker,但因为无法连接到manager而退出。 所以我的问题是:如何运行一个setuid可执行文件影响由父进程和subprocess创build的pipe道权限? 难道通过setuid-wrapper启动的工作进程没有权限打开pipe理器的pipe道(或者相反)? 如果可以的话,我们如何改变这些权限? 我几乎没有使用setuid经验,因此欢迎任何信息/解释。

在Linux中使用setuid位

我有这个C文件: #include <stdio.h> #include <unistd.h> int main(void) { printf("%s\n", getlogin()); printf("%i\n", getuid()); } 我编译它,设置UID和GID都为root并设置setuid位,所以它看起来像这样: -rwsrwsr-x 1 root root 8735 Apr 8 19:51 a.out 但是当我打电话$ ./a.out我仍然得到: user 1000 我究竟做错了什么?