我正在尝试编写一个bash脚本,用于在ubuntu中设置我的Web开发环境。作为设置脚本的过程的一部分,它需要编辑root拥有的文件。它还需要在运行脚本的用户的public_html目录中创建字段。
我是否应该要求脚本以超级用户身份运行?如果它应该,那么如何让它访问当前用户的用户名?我通常会使用$ USER变量,但如果脚本以超级用户身份运行,我就不能这样做。如果我不是超级用户,如何让脚本为某些操作请求超级用户权限,同时不要求用户为每个需要超级用户权限的操作输入密码。
由于
答案 0 :(得分:3)
您可以使用-E标志来保存环境变量,或者,您可以设置sudoers以基于每个命令保留环境。
您还可以设置sudoers文件,不要在每个命令的基础上要求输入密码,例如,允许用户xy在不要求密码的情况下使用smbmount:
xy ALL=NOPASSWD: /usr/bin/smbmount
在您的情况下,在调用sudo之前将当前用户存储在变量中就足够了,并使用已保存的用户名:
CURRENT_USER=$USER
sudo yourscript.sh $CURRENT_USER
然后从$ 1读取用户名。
您还可以使用SUDO_USER
env变量,该变量设置为调用sudo的用户。
答案 1 :(得分:2)
在脚本顶部插入一张支票:
# Make sure only root can run this script
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
这样当你在没有root权限的情况下运行它时会出现提示,然后你可以用正确的方式重新运行它:
sudo yourscript.sh
http://www.cyberciti.biz/tips/shell-root-user-check-script.html
的更多信息答案 2 :(得分:1)
为此目的,有一个名为sudo
的命令。它允许您指定某些用户可以以root用户身份(或其他用户)运行某些命令。
答案 3 :(得分:0)
如果您的用户无论如何都有root访问权限,您只需编写一个必须以root身份运行的脚本并将用户名作为参数,而不是选择用户名。
或者,在交互式shell中获取登录用户名的一种方法是:
stat -Lc %U /proc/self/fd/0
这将检索与标准输入相关联的tty的ovner。
答案 4 :(得分:0)
只需将其设为setuid文件即可。或者使用可能更安全的sudo,因为你可以限制谁来运行它。
chmod 4755 script.sh
答案 5 :(得分:0)
在Ubuntu中,有 SUDO_USER 环境变量。
所以,你可以运行你的脚本sudo somescript.sh
并让它拉出调用用户的用户名$SUDO_USER
。
不确定其他dists。