本文介绍在Linux操作系统中运行没有sudo密码的特定命令的方法。
背景 我在AWS上部署了Ubuntu系统上的脚本,此脚本的主要目的是检查特定服务是否以固定间隔运行(确切地说每隔一分钟),并且如果由于任何原因而停止,则自动启动该服务,但问题是我需要sudo权限来启动服务,你可能已经知道,我们应该在运行sudo用户时提供密码,但我不想这样做,我真正想要做的是以无密码的形式运行sudo服务,如果你遇到这样的情况,在这个简短的文章中,我将教你如何在类Unix操作系统中运行没有sudo密码的特定命令(也可以参考Linux系统中sudo命令的10个技巧一文)。 看看下面的例子: $ sudo mkdir /ostechnix [sudo] password for sk:
正如你在上面的屏幕截图中看到的,我需要在root(/)文件夹中创建名为ostechnix的目录时提供sudo密码,每当我们尝试使用sudo权限执行命令时,我们都必须输入密码,但是,在我的场景中,我不想提供sudo密码,这是我在Linux机器上运行没有密码的sudo命令所做的。
在Linux中运行没有sudo密码的特定命令 出于任何原因,如果你希望允许用户在不提供sudo密码的情况下运行特定命令,则需要在sudoers文件中添加该命令。 我希望名为sk的用户执行mkdir命令而不提供sudo密码,让我们看看如何做到这一点。 编辑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密码。
结语 应用此方法时应该非常小心,这种方法可能具有相当的破坏性,例如,如果你允许用户在没有sudo密码的情况下执行'rm'命令,他们可能会意外或故意删除重要内容。
相关主题 |