在脚本中使用 sudo

Aug*_*rom 6 sudo

在 shell 脚本中使用 sudo 命令被认为是好还是坏的做法?一个优点是,如果用户以非 root 用户身份运行脚本,她或他将被要求输入密码,而不是脚本失败。另一方面,如果用户最近使用 sudo 运行了一个命令,脚本将隐式地以 root 身份运行命令,这可能不是用户所期望的。

下面是一个例子:

$ cat foo1
#!/bin/sh
sudo bar #implicit sudo
$ ./foo1

$ cat foo2
#!/bin/sh
bar
$ sudo ./foo2 #explicit sudo
Run Code Online (Sandbox Code Playgroud)

Red*_*Tux 7

使用 sudo始终是一个好习惯。但是,有一些方法可以更好地使用 sudo。一种方法是明确允许特定命令以提升的权限运行。

以下将只允许“用户”组中的人在没有密码的情况下执行命令 foo1。

%users ALL=(ALL) NOPASSWD: /full/path/to/foo1
Run Code Online (Sandbox Code Playgroud)

但是,除非用户输入正确的密码,否则它不允许在上面的示例中执行 foo2。

此外,通常最好将 sudo 配置为需要用户密码而不是 root 密码(我现在忘记了配置选项),并且没有任何可以让用户提升权限的条目,例如:

ALL ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

或者

%users ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

使用wheel 组或类似组来升级任何命令是一种很好的做法。最后,最好将 root 密码锁定在保险箱中,除非臭东西撞到风扇,否则任何人(永远)都不要使用。

  • 如果在脚本中使用 **requiretty** 也应该关闭。在某些发行版中 **requiretty** 被设置为默认值。 (2认同)