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

时间:2020-03-21 11:46:55  来源:igfitidea点击:

我在部署在AWS上的Ubuntu系统上有一个脚本。
该脚本的主要目的是检查特定服务是否以固定间隔(准确地说是每分钟)运行一次,如果由于某种原因停止了该服务,则会自动启动该服务。
但是问题是我需要sudo特权才能启动服务。
我们可能已经知道,当我们以sudo用户身份运行某些内容时,我们应该提供密码。
但是我不想那样做。
我实际上想要做的是在没有密码的情况下以sudo形式运行服务。
如果我们遇到过这种情况,我将为我们解决一个小问题。
今天,在本简要教程中,我将教我们如何在类似Unix的操作系统中在没有sudo密码的情况下运行特定命令。

看下面的例子。

$sudo mkdir /theitroad
[sudo] password for sk:

从上面的屏幕截图中可以看到,在根(/)文件夹中创建名为theitroad的目录时,我需要提供sudo密码。
每当我们尝试执行具有sudo特权的命令时,都必须输入密码。
但是,在我的情况下,我不想提供sudo密码。
这是我在Linux机器上运行不带密码的sudo命令的操作。

免责声明:这仅用于教育目的。
应用此方法时应非常小心。
这种方法可能既有生产性,也有破坏性。
例如,如果我们允许用户在不使用sudo密码的情况下执行“ rm”命令,则他们可能会意外或者有意删除重要内容。
你被警告了!

在Linux中不使用Sudo密码运行特定命令

出于任何原因,如果要允许用户在不提供sudo密码的情况下运行特定命令,则需要将该命令添加到sudoers文件中。

我希望名为sk的用户在不提供sudo密码的情况下执行mkdir命令。
让我们看看如何去做。

编辑sudoers文件:

$sudo visudo

在文件末尾添加以下行。

sk ALL=NOPASSWD:/bin/mkdir

其中sk是用户名。
按照上面的代码,用户sk可以从任何终端运行'mkdir'命令,而无需sudo密码。

我们可以添加带有逗号分隔值的其他命令(例如chmod),如下所示。

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

保存并关闭文件。
注销(或者重新启动)系统。
现在,以普通用户“ sk”的身份登录,并尝试使用sudo运行这些命令,看看会发生什么。

$sudo mkdir /dir1

看到了吗?
即使我以sudo特权运行了“ mkdir”命令,也没有密码提示。
从现在开始,用户sk在运行“ mkdir”命令时无需输入sudo密码。

当运行除sudoers文件中添加的那些命令以外的所有其他命令时,系统将提示我们输入sudo密码。

让我们使用sudo运行另一个命令。

$sudo apt update

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

如果我们不希望此命令提示我们输入sudo密码,请编辑sudoers文件:

$sudo visudo

在visudo文件中添加“ apt”命令,如下所示:

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文件中。

就像我已经提到的,我们可以添加任意数量的带有逗号分隔值的命令。
完成后,保存并关闭sudoers文件。
注销并再次登录到系统。

现在,检查是否可以在不使用密码的情况下使用sudo前缀运行命令:

$sudo apt update

看到了吗?
即使我使用sudo来运行,apt命令也不会询问我密码。

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

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

现在,用户可以在没有sudo密码的情况下运行“ sudo systemctl restart apache2”命令。

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

或者,我们可以在命令前面添加“ PASSWD:”指令。
看下面的例子。

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

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

在这种情况下,用户sk可以运行'mkdir'和'chmod'命令,而无需输入sudo密码。
但是,在运行“ apt”命令时,他必须提供sudo密码。