![如何允许非 sudoers 用户运行执行 root 操作的脚本](https://linux22.com/image/1149116/%E5%A6%82%E4%BD%95%E5%85%81%E8%AE%B8%E9%9D%9E%20sudoers%20%E7%94%A8%E6%88%B7%E8%BF%90%E8%A1%8C%E6%89%A7%E8%A1%8C%20root%20%E6%93%8D%E4%BD%9C%E7%9A%84%E8%84%9A%E6%9C%AC.png)
假设我有一个目录/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 个选项:
使用 chmod 更改 /opt/expe 的权限以允许所有用户在此目录中创建文件。
为需要在那里写入的用户创建一个单独的组,并使用 chmod 更改 /opt/expe 组权限以允许该组在那里写入。
创建一个单独的组并添加 sudoers 规则以让他们执行此脚本,如下所述:用户如何在 VeraCrypt 中挂载加密文件容器?
使用标签安全进行细粒度的访问控制。以下是安全标签的简要说明和一些进一步的链接:https://unix.stackexchange.com/questions/53028/what-are-ext4-security-labels
请记住,创建/删除文件的权限是目录的属性,而不是文件本身的属性。