云网牛站
所在位置:首页 > Linux命令 > 在Linux系统中运行没有sudo密码的特定命令

在Linux系统中运行没有sudo密码的特定命令

2019-02-15 10:11:58作者:戴进稿源:云网牛站

本文介绍在Linux操作系统中运行没有sudo密码的特定命令的方法。

 

背景

我在AWS上部署了Ubuntu系统上的脚本,此脚本的主要目的是检查特定服务是否以固定间隔运行(确切地说每隔一分钟),并且如果由于任何原因而停止,则自动启动该服务,但问题是我需要sudo权限来启动服务,你可能已经知道,我们应该在运行sudo用户时提供密码,但我不想这样做,我真正想要做的是以无密码的形式运行sudo服务,如果你遇到这样的情况,在这个简短的文章中,我将教你如何在类Unix操作系统中运行没有sudo密码的特定命令(也可以参考Linux系统中sudo命令的10个技巧一文)。

看看下面的例子:

$ sudo mkdir /ostechnix

[sudo] password for sk:

在Linux系统中运行没有sudo密码的特定命令

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

 

在Linux中运行没有sudo密码的特定命令

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

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

编辑sudoers文件:

$ sudo visudo

在文件末尾添加以下行:

sk ALL=NOPASSWD:/bin/mkdir

在Linux系统中运行没有sudo密码的特定命令

这里,sk是用户名,根据上面的行,用户sk可以从任何终端运行'mkdir'命令,没有sudo密码。

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

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

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

$ sudo mkdir /dir1

在Linux系统中运行没有sudo密码的特定命令

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

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

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

$ sudo apt update

在Linux系统中运行没有sudo密码的特定命令

看到?此命令提示我输入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

在Linux系统中运行没有sudo密码的特定命令

看到?即使我用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'命令,他们可能会意外或故意删除重要内容。

 

相关主题

在Ubuntu 18.04、Deepin终端中实现输入密码显示星号的方法

Linux命令子频道
精选文章
热门文章