linux sudo

如何在脚本中运行’sudo’命令? 问题描述 要手动执行修补,我必须输入此命令 sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql 09之前有一个空间: sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql 如何在脚本中运行它? 还有其他一些命令但是这个命令很麻烦。 最佳解决办法 在脚本中包含sudo并不是一个好主意。而是从脚本中删除sudo并使用sudo运行脚本本身: sudo mys 阅读详情

env

ubuntu20.2

概念

sudo, sudoedit : 用其它用户执行命令

sudo允许批准一个用户执行命令作为超级用户或其它用户, 由安全策略指定. 调用的用户ID被用来决定他拥有什么样的安全策略.

给用户添加sudo

	chmod +w /etc/sudoers
	vim /etc/sudoers
	chmod -w /etc/sudoers

或

sudo visudo

免密sudo,

xxxx   ALL=(ALL:ALL) NOPASSWD:ALL

nano保存并退出

Ctrl+X
Ctrl+T  # 选择要覆盖文件(sudoer) , 再回车

注意添加位置
在这里插入图片描述

Q & A

sudo执行脚本找不到环境变量

当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能获取到值,如题情况如下:

$ cat tesh.sh 
echo $var 
$ var=aaa 
$ export var                       # export 变量 
$ sudo echo $var                   # sudo执行echo命令,返回变量值 
aaa 
$ sudo bash test.sh                # sudo执行脚本,不能获取变量值 
 
$ bash test.sh                     # 普通用户执行脚本,返回变量值 
aaa

原因
sudo运行时,会默认重置环境变量为安全的环境变量,也即,但前设置的变量都会失效,只有少数配置文件中指定的环境变量能保存下来。

sudo的配置文件是 /etc/sudoers 需要root权限才能读取:

$ sudo sed ‘/^#/d;/^$/d’ /etc/sudoers 
Defaults env_reset 
Defaults mail_badpass 
Defaults secure_path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin” 
root ALL=(ALL:ALL) ALL 
%sudo ALL=(ALL:ALL) ALL 
xxx ALL=(ALL:ALL) NOPASSWD:ALL

不过可以直接通过sudo -l来查看sudo的限制:

$ sudo -l 
Matching Defaults entries for xxx on this host: 
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin 

User xxx may run the following commands on this host:
 (ALL : ALL) NOPASSWD: ALL

注意看第一行的选项Defaults env_reset表示默认会将环境变量重置,这样你定义的变量在sudo环境就会失效,获取不到。
另外有的发行版还有一个Defaults env_keep=""的选项,用于保留部分环境变量不被重置,需要保留的变量就写入双引号中。

为什么sudo echo $var能获取到变量值?

既然利用sudo执行会重置环境变量,那么为什么还能echo获取到相应的变量呢?
这是由于shell命令行的替换&重组功能,在输入命令,按下回车时,shell会先依据分隔符将命令行切割成字段,对每个字段查找有没有变量或命令替换,再替换完成后,重组成新的命令,再去执行。
所以,命令实际执行是:

$ sudo echo $var                   # $var => aaa 
(sudo echo aaa)                    # 完成命令替换&重组 
(echo aaa)                         # sudo环境中执行 
aaa

因此,sudo环境重置后,并不用去引用$var这个变量,而是直接echo aaa。

解决
1、sudo -E
-E选项在man page中的解释是:

-E

The -E (preserve environment) option indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the -E option is specified and the user does not have permission to preserve the environment.

简单来说,就是加上-E选项后,用户可以在sudo执行时保留当前用户已存在的环境变量,不会被sudo重置,另外,如果用户对于指定的环境变量没有权限,则会报错。

$ sudo -E bash test.sh       # 加上-E参数后就可以获取到变量 
aaa

2、修改sudo配置文件
在内部测试机器中,安全性要求不高,总是需要加上-E参数来执行脚本,这个安全设定也不是很方便,可以通过visudo命令来修改配置为保留原有的环境变量,具体修改如下:

