在Linux中没有Sudo密码如何运行特定命令
我在部署在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密码。