相关疑难解决方法(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万
查看次数

是否可以在不设置解释器二进制文件的情况下在脚本中使用功能?

现在我cap_net_bind_service MY_USERNAME在 /etc/security/capability.conf 中使用。
现在我只需要设置cap_net_bind_service+i我最喜欢的脚本语言的解释器,就可以通过 libcap[-ng]添加CAP_NET_BIND_SERVICE有效集。

这工作正常,但我想知道是否有一种方法可以在不为解释器二进制文件设置任何大写的情况下实现相同的目标。虽然这不是一个大问题(其他用户帐户没有上限,因此即使在解释器二进制文件上设置了位也无法使用它),但有点烦人,因为每次解释器运行时我都必须重新设置标志更新。

linux scripting executable setcap capabilities

15
推荐指数
1
解决办法
4639
查看次数

标签 统计

scripting ×2

capabilities ×1

executable ×1

linux ×1

security ×1

setcap ×1

setuid ×1

shell ×1