$sudo visudo 
# Defaults env_reset                  # 注释掉原有配置 
# Defaults env_keep=”…”               # 注释掉指定的变量保持 
Defaults !env_reset                   # 修改为不重置环境

3、手动添加变量
手动在脚本中设置所需的变量,这样看起来比较麻烦,或者在执行sudo脚本前先将所需要的变量写入到要执行的脚本开头。

sudo常见问题两例:免密码/保持环境变量

首先给一个很不错的sudo的文档!

https://wiki.archlinux.org/index.php/Sudo_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29

问题一:如何在使用sudo执行命令时免输入密码

在root下执行visudo
在文件尾部添加:

myuser ALL=(ALL) NOPASSWD: ALL
%mygroup ALL=(ALL) NOPASSWD: ALL

问题二:如休在使用sudo执行命令确保环境变量的传递

首先,我们可以随时使用sudo -u targetUser env来检查目标用户targetUser的环境变量,特别是你定义的一些HOME目录和PATH变量

以下是两个重要的配置步骤:

  1. 确保环境变量得以传递,以Hadoop相关的一些环境变量为例,我们需要在visudo中添加需要传递的环境变量,比如:

Defaults env_keep += “JAVA_HOME HADOOP_HOME HBASE_HOME HIVE_HOME MAHOUT_HOME PATH”

  1. 取保PATH变量得以传递:

上面env_keep配置的PATH变量实际并没有得到有效的传递,PATH变量会受到secure_path的约束,所引如果我们需要传递完整的path变量,我们需要修改secure_path!在visudo中它的默认值一般为:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

同样以hadoop环境为例,我们可以改为:

Defaults    secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0_71/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/hbase/bin:/usr/local/hive/bin:/usr/local/hive/hcatalog/bin:/usr/local/hive/hcatalog/sbin:/usr/local/mahout/bin

另:如果不做上述配置,可以使用sudo -i -u targetUser your-command来执行你的命令,使用-i参数会模拟一次登录,目标用户的相关环境变量就可以相应的被初始化了!

Ambari集群部署全流程 Apache Ambari是一个基于Web的支持Apache Hadoop集群的供应、管理和监控的开源工具,Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。提供Web UI进行可视化的集群管理,简化了大数据平台的安装、使用难度。 服务器资源目录 ip地址 节点 组件 192.168.186.164 master 192.168.186.167 slave 阅读详情

相关推荐

小智2.0本地化部署:边缘AI服务中台实战指南

边缘AI服务中台是面向嵌入式终端与边缘设备构建的轻量级、低延迟、高隐私AI能力集成平台,其核心在于解耦模型与调度、统一协议接口、协同管理ASR/TTS/NLU等异构模块。技术原理上依赖多进程架构(Node.js+Java+Python)、外部状态存储(MySQL+Redis)与模型即资源的插拔机制,具备强定制性与硬件适应性。该架构显著降低云端依赖与通信开销,提升实时响应与数据主权保障,广泛应用于语音交互设备、教育机器人、工业边缘盒子等场景。本文聚焦小智2.0服务器的源码构建、多组件协同部署及生产就绪配置,覆

weixin_36238982的博客 600

Shell脚本 中运行sudo命令

你会发现终端停留在输入sudo密码界面了,如果我们脚本中包含提权才能进行的命令的话这种脚本会卡在输入密码这一步上,需要手动输入sudo密码脚本才能往下执行,这当然不是我们希望的,如果想让非root用户不输入密码就能执行sudo命令的话需要修改。我们都知道在linux的多用户下,用户之间是不能相互访问彼此的家目录的,如果要想访问其他用户的家目录必须使用sudo命令来提权。首先我在A用户的家目录下新建了一个脚本文件,我想使用这个脚本文件列出用户B家目录。属性,添加可写属性(以下命令在root用户下执行)。

alfiy的专栏 6228

Linux sudo升级

