如何在 Linux 中运行没有 Sudo 密码的特定命令

我在部署在 AWS 上的 Ubuntu 系统中使用了一个脚本。 此脚本的主要目的是检查特定服务是否定期运行(准确地说是每分钟一次),并在因任何原因停止时自动启动该服务。 但问题是我需要 sudo 启动服务的权限。 您可能已经知道,当我们运行某些东西时,我们应该提供密码 sudo 用户。 但我不想那样做。 我真正想做的是将服务运行为 sudo 没有密码。 如果你遇到过这样的情况,我知道一个小技巧,今天,在这个简短的指南中,我将教你如何在没有 sudo Linux 和类 Unix 操作系统中的密码。

看看下面的例子。

$ sudo mkdir /ostechnix [sudo] password for sk:
运行命令 sudo 权利

正如您在上面的屏幕截图中看到的,我需要提供 sudo 在根 (/) 文件夹中创建名为 ostechnix 的目录时的密码。 每当我们尝试执行命令时 sudo 权限,我们必须输入密码。 但是,在我的场景中,我不想提供 sudo 密码。 这是我为运行一个 sudo 在我的 Linux 机器上没有密码的命令。

免责声明: 这仅用于教育目的。 应用此方法时应非常小心。 这种方法既有生产力又有破坏性。 例如,如果您允许用户执行 'rm' 命令没有 sudo 密码,他们可能会意外或故意删除重要的东西。 你被警告了!

运行特定命令而不 sudo Linux中的密码

出于任何原因,如果您想允许用户运行某个命令而不给出 sudo 密码,您需要添加该命令 sudoers 文件。

我希望用户命名 sk 执行 mkdir 命令而不给出 sudo 密码。 让我们看看如何做到这一点。

编辑 sudoers 文件:

$ sudo visudo

在文件末尾添加以下行。

sk ALL=NOPASSWD:/bin/mkdir
编辑 sudoers 文件

这里, sk 是用户名。 根据上述行,用户 sk 能跑 'mkdir' 来自任何终端的命令,无需 sudo 密码。

您可以添加其他命令(例如 chmod) 使用逗号分隔的值,如下所示。

sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod

Save 和 close 文件。 注销(或重新启动)您的系统。 现在,以普通用户 ‘sk’ 身份登录并尝试运行这些命令 sudo 看看会发生什么。

$ sudo mkdir /dir1
在没有的情况下运行命令 sudo Linux中的密码在没有的情况下运行命令 sudo Linux中的密码

看? 即使我跑了 'mkdir' 命令与 sudo 权限,没有密码提示。 即日起,用户 sk 不必输入 sudo 运行时的密码 'mkdir' 命令。

运行除 sudoers 文件中添加的命令之外的所有其他命令时,系统会提示您输入 sudo 密码。

让我们运行另一个命令 sudo.

$ sudo apt update
运行apt更新命令运行apt更新命令

看? 此命令提示我输入 sudo 密码。

如果您不希望此命令提示您询问 sudo 密码,编辑 sudoers 文件:

$ sudo visudo

添加 'apt' visudo 文件中的命令如下:

sk ALL=NOPASSWD: /bin/mkdir,/usr/bin/apt

您是否注意到 apt 二进制可执行文件路径与 mkdir 不同? 是的,您必须提供正确的可执行文件路径。 查找任何命令的可执行文件路径,例如 'apt', 利用 'whereis' 命令如下。

$ whereis apt apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz

如您所见,apt 命令的可执行文件是 /usr/bin/apt,因此我将它添加到 sudoers 文件中。

就像我已经提到的那样,您可以添加任意数量的带有逗号分隔值的命令。 Save 和 close 完成后你的 sudoers 文件。 注销并重新登录到您的系统。

现在,检查您是否可以在不使用 sudo 密码:

$ sudo apt update
不运行 apt update 命令 sudo 密码不运行 apt update 命令 sudo 密码

看? apt 命令没有提示我输入密码,即使我使用它运行它 sudo.

这是另一个例子。 如果要运行特定服务,例如 apache2,请按如下所示添加。

sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin systemctl restart apache2

现在,用户可以运行 'sudo systemctl restart apache2' 命令没有 sudo 密码。

推荐下载免费备忘单:“Linux 命令行备忘单”

在上述情况下,我可以重新验证特定命令吗? 当然,是的! 只需删除添加的命令。 注销并重新登录。

或者,您可以添加 'PASSWD:' 指令前面的指令。 看下面的例子。

添加/修改以下行,如下所示。

sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt

在这种情况下,用户 sk 能跑 'mkdir''chmod' 命令而不输入 sudo 密码。 但是,他必须提供 sudo 运行时的密码 'apt' 命令。

建议阅读:

  • 如何在 Ubuntu 上向用户授予和删除 Sudo 权限
  • 如何在 Linux 中更改默认 Sudo 日志文件
  • 如何恢复用户的 Sudo 权限
  • 如何在你的 Linux 系统中查找所有 Sudo 用户
  • 使用时如何强制用户使用root密码而不是自己的密码 sudo

BASHCLI 命令行LinuxLinux 基础Linux 命令Linux 技巧在不使用Sudo 密码的情况下运行特定命令sudo 超级用户切换用户