我有一个非常简单的脚本,需要在不使用密码的情况下以su(root)身份运行。
脚本
#!/bin/bash
cd /Applications/data_vis/
sudo chown -R Fabulous:admin .
我决定使用权限和visudo(8)来实现,上面的脚本运行时没有密码。
权限
sudo chown root:wheel take_ownership.sh
sudo chmod 4755 take_ownership.sh
从visudo文件中提取
# User privilege specification
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
%Fabulous ALL=(ALL) NOPASSWD: /Applications/data_vis/take_ownership.sh,
%ALL ALL=NOPASSWD: /Applications/data_vis/take_ownership.sh
# Uncomment to allow people in group wheel to run all commands
%wheel ALL=(ALL) ALL
我在这个视线上尝试了很多变化和很多问题。但是我必须遗漏一些东西,因为我遗漏或做错的事情并不明显。
欢迎任何实际的具体解决方案。我正在使用bash shell。
答案 0 :(得分:0)
sudo用于为非root用户提供几个任务的root权限。
假设“take_ownership.sh”是脚本,其内容列在上面, 获得root权限的任务加倍: 在脚本中使用sudo并通过设置脚本suid位并设置所有权 root:wheel。
这不是必需的。
通常出于安全原因,要阻止setuid脚本。 因此,shell通常可能会阻止执行此类脚本。
问题的另一个原因可能是/ Applications / data_vis /上的权限不足。 对于执行脚本的用户(如果按照建议清除了setuid位) 上文)。
将脚本缩小为 sudo chown -R很棒:admin / Applications / data_vis
删除setuid位。
以非root用户身份执行脚本。
如果失败,请使用dmesg检查内核条目。
此外,来自sudo manpage(Linux):
如果允许该用户,则没有简单的方法可以阻止用户获取root shell 通过sudo运行任意命令。此外,许多程序(如编辑器)允许用户 通过shell转义运行命令,从而避免sudo的检查。但是,在大多数系统上都是如此 使用sudoers(5)插件的noexec功能可以防止shell转义。
直接通过sudo运行cd命令没有意义,例如,
$ sudo cd /usr/local/protected
因为当命令退出父进程(你的shell)时仍然是相同的。请 有关详细信息,请参阅“示例”部分。
通过sudo运行shell脚本可能会暴露出与setuid shell相同的内核错误 脚本在某些操作系统上不安全(如果您的操作系统有/ dev / fd /目录,则为setuid shell 脚本通常是安全的。)