在shell脚本中使用sudo命令是否被认为是好的或不好的做法? 一个好处是,如果用户以非根用户身份运行脚本,他或她将被要求input密码,而不是脚本失败。 另一方面,如果用户最近使用sudo运行了一个命令,那么脚本将隐式地以root身份运行命令,这可能不是用户期望的。
这里是一个例子:
$ cat foo1 #!/bin/sh sudo bar #implicit sudo $ ./foo1 $ cat foo2 #!/bin/sh bar $ sudo ./foo2 #explicit sudo
使用sudo 总是一个好的做法。 但是有办法可以更好地使用sudo。 一种方法是明确允许特定的命令以提升的权限运行。
以下将只允许“用户”组中的用户在没有密码的情况下执行foo1命令。
%users ALL=(ALL) NOPASSWD: /full/path/to/foo1
但是,除非用户input正确的密码,否则不会允许在上例中执行foo2。
另外,最好是configurationsudo来要求用户的密码而不是root密码(我忘记了这个configuration选项),并且没有任何允许用户升级他们的权限的条目,比如:
ALL ALL=(ALL) ALL
要么
%users ALL=(ALL) ALL
一个轮组或类似组的用户升级任何命令是一个很好的做法。 最后,root密码最好锁在一个安全的地方,永远不要被任何人(永远)使用,除非臭臭的东西碰到风扇。