sudo命令允许受信任的用户作为另一个用户运行程序,默认情况下是root用户。如果您在命令行上花费了大量时间,那么sudo将会是您一直使用的命令之一。

通常,要授予sudo访问权限,请将用户添加到sudoers文件中定义的sudo组。在Debian,Ubuntu及其衍生产品上,sudo组的成员在基于RedHat的发行版(如CentOS和Fedora)上获得sudo权限,sudo组的名称是wheel。

在运行sudo命令之前,系统将提示该组的每个成员输入密码。这增加了额外的安全层,是向用户授予sudo权限的首选方式。

如下图:

但是,在某些情况下,例如运行自动脚本,您可能需要配置sudoers文件并允许某些用户运行sudo命令而不要求输入密码。

将用户添加到Sudoers文件

sudoers文件包含确定用户和组的sudo权限的信息。

您可以通过修改sudoers文件或将配置文件添加到[code]/etc/sudoers.d[/code]目录来配置用户sudo访问权限。此目录中的所有文件都包含在sudoers文件中。

在进行任何更改之前,最好备份当前文件:

linuxidc@linuxidc:~/www.linuxidc.com$ sudo cp /etc/sudoers{,.backup_$(date +%Y%m%d)}

date命令会将当前日期附加到备份文件名。

使用visudo命令打开/etc/sudoers文件:

sudo visudo

更改sudoers文件时始终使用visudo此命令检查后编辑,如果存在语法错误,则不会保存更改。 如果使用文本编辑器打开文件,语法错误将导致丢失sudo访问权限。

在大多数系统上,visudo命令使用vim文本编辑器打开/etc/sudoers文件。 如果您没有使用vim的经验,可以使用其他文本编辑器。 例如,要将编辑器更改为GNU nano,您将运行:

sudo EDITOR=nano visudo

向下滚动到文件的末尾并添加以下行,该行允许用户“linuxidc”使用sudo运行任何命令而无需开始询问密码:

/etc/sudoers

linuxidc  ALL=(ALL) NOPASSWD:ALL

如下图:

不要忘记使用您要授予访问权限的用户名更改“linuxidc”。

如果要允许用户仅运行特定命令而不输入密码,请在NOPASSWD关键字后指定命令。

例如,要仅允许使用mkdir和mv命令:

在/etc/sudoers文件

linuxidc ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/mv

完成后,保存文件并退出编辑器。

使用/etc/sudoers.d

您可以使用授权规则将新文件添加到/etc/sudoers.d目录,而不是编辑sudoers文件。 这种方法将使sudo权限的管理更加可维护。

打开文本编辑器并创建文件:

sudo nano /etc/sudoers.d/linuxidc

您可以根据需要命名文件,但通常最好使用用户名作为文件名。

/etc/sudoers.d/linuxidc

添加与添加到sudoers文件中相同的规则:

linuxidc  ALL=(ALL) NOPASSWD:ALL

最后,保存文件并关闭编辑器。

总结

当您拥有非root用户需要执行管理任务的脚本时,运行不带密码的sudo非常有用。