学习资料
热门课程
热门推荐
相关资料
猜您喜欢
如何在Linux中运行特定命令而无需sudo 密码?
更新时间:2019年03月26日 作者:spoto
本文将教你如何在类Unix 的操作系统中运行特定命令而无需sudo 密码。
就让我们看看下面的例子吧。
$ sudomkdir/ostechnix
[sudo] password forsk:

正如上面的截图中看到的那样,当我在根目录(
假如我想让名为
使用下面的命令来编辑
1. $ sudovisudo
将下面的命令添加到这个文件的最后。
1. sk ALL=NOPASSWD:/bin/mkdir

其中
你可以用逗号分隔的值来添加额外的命令(例如
1. sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod
保存并关闭这个文件,然后注销(或重启)你的系统。现在以普通用户
1. $ sudomkdir/dir1

看到了吗?即便我以sudo 特权运行
当运行除了添加到
让我们用
1. $ sudoapt update

看到了吗?这个命令将提示我输入sudo 密码。
假如你不想让这个命令提示你输入sudo 密码,请编辑
1. $ sudovisudo
像下面这样将
1. sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt
你注意到了上面命令中
1. $ whereisapt
2. apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz
如你所见,
正如我前面提及的那样,你可以添加任意多个以逗号分隔的命令。一旦你做完添加的动作,保存并关闭你的
现在就检验你是否可以直接运行以
1. $ sudoapt update

看到了吗?
下面展示另一个例子。假如你想运行一个特定服务,例如
1. sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin/systemctlrestart apache2
现在用户
我可以再次让一个特别的命令提醒输入sudo密码吗?当然可以!只需要删除添加的命令,注销然后再次登录即可。
除了这种方法外,你还可以在命令的前面添加
在
1. sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt
在这种情况下,用户
免责声明:本篇指南仅具有教育意义。在使用这个方法的时候,你必须非常小心。这个命令既可能富有成效但也可能带来摧毁性效果。例如,假如你允许用户执行
就让我们看看下面的例子吧。
$ sudomkdir/ostechnix
[sudo] password forsk:

正如上面的截图中看到的那样,当我在根目录(
/
)中创建一个名为 ostechnix
的目录时,我需要提供sudo 密码。每当我们尝试以sudo 特权执行一个命令时,我们必须输入密码。而在我的预想中,我不想提供sudo 密码。下面的内容便是我如何在我的Linux 机子上运行一个 sudo
命令而无需输入密码的过程。在Linux 中运行特定命令而无需sudo 密码
基于某些原因,假如你想允许一个用户运行特定命令而无需提供sudo 密码,则你需要在sudoers
文件中添加上这个命令。假如我想让名为
sk
的用户去执行 mkdir
而无需提供sudo 密码,下面就让我们看看该如何做到这点。使用下面的命令来编辑
sudoers
文件:1. $ sudovisudo
将下面的命令添加到这个文件的最后。
1. sk ALL=NOPASSWD:/bin/mkdir

其中
sk
是用户名。根据上面一行的内容,用户 sk
可以从任意终端执行 mkdir
命令而不必输入sudo 密码。你可以用逗号分隔的值来添加额外的命令(例如
chmod
),正如下面展示的那样。1. sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod
保存并关闭这个文件,然后注销(或重启)你的系统。现在以普通用户
sk
登录,然后试试使用 sudo
来运行这些命令,看会发生什么。1. $ sudomkdir/dir1

看到了吗?即便我以sudo 特权运行
mkdir
命令,也不会弹出提示让我输入密码。从现在开始,当用户 sk
运行 mkdir
时,就不必输入sudo 密码了。当运行除了添加到
sudoers
文件之外的命令时,你将被提示输入sudo 密码。让我们用
sudo
来运行另一个命令。1. $ sudoapt update

看到了吗?这个命令将提示我输入sudo 密码。
假如你不想让这个命令提示你输入sudo 密码,请编辑
sudoers
文件:1. $ sudovisudo
像下面这样将
apt
命令添加到 sudoers
文件中:1. sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt
你注意到了上面命令中
apt
二进制执行文件的路径与 mkdir
的有所不同吗?是的,你必须提供一个正确的可执行文件路径。要找到任意命令的可执行文件路径,例如这里的 apt
,可以像下面这样使用 whichis
命令来查看:1. $ whereisapt
2. apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz
如你所见,
apt
命令的可执行文件路径为 /usr/bin/apt
,所以我将这个路径添加到了 sudoers
文件中。正如我前面提及的那样,你可以添加任意多个以逗号分隔的命令。一旦你做完添加的动作,保存并关闭你的
sudoers
文件,接着注销,然后重新登录进你的系统。现在就检验你是否可以直接运行以
sudo
开头的命令而不必使用密码:1. $ sudoapt update

看到了吗?
apt
命令没有让我输入sudo 密码,即便我用 sudo
来运行它。下面展示另一个例子。假如你想运行一个特定服务,例如
apache2
,那么就添加下面这条命令到 sudoers
文件中:1. sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin/systemctlrestart apache2
现在用户
sk
就可以运行 sudo systemctl restart apache
命令而不必输入sudo 密码了。我可以再次让一个特别的命令提醒输入sudo密码吗?当然可以!只需要删除添加的命令,注销然后再次登录即可。
除了这种方法外,你还可以在命令的前面添加
PASSWD:
指令。让我们看看下面的例子:在
sudoers
文件中添加或者修改下面的一行:1. sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt
在这种情况下,用户
sk
可以运行 mkdir
和 chmod
命令而不用输入sudo 密码。然而,当他运行 apt
命令时,就必须提供sudo 密码了。免责声明:本篇指南仅具有教育意义。在使用这个方法的时候,你必须非常小心。这个命令既可能富有成效但也可能带来摧毁性效果。例如,假如你允许用户执行
rm
命令而不输入sudo 密码,那么他们可能无意或有意地删除某些重要文件。我警告过你了!
相关资讯