本文介绍了一个用于修复Linux系统sudo本地提权漏洞的升级脚本。该脚本将sudo升级到1.9.17p1安全版本,主要内容包括:1) 解压源码包并备份原sudo;2) 替换可执行文件和动态库;3) 更新动态库缓存;4) 配置/etc/sudo.conf文件;5) 验证升级结果。脚本采用模块化设计,包含完善的日志记录和错误处理机制,确保升级过程可靠。执行后能有效修复已知的sudo本地提权漏洞,提升系统安全性,适用于需要离线升级sudo的场景。

1353

保留当前环境变量执行 sudo 操作

当执行 sudo "command" 或者 sudo bash -c "your command or scripts" 时候,你在当前执行当 interactive shell 上设置当环境变量或者定义在自己的 login shell 初始化脚本(比如~/.bashrc, ~/.bash_profile)里的环境变量不会生效。 如何让这些变量在 sudo 情况下生效呢? sudo -E ba...

bdss58的专栏 2452

SAP 发货在途库存管理:POD确认差异下的2种后续调整方案对比

本文详细解析了SAP发货在途库存管理中POD确认差异后的财务调整方案,对比了移动类型417和555 T两种处理方式的适用场景及财务影响。通过实际案例说明如何优化POD流程,减少库存差异损失,提升供应链管理效率。特别适合SAP SD模块用户及供应链管理人员参考。

chiman6219的博客 394

海康威视工业相机SDK二次开发实战:多相机同步采集与图像存储

本文详细介绍了海康威视工业相机SDK二次开发实战,包括多相机同步采集与图像存储的优化方案。通过MVS软件搭建开发环境,实现硬件与软件触发同步采集,并提供高效的图像存储管理技巧,帮助开发者提升工业视觉项目的效率与稳定性。

weixin_29168813的博客 666

linux中sudo命令_Linux中的Sudo命令

linux中sudo命令Sudo is one of the most widely used commands by Linux administrators and beginners alike. In this guide, we will look at sudo command and its usages. Sudo是Linux管理员和初学者最广泛使用的命令之一。 在本指南中,我们将...

从零开始的教程世界 2706

保姆级教程:用sw_urdf_exporter插件将Solidworks机械臂模型转为ROS可用的URDF

本文提供了一份详细的保姆级教程,指导用户使用sw_urdf_exporter插件将Solidworks机械臂模型转换为ROS可用的URDF文件。从环境准备、插件配置到模型预处理和关键参数设置,再到ROS环境集成测试和性能优化,全面覆盖了机械臂URDF转换的全流程。特别适合机器人工程师和ROS开发者快速实现Solidworks模型到ROS环境的无缝迁移。

weixin_29300931的博客 399

【Linux】 su 和 sudo 的区别剖析

