在/usr/local/bin我有以下脚本sdown
/usr/local/bin$ cat sdown #!/bin/bash if [ $# -lt 1 ]; then echo "no time set" else sudo shutdown -h $1 fi
Permssions是788: -rwxr-xr-- user user sdown
关键是如果我运行的脚本提示inputsudo密码:
/usr/local/bin$ sdown 13:37 [sudo] password for user:
为了让我的生活更加美好,我想避免input密码来closures计算机。 我认为有可能我可以寻找:
shutdown命令。 (sudoers文件左右…?) 也许第一种方法更容易,在我的私人机器上,我可以做到这一点。 但是我想知道如果我来另一种情况。 虽然理论上我想学习最佳实践。
我想知道是否最好授予我编写的特定脚本的权限,因此知道它做了什么,而不是删除完整命令的sudo密码保护(在本例中为shutdown ,这是否可能?
同样在这种情况下,我想我必须考虑一些操作脚本的代码注入的可能性。 因此,我想我应该更改所有者和组到root,只允许执行,但不授予其他用户的读写权限。
(或者只是为了更具体的解决scheme的小组。)然而,有人可能与其自己的一些交换完整的文件,因此获得sudo权利?
首先:你几乎肯定在浪费你的努力。
阅读系统上shutdown的联机帮助页面 :时间参数对于我所见过的每个实现都是必需的。
如果你试图在没有时间的情况下运行shutdown -h ,它会对你大喊:
[mgraziano@monitor ~]$ sudo shutdown -h Password: usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]] time [warning-message ...]
要回答你的问题,虽然:
选项1: 允许在不提示sudo权限的情况下执行shutdown命令
要么显式允许使用NOPASSWD选项closures(请阅读man sudoers以获取信息),或者将您的用户添加到允许运行closures的组(通常是operator )。
选项2: find一个给予sudo权限的脚本,所以我可以把sudo放在那里。
你不能这样做你认为,因为sudo不这样工作 – 权限授予用户。
你可以做的最好的是允许脚本使用sudo运行,但是这并不会为你购买任何超过选项1的东西(正如你所提到的,你可以在脚本中find一些可能的安全漏洞,它以root身份运行)。