我有一个脚本,希望我的一些用户能够运行该脚本,但该脚本需要管理员权限。当然,我不想授予他们管理员权限。如何允许该脚本以安全的方式运行?
更新:这是一个 Ubuntu 9.10 系统。
答案1
只需使用 sudo。您需要在 中配置 sudo /etc/sudoers
,如下所示:
fred ALL = (root) NOPASSWD: /path/to/command
将 fred 替换为用户名,或使用 %group 表示组。如果删除 NOPASSWD: 选项,则每次都会提示他们输入密码。
脚本上的 setuid 不安全,并且在 Linux 上不起作用。
答案2
sudo 和 SUID 都是非常没有安全感. 有可能 — — 并且,根据脚本语言的不同,很容易 — — 摆脱其中任何一个。SUID 是迄今为止最糟糕的,如果这样做,一些脚本语言甚至无法运行。
我有一篇关于如何安全地做到这一点的博客文章,这是我最初为以 root 身份运行 Nagios 检查插件但在这里完全适用。有一个小型 C 程序(多年来一直在 Linux 管理世界中流传)只是充当脚本的包装器。您只需编辑 C 程序源代码以包含脚本的完整路径,编译它,然后设置该 SUID(或授予 sudo 访问权限)。源代码在我的网站上:设置uid程序。
以 root 身份运行脚本的固有问题是,在许多语言中,使用各种技术(从糟糕的输入检查到溢出),可能会打破正在运行的脚本并获得完全的 root 访问权限。许多老牌 Unix 专家建议只编写一个 C 程序来做你需要做的事情 - 但话又说回来,他们中的大多数人都是 SA,而你需要能够熟练地编写C语言。
答案3
在哪个操作系统上?
在 Linux/Unix 上,您可以允许他们通过 sudo 运行它。可以修改 /etc/sudoers 文件以向某些 ID(用户)授予指定命令的特定权限。
或者,您可以设置其 SUID 位,并将脚本更改为由特权用户拥有。这会将脚本设置为以该用户的身份运行,而不是以运行它的用户的身份运行。但是,这适用于运行它的所有用户。
答案4
有两种方法:
最好的办法是对其设置 SUID 位:chown root yourscript; chmod a+s yourscript
。
或者,您可以授予他们使用 修改它的权限sudo
,方法是运行visudo
并按照说明操作。但是,这是不必要的,因为这可以通过运行sudo
(具有 SUID 位)来实现。