Ubuntu 中有事件之类的东西吗?

Ubuntu 中有事件之类的东西吗?

我想知道 Ubuntu 是否有类似事件的东西。我需要运行 Jenkins 作业,但 Jenkins 没有 sudo 权限,我不想给他。但作业需要运行一些需要 sudo 权限的操作。解决方案可能是触发一个事件,该事件将以 root 用户身份监听,并且该事件将使用 sudo 权限运行代码。也许我仍然对权限感到困惑,但我认为这可能非常方便。或者像公共 root 用户界面这样的东西,它将供其他用户使用,但将以 root 用户身份运行。比如

root->doSomethingAsRoot()

希望您了解我想要实现的目标。谢谢您的帮助。

PS这个问题与这个问题

答案1

如果需要以 root 身份运行的操作可以分成单独的进程/脚本,那么您可以以 setuid root 身份运行这些进程。这是一个非常方便的工具,但在我看来,它很少使用。

什么是 setuid 进程?例如,查看该passwd命令。它可以由任何用户运行,但需要以 root 身份运行,因为它需要修改存储在只有 root 才能访问的文件中 ( /etc/shadow) 的密码。

如何完成?查看/usr/bin/passwd二进制文件的权限:

-rwsr-xr-x 1 root root 68208 maj 28  2020 /usr/bin/passwd

所有者字段中的“s”而不是“x”表示该二进制文件将以其所有者的权限运行 - 即 root。

这样,每二进制可以以 root (或任何其他用户) 身份运行,无论谁调用它。

然而,脚本出于安全原因,setuid 位会被忽略。因此,要运行脚本作为 root,你需要使用二进制包装器将从内部调用脚本。您可以使用以下简单的 C 程序来创建这样的包装器:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
   int rc;
   setuid( 0 );
   rc=WEXITSTATUS(system( "/path/to/your/script" ));
   exit(rc);
}

编译该程序并使可执行文件为 setuid root (假设可执行文件名为wrapper,dosudo chown root:root wrapper后跟sudo chmod o+s wrapper)。

顺便说一句。从包装器内部运行的脚本不必是 setuid;只有包装器才需要。

编辑:从评论中的解释来看,您似乎想要rm -rf /some/path以 root 身份运行特定命令,并且担心不会意外删除其他任何内容。在这种情况下,我建议只用/path/to/your/script这个命令替换上面包装程序中的部分rm -rf /some/path,然后wrapper在要运行命令的位置从脚本运行二进制文件rm -rf /some/path。这似乎是最安全的方法。

答案2

我的直接解决方案是以 root 身份运行无休止的后台脚本,该脚本每 10 秒查找并删除所需目录。它以 nohup 身份运行,因此即使我关闭终端,它仍在运行。

while true
do
  find /var/www -maxdepth 1 -type d -name 'deploy-old-*' -exec rm -rf {} \;
  sleep 10
done

答案3

Laravel 使用 chmod 644 生成文件的问题的最终解决方案是通过 setfacl 为父目录设置 ACL 权限。

setfacl -R -dm "g:www-data:rw" $www_new_app_dir/storage 

所有生成的文件都将从父目录继承 acl 设置。在本例中,www-data 组的 rw 为。

相关内容