visudo如何在没有密码的情况下以root身份运行脚本

时间:2014-01-18 14:28:59

标签: unix

我有一个非常简单的脚本,需要在不使用密码的情况下以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。

1 个答案:

答案 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 脚本通常是安全的。)