在shell脚本中使用sudo
在执行shell脚本时,在shell脚本中使用sudo,shell,sudo,Shell,Sudo,在执行shell脚本时,sudo如何在以下方面发挥作用 # script.sh ls /root sudo ls /root 现在,如果我运行$sudo./script.sh或$./script.sh有什么区别?例如: 使用sudo./script.sh运行的所有命令是否都会自动在该命令前面加上“sudo” 是sudo ls/root行vlid吗?或者该行而不是ls/root,是否需要根调用 基本上,我试图找出行项目作为sudo运行与脚本本身作为sudo运行的区别。sudo代表“超级用户do”
sudo
如何在以下方面发挥作用
# script.sh
ls /root
sudo ls /root
现在,如果我运行$sudo./script.sh
或$./script.sh
有什么区别?例如:
sudo./script.sh运行的所有命令是否都会自动在该命令前面加上“sudo”
sudo ls/root
行vlid吗?或者该行而不是ls/root
,是否需要根调用因此,如果您的shell脚本不需要运行特权(我希望它不需要),那么sudo./script.sh应该等同于bash script.sh或./script.sh。如果您的脚本对某些命令要求提升权限,处理这些命令的一种方法是使用
sudo
。在使用sudo
之前,配置它的使用有几个注意事项。例如,如果您有某些用户希望能够使用sudo
运行命令,并进一步运行sudo
,而不需要提示输入密码,则首先需要进行一些配置sudo
通过visudo
实用程序进行配置。对于sudo
的大多数用法,只需取消文件末尾的选项注释即可。但是,要允许用户在没有密码的情况下运行sudo
,您还需要将这些用户添加到wheel
组(一些发行版现在使用sudo
组-检查)。将用户添加到控制盘组后,要允许他们在不使用密码的情况下使用sudo
,请运行visudo
,并取消对以下行的注释:
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
配置了sudo
后,在脚本中,如果需要提升(root)权限,只需检查用户UID
(和/或EUID
)是否等于零表示用户是root,如果不是,则使用sudo
运行命令。你可以根据自己的口味将测试分为阴性和阳性两种
if [ "$UID" -eq 0 -o "$EUID" -eq 0 ]; then
command
else
sudo command
fi
或
如果命令
不是一个简单的命令,而是包含重定向或管道,则必须使用sudo
运行整个命令,而不仅仅是列表中的第一个命令。要做到这一点,只需使用sudobash-c“yourlongcommand”,以确保提升的权限可用于复合命令中需要它的每个部分。例如,如果您尝试:
sudo cat /etc/sudoers > sudoersbackup
命令将失败。当cat
具有读取文件的提升权限时,
重定向将作为普通用户运行,并将由于缺乏权限而失败。要处理这种情况,您可以执行以下操作:
sudo bash -c "cat /etc/sudoers > sudoersbackup"
这确保提升的权限可用于整个命令。只需同时运行这两个命令,就可以看到区别了吗?现在还不清楚您在问什么。在脚本中,在需要提升权限的命令之前,检查当前用户的
UID
(和或EUID
)。如果不需要0
并且需要root
权限,则可以使用sudo
执行该命令(如果涉及多个简单命令,则启动单独的子shell)。例如,if[“$UID”-ne 0-a“$EUID”-ne 0];然后#使用sudo
如果你有一个用户不需要密码就可以sudo
——将该用户添加到wheel
组中,以root用户身份运行visudo
,并在末尾配置(取消注释)所需的行。@DavidC.Rankin谢谢——想把它放在一个答案中,我可以接受吗?当然,给我一分钟,我会把它写下来。
sudo bash -c "cat /etc/sudoers > sudoersbackup"