相关疑难解决方法(0)

允许在 shell 脚本上使用 setuid

setuid权限位告诉Linux与业主,而不是执行者的有效用户ID运行程序:

> cat setuid-test.c

#include <stdio.h>
#include <unistd.h>

int main(int argc, char** argv) {
    printf("%d", geteuid());
    return 0;
}

> gcc -o setuid-test setuid-test.c
> ./setuid-test

1000

> sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
> ./setuid-test

65534
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于可执行文件;shell 脚本忽略 setuid 位:

> cat setuid-test2

#!/bin/bash
id -u

> ./setuid-test2

1000

> sudo chown nobody ./setuid-test2; sudo chmod +s ./setuid-test2
> ./setuid-test2

1000
Run Code Online (Sandbox Code Playgroud)

维基百科

由于安全漏洞的可能性增加,许多操作系统在应用于可执行 shell 脚本时会忽略 setuid 属性。

假设我愿意接受这些风险,有没有办法告诉 Linux 将 shell 脚本上的 setuid …

shell security scripting setuid

223
推荐指数
7
解决办法
18万
查看次数

正确使用 setuid 位

我有一个由普通用户运行时需要 root 权限的进程。显然我可以使用“setuid 位”来完成此操作。在 POSIX 系统上执行此操作的正确方法是什么?

另外,如何使用使用解释器(bash、perl、python、php 等)的脚本执行此操作?

scripting setuid

47
推荐指数
2
解决办法
6万
查看次数

`ln /path/to/file -i` 在 setuid 脚本中有什么作用?

我正在制作一个具有 setuid 权限的 Bash 脚本,但它不起作用。所以我在这里找到了我的解决方案:

现在我的脚本一切正常(我用 cpp 重写了它)。

为了满足我对为什么纯 Bash shell 不起作用的好奇心,我阅读了这个链接:http : //www.faqs.org/faqs/unix-faq/faq/part4/section-7.html(参考这个答案:https : //unix.stackexchange.com/a/2910)。在那个网站上,我遇到了以下内容:

        $ echo \#\!\/bin\/sh > /etc/setuid_script
        $ chmod 4755 /etc/setuid_script
        $ cd /tmp
        $ ln /etc/setuid_script -i
        $ PATH=.
        $ -i
Run Code Online (Sandbox Code Playgroud)

我不明白第四行,它是ln /etc/setuid_script -i.

这个命令有什么作用?

我在ln手册中读到的-i只是“交互式”标志(询问您是否要覆盖现有文件)。那么为什么ln /etc/setuid_script -i遵循PATH=.-i让我的 shell 执行/bin/sh -i呢?

bash setuid ln

2
推荐指数
1
解决办法
154
查看次数

标签 统计

setuid ×3

scripting ×2

bash ×1

ln ×1

security ×1

shell ×1