Ubuntu 不授予文件 root 权限,在 Debian 上可以运行

Ubuntu 不授予文件 root 权限,在 Debian 上可以运行

我正在尝试通过执行以下操作使程序成为特权程序:

  1. sudo chown root
  2. sudo chmod u+s

因此,现在每当有人运行 时,该用户都将以 root 权限运行该程序。这在 Debian 中按预期工作。但是,当我在 Google 计算引擎上尝试使用 Ubuntu 20.0.4 LTS 时,它无法以 root 权限运行。

该程序的权限如下: -rwsr-xr-x 1 root 但出于某些原因,每当我在 Ubuntu 上运行它时,它都会以当前用户权限运行。在 debian 上,它以 root 身份运行(如 ps -elf 输出)。有人知道这是为什么吗?

答案1

这是 Ubuntu 的安全措施,内核会忽略苏伊德所有未编译的可执行文件(解释文件)上的位。

这可能是一个严重的安全漏洞,因为任何人都可以更改脚本并填充他想要的任何内容。

要做到这一点,了解风险;你必须用非解释性语言包装你的脚本,例如C

您可以这样做;创建 C 文件 <path_to_to_your_prog>.c:

#include <stdio.h>
#include <stdlib.h> 
#include <sys/types.h> 
#include <unistd.h> 
int main() { 
    setuid( 0 );  
    system("<path_to_your_script>.sh" );
    return 0;
 }

然后编译它:

gcc <path_to_to_your_prog>.c -o 
 <path_to_the compiled_prog>

然后设置正确的权限:

chmod 4755   <path_to_the compiled_prog> # note the suid set here
chown root:root <path_to_the compiled_prog> <path_to_your_script>.sh
chmod 700 <path_to_your_script>.sh

然后运行它:

<path_to_the_compiled_prog>

解决方案2: 首选

您可以添加一个新组并将其作为所有相关用户的次要组,然后将其添加到您的 sudoers 以便他们可以运行:sudo <script_path>.sh然后设置正确的权限:750和所有权root:<gid>,这样他们就无法编辑它。

相关内容