【每日一记8】+第10天+在 Linux 中运行特定命令而无需 sudo 密码
  

诸葛大力 3209

{{ttag.title}}
我有一台部署在 AWS 上的 Ubuntu 系统,在它的里面有一个脚本,这个脚本的原有目的是以一定间隔(准确来说是每隔 1 分钟)去检查某个特定服务是否正在运行,如果这个服务因为某些原因停止了,就自动重启这个服务。但问题是我需要 sudo 权限来开启这个服务。正如你所知道的那样,当我们以 sudo 用户运行命令时,我们应该提供密码,但我并不想这么做,实际上我想做的是以 sudo 用户的身份运行这个服务但无需提供密码。假如你曾经经历过这样的情形,那么我知道一个简单的方法来做到这点。今天,在这个简短的指南中,我将教你如何在类 Unix 的操作系统中运行特定命令而无需 sudo 密码。
就让我们看看下面的例子吧。
  • $ sudo mkdir /ostechnix
  • [sudo] password for sk:

正如上面的截图中看到的那样,当我在根目录(/)中创建一个名为 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

像下面这样将 apt 命令添加到 sudoers 文件中:
  • sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt

你注意到了上面命令中 apt 二进制执行文件的路径与 mkdir 的有所不同吗?是的,你必须提供一个正确的可执行文件路径。要找到任意命令的可执行文件路径,例如这里的 apt,可以像下面这样使用 whichis 命令来查看:
  • $ 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

看到了吗?apt 命令没有让我输入 sudo 密码,即便我用 sudo 来运行它。
下面展示另一个例子。假如你想运行一个特定服务,例如 apache2,那么就添加下面这条命令到 sudoers 文件中:
  • sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin/systemctl restart apache2

现在用户 sk 就可以运行 sudo systemctl restart apache 命令而不必输入 sudo 密码了。

我可以再次让一个特别的命令提醒输入 sudo 密码吗?当然可以!只需要删除添加的命令,注销然后再次登录即可。
除了这种方法外,你还可以在命令的前面添加 PASSWD: 指令。让我们看看下面的例子:
在 sudoers 文件中添加或者修改下面的一行:

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

在这种情况下,用户 sk 可以运行 mkdir 和 chmod 命令而不用输入 sudo 密码。然而,当他运行 apt 命令时,就必须提供 sudo 密码了。



假如你允许用户执行 rm 命令而不输入 sudo 密码,那么他们可能无意或有意地删除某些重要文件。

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

新手664518 发表于 2020-6-24 15:16
  
感谢分享
小鱼儿 发表于 2023-10-12 19:28
  
每天学习一点点,每天进步一点点。
唐三平 发表于 2023-10-12 19:28
  
每天学习一点点,每天进步一点点。
鲤鲤 发表于 2023-10-12 19:33
  
每天学习一点点,每天进步一点点。
小西北 发表于 2023-10-12 19:33
  
每天学习一点点,每天进步一点点。
小德 发表于 2023-10-12 19:39
  
每天学习一点点,每天进步一点点。
日出 发表于 2023-10-12 19:39
  
每天学习一点点,每天进步一点点。
德德 发表于 2023-10-12 19:45
  
每天学习一点点,每天进步一点点。
飞飞侠 发表于 2023-10-12 19:45
  
每天学习一点点,每天进步一点点。
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
每日一问
干货满满
【 社区to talk】
技术笔记
GIF动图学习
产品连连看
新版本体验
技术咨询
功能体验
2023技术争霸赛专题
自助服务平台操作指引
每周精选
通用技术
安装部署配置
原创分享
秒懂零信任
信服课堂视频
标准化排查
排障笔记本
玩转零信任
答题自测
技术晨报
社区新周刊
POC测试案例
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高手请过招
升级&主动服务
高频问题集锦
全能先锋系列
云化安全能力

本版达人

新手89785...

本周建议达人

新手78183...

本周分享达人