su 命令介绍及主要用法2.1 参数-2.2 切换到指定用户2.3 参数-c三、sudo 命令介绍及主要用法3.1 主要用法3.2 sudo 工作原理四、二者的差异对比首先需要解释下 代表什么意思。su 表示 ,它提供的功能就是切换用户。官方释义: 的一般使用方法是: 或者 两种方法只差了一个字符 ,会有比较大的差异:光解释会比较抽象,我们看一个例子就比较容易理解了。我们从kangll 用户以 的方式切换到 root 用户,比较两种用户状态下环境变量中 的值( 命令不跟任何

康师傅没有眼泪 4946

无人机开发平台全解析:从开源飞控到企业级应用实战指南

无人机开发平台是无人机从飞行器演变为智能空中机器人的核心,其本质是提供了一套标准化的软硬件接口与工具链,使开发者能够基于稳定可靠的底层系统,专注于上层应用创新。从技术原理上看,一个完整的开发平台通常包含飞行控制器、机载计算机、传感器套件等硬件层,以及飞控固件、机器人操作系统(ROS/ROS 2)、软件开发套件(SDK)等软件层,通过分层架构实现飞行控制、感知决策与任务执行的解耦。其技术价值在于大幅降低了无人机行业应用的开发门槛,使开发者无需从零构建飞行控制系统,即可快速实现自动巡检、精准农业、物流配送等复杂

weixin_28712491的博客 412

【EB_Tresos专题】-06-配置一个UDS诊断DID

<--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ...

「汽车电子助手」的博客 4085

Linux sudo命令

⏹Linux sudo命令

菜鸟记录 1257

IMX6ULL---从零开始移植uboot-imx

IMX6ULL---从零开始移植uboot-imx

weixin_42162924的博客 1028

【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别

【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别 ​ su命令 su (Switch User切换用户),允许用户切换到另一个用户的身份,默认情况下是切换到 root 用户。 默认行为:如果只运行 su,则系统会要求输入 root 用户的密码来切换到 root 用户,获取管理员权限。 切换到其他用户:也可以通过 su - username来切换到其他用户的账户,而不仅仅是 root 用户。例如,su - user1 会切换到 user1 用户的环境。

qq_73635134的博客 2416

有限元之有限元空间的构造

主要介绍有限元的空间构造方法。

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 762

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

linux默认开启sudo_Linux sudo命令

Linux sudo命令Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。使用权限:在 /etc/sudoers 中有出现的使用者。语法sudo -Vsudo -hsudo -lsudo -vsudo -ksudo -ssudo -Hsudo [ -b ] [ -p prompt ] [ -u username/#uid] -s...

weixin_29664063的博客 1025

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Linux中sudo免密码

文章出自个人博客https://knightyun.github.io/2019/06/20/sudo-nopasswd,转载请申明 平时在 Linux 中执行一些命令时,可能会遇到 Permission denied 这样的提示,即该用户没有权限; 所以一般会想到在命令最前面加上 sudo 后再执行,然后有可能会提示输入当前用户的密码; 再接下来,如果命令没有正常执行,一般又会提示:user...

knight-yun的博客 8176

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

linux-sudo配置

是 "superuser do" 的缩写,它是一个在 Unix 和 Linux 操作系统中允许普通用户以其他用户身份(通常为超级用户或 root 用户)执行命令的程序。对示例不明白的同学可以产看格式说明黄色背景标注的就是对应的说明:主机,用户,用户组等等权限管理配置。可以提高系统的安全性,因为它允许细粒度的权限控制,并且会在每次使用时要求用户输入密码。,系统管理员可以授予某些用户执行特定命令的权限,而无需切换到 root 用户。,管理员可以限制用户只能执行特定的命令或脚本,从而防止潜在的系统损坏或误操作。

古韵堂 3540

Linux之sudo高级应用(Sudo Advanced Applications in Linux)

sudo命令是Linux系统中一个强大的权限管理工具,允许系统管理员授予普通用户执行特定命令的权限,而不需要知道root用户的密码。‌ sudo命令通过编辑/etc/sudoers配置文件来实现权限的分配和管理,提供了灵活的权限控制机制。本章详细介绍Linux之sudo命令。

Linux运维老纪的博客 1426

如何在Linux上控制sudo访问

因sudo命令允许你在Linux上运行命令,就像你是别人一样,比如root. .sudo也可以让你控制谁可以访问root's能力,粒度。给用户完全访问或让他们使用一小块命令。我们向您展示如何。

allway2的博客 1015

linux 普通用户增加sudo_秒懂Linux的sudo命令

>【版权申明】非商业目的注明出处可自由转载 出自:shusheng007文章首发于 首页 - ShuSheng007​shusheng007.top概述第一次接触Linux时是照着网上的教程给服务器安装Tomcat的时候,总是看到 sudo命令,咱也不知道是啥,就是一顿复制粘贴,最后还安装成功了。可笑的是我用的root账户登录的,还用毛sudo啊?知识就是这样的,也许一个问题在老鸟看来是...

weixin_34493012的博客 1031

linux sudo 命令_Linux Sudo命令教程,并附有获得根特权的示例

linux sudo 命令Linux sudocommand is used to give rootprivileges to the normal users . /etc/sudoersfile is used for configuration of sudo. Sudoers file provides the users who can run sudocommand. Su...

cunjiu9486的博客 736

Linux下的全部sudo提权方法

linux下的全部sudo提权

qq_62554190的博客 1888
上一篇: 修改ubuntu时区
下一篇: grasshopper遇到的问题(updating)
大怀特
博客等级 码龄6年 5787粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大怀特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值