本文介绍在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'命令,他们可能会意外或故意删除重要内容。

相关主题

linux无密码sudo,在Linux系统中运行没有sudo密码的特定命令相关推荐

  1. Linux下的32位C程序,linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件...

    1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o 2.linux 系统c语言生成.so文件,----->gcc -sh ...

  2. Linux编译mybatis,使用mybatis assembly插件打成tar包,在linux系统中运行服务-Go语言中文社区...

    使用mybatis assembly插件打成tar包,在linux系统中运行服务 assembly插件插件地址: 链接:https://pan.baidu.com/s/1i6bWPxF 密码:gad5 ...

  3. linux运行360sh,在深度deepin系统中运行install.sh文件的方法

    在深度deepin操作系统中有时会遇到x.sh文件,如在安装canon imageclass 4712驱动时,找到linux-ufrii-drv-360-sc替代,但install.sh不知道如何运行 ...

  4. Linux学习总结(49)——应当竭力避免在系统中运行的 Linux 命令

    前言 如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令.以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避免在 ...

  5. 在Linux和Mac OS X系统上运行.NET

    .NET Core运行时已经看到了实现真正的跨平台的美好前景,它最终出现在Linux和Mac OS X平台上.在上周举办的Microsoft Build大会上,来自微软的项目经理Habib Heyda ...

  6. 在Windows, Mac, Linux三种系统中分别获取wifi密码的方式

    在Windows, Mac, Linux三种系统中分别获取wifi密码的方式 1. Windows netsh wlan show profile name=wifi名称 key=clear | fi ...

  7. 在Windows和Linux系统中,有以下常用的磁盘修复命令

    在Windows和Linux系统中,有以下常用的磁盘修复命令: Windows系统: 1. CHKDSK命令:检查磁盘上的文件系统错误,并对损坏的扇区进行恢复.格式:CHKDSK [驱动器:] [参数 ...

  8. 在每个运行中运行多个查询_linux系统中运行级别介绍

    CentOS7.3学习笔记总结(五十)- linux系统中运行级别介绍 linux系统中的运行级别是操作系统运行时的功能级别,级别从0到6共7个功能级别,分别是: 0:停机 1:单用户模式 2:多用户 ...

  9. 教你成功在Win10系统中运行docker

    1 前言 在上文Docker初体验中我们介绍了Docker的一些基本概念和常用命令,但因为Docker是在Linux系统下创建的资源分离机制,所以它无法在Windows系统下直接运行.这次我们将用3分 ...

最新文章

  1. Eclipse打包工具 FatJAR
  2. Tomcat安全加固
  3. live555工程建立与调试
  4. java (10) 集合类
  5. yii 清除mysql缓存_Yii2开启数据表结构缓存和清除
  6. 抢先试用ReSharper UnitRun™ 1.0
  7. Opencv 深度学习识别性别和检测年龄
  8. Kettle增量同步变动数据
  9. 微服务网关(gateway)概述 与 嵌入式 Zuul 反向代理
  10. error LNK2001: 无法解析的外部符号 _ft_sdf_renderer_class/ _ft_bitmap_sdf_renderer_class
  11. sas字段有html脚本,sas 实现自动化报表格式之定性变量
  12. 权限设计,可控制每个接口的使用。
  13. 可以在电脑上刷微信朋友圈啦-微信 mac最新版
  14. 【FXCG】美联储加息之际,新兴市场加息周期却接近尾声
  15. 创建个人博客只需五步骤——小白都能看会的详细过程,教你如何白嫖阿里云服务器
  16. Python控制键盘鼠标,原来还能这样玩?
  17. Oracle SQL:update更新语句总结
  18. 刘强东怼天猫,是在陈述事实还是另有深意?
  19. 总裁面对面压轴秀:且听黄飞说全渠道…
  20. 北大生命学院邓宏魁课题组最新成果:建立全新胰岛移植策略,解决干细胞治疗糖尿病的关键难题...

热门文章

  1. 7-7 六度空间 (30分)_近30年仅6人生涯总决赛首秀得分30+ 浓眉哥能成下一个吗
  2. python 节气计算_python 生成 1900-2100 的二十四节气文件
  3. spark-submit
  4. Linux 进程通信fifo,Linux 进程通信之FIFO的实现
  5. jcreator编译多个java_java用JCreator怎么都编译不过去!
  6. java压缩对象_Java 对象指针压缩
  7. 临沧计算机教试报名,2019下半年临沧小学计算机教师资格证考什么?
  8. 机器学习付费专栏的一些简介
  9. jupyter跑Java,C++/C,R
  10. 八十、React中的容器组件和无状态组件