我需要一些能够编写脚本的命令,这些命令需要使用sudo
添加的业务约束,我无法使用权限运行脚本本身。我见过使用
echo "$pwd" | sudo <my command>
这是最好的方法吗?有时我得到一个回复说bash: line 1: <my pwd redacted>: command not found
,我想这是因为linux实际上没有提示输入pwd。我见过有人提到修改/etc/sudoers
文件但显然对该文件的更改在注销之前不会生效。
答案 0 :(得分:1)
答案 1 :(得分:1)
什么是从bash脚本运行sudo而不能以特权运行脚本的最佳方式?
我认为最好的方法是提示用户输入密码,并在脚本中需要时应用sudo
。例如,以下是build-git.sh
和build-ssh.sh
。脚本仅在sudo
步骤中使用密码make install
。 (这些脚本用于旧操作系统,如CentOS 5,它不提供现代工具)。
echo
echo "If you enter a sudo password, then it will be used for installation."
echo "If you don't enter a password, then ensure INSTALL_PREFIX is writable."
echo "To avoid sudo and the password, just press ENTER and they won't be used."
read -s -p "Please enter password for sudo: " SUDO_PASSWWORD
echo
...
# Configure and make without privileges
...
MAKE_FLAGS=(install)
if [[ ! (-z "$SUDO_PASSWWORD") ]]; then
echo "$SUDO_PASSWWORD" | sudo -S "$MAKE" "${MAKE_FLAGS[@]}"
else
"$MAKE" "${MAKE_FLAGS[@]}"
fi
可能值得一提的是,我需要(1)没有权限进行配置和构建,以及(2)使用权限进行安装。使密码可选,就像在脚本中一样,满足了我的需求,因此它被认为是最好的&#34;因为它符合我的要求,并以最少的努力工作。你最好的&#34;可能会根据您的要求而有所不同。
如果您使用echo
方法,请考虑禁用或清除Bash历史记录以避免记录密码。如果你想获得幻想,你甚至可以temporarily disable history。我运行脚本的机器已经禁用了它们的历史记录,因此我不关心它。
答案 2 :(得分:-1)
首先,真正的问题是你需要什么sudo。由于未指定,我认为你的意思是“sudo to root”。
很多时候人们只想在特定的非系统目录中安装某些东西(例如/ var / www / app)。你不需要root权限,你可以创建一个专门的用户,可以在那里写sudo或登录该用户来执行你需要的任何步骤。
人们陷入的常见陷阱是将sudo使用限制在特定的子命令中,该子命令本身也允许任意代码执行,实际上首先违背了限制使用的目的。经典的例子是make,你可以在makefile中放置你想要的任何东西。 sudo make现在将以root身份运行。
您也没有说明这是否是您需要主动使用的内容,或者是否需要自动执行脚本(即无需人工监督)。
那么,你究竟想做什么以及为什么?