编写执行需要root权限的操作的bash脚本

时间:2011-03-06 01:14:36

标签: bash permissions

我正在尝试编写一个bash脚本,用于在ubuntu中设置我的Web开发环境。作为设置脚本的过程的一部分,它需要编辑root拥有的文件。它还需要在运行脚本的用户的public_html目录中创建字段。

我是否应该要求脚本以超级用户身份运行?如果它应该,那么如何让它访问当前用户的用户名?我通常会使用$ USER变量,但如果脚本以超级用户身份运行,我就不能这样做。如果我不是超级用户,如何让脚本为某些操作请求超级用户权限,同时不要求用户为每个需要超级用户权限的操作输入密码。

由于

6 个答案:

答案 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。