我有一个脚本,我想我的一些用户能够运行,需要pipe理员。 当然我不想给他们pipe理员权限。 如何让这个脚本以安全的方式运行?
更新:这是一个Ubuntu 9.10系统。
只要使用sudo。 您需要在/etc/sudoersconfigurationsudo,如下所示:
fred ALL = (root) NOPASSWD: /path/to/command
用用户名replacefred,或使用%组作为组。 如果您删除了NOPASSWD:选项,则每次都会提示input密码。
setuid脚本是不安全的,不能在Linux上工作。
sudo和SUID 都很不安全 。 这是可能的 – 而且,根据脚本语言的不同,很容易 – 从任何一个中逃脱出来。 SUID是目前为止最糟糕的,如果这样做了,一些脚本语言甚至不会运行。
我有一篇关于如何安全执行的博客文章,我首先写的是以root身份运行Nagios检查插件,但在这里完全适用。 有一个小型的C程序(这个程序在Linuxpipe理员世界里已经stream行了很多年),只是作为脚本的一个包装。 您只需编辑C程序源代码,以包含脚本的完整path,编译它,然后设置SUID(或给sudo访问权限)。 源代码在我的网站上: setuid-prog.c 。
以root身份运行脚本(对于非root用户)的固有问题是,在许多语言中,使用各种技术(从糟糕的input检查到溢出),有可能摆脱正在运行的脚本并获得完全的root权限。 许多以前的Unix人员build议只编写一个C程序来做你所需要的 – 但是再一次,当你需要能够胜任编写C程序时,他们大多数是SA。
在哪个操作系统?
在Linux / Unix上,你可以让他们通过sudo运行它。 可以修改/ etc / sudoers文件,以将特定的权限授予特定的用户。
或者,您可以在其上设置SUID位,并将脚本更改为由特权用户拥有。 这将设置脚本以该用户的身份运行,而不是运行该用户的用户。 但是,这是所有运行它的用户。
有两种方法:
最好是设置SUID位: chown root yourscript; chmod a+s yourscript chown root yourscript; chmod a+s yourscript 。
或者,你可以给他们访问修改使用sudo ,通过运行visudo并按照说明。 但是,这是不必要的,因为这是通过运行具有SUID位的sudo来运行的。