如何允许非 sudoers 用户运行执行 root 操作的脚本

如何允许非 sudoers 用户运行执行 root 操作的脚本

假设我有一个目录/opt/expe,我想让任何用户在其上创建 .txt 文件。我想让任何用户输入如下内容:

$ whoami
user1
$ export $file_name=my_txt_file
$ /opt/expe/create_file.sh
$ ls -cal /opt/expe
total 12
drwxr-xr-x 2 root  root 4096 Jul 29 19:27 .
drwxr-xr-x 6 root  root 4096 Jul 29 19:14 ..
-rwsr-sr-t 1 root  root   65 Jul 29 19:29 create_file.sh
-rw-r--r-- 1 user1 root    0 Jul 29 19:27 my_txt_file.txt

我尝试使用 sudoer

$ whoami
user_sudoer
$ cat /opt/expe/create_file.sh
touch /opt/expe/$file_name.txt
chown $USER /opt/expe/$file_name.txt
$ chmod a+x /opt/expe/create_file.sh
$ chmod a+t /opt/expe/create_file.sh
$ chmod a+s /opt/expe/create_file.sh
$ chmod a+X /opt/expe/create_file.sh

然后以非 root 用户身份获取:

$ whoami
user1
$ export $file_name=my_txt_file
$ /opt/expe/create_file.sh
touch: cannot touch '/opt/expe/prueba_txt.txt': Permission denied

我可以做这样的事情吗?我想要一些类似 postgresSECURITY DEFINER概念的东西。

答案1

我对 Postgres 不够熟悉,但我看到至少 4 个选项:

  1. 使用 chmod 更改 /opt/expe 的权限以允许所有用户在此目录中创建文件。

  2. 为需要在那里写入的用户创建一个单独的组,并使用 chmod 更改 /opt/expe 组权限以允许该组在那里写入。

  3. 创建一个单独的组并添加 sudoers 规则以让他们执行此脚本,如下所述:用户如何在 VeraCrypt 中挂载加密文件容器?

  4. 使用标签安全进行细粒度的访问控制。以下是安全标签的简要说明和一些进一步的链接:https://unix.stackexchange.com/questions/53028/what-are-ext4-security-labels

请记住,创建/删除文件的权限是目录的属性,而不是文件本身的属性。

相关内容