【问题标题】:Running some parts of the script with root and other parts with normal user使用 root 运行脚本的某些部分,使用普通用户运行其他部分
【发布时间】:2019-08-30 00:12:17
【问题描述】:

为了确保我的 bash 脚本以 root 身份运行,我使用:

if [ "$UID" -ne "0" ]; then
echo "You must root to run $0. Try following"
echo "sudo $0"
exit 9
fi

但是在脚本中,有一些我想用sudo -u $USER 运行的命令,但是,如果我以 root 身份运行整个脚本,它会以 sudo -u root 出现($USER 将是 root,而不是原始 USER )。

如何以 root 身份运行脚本,同时以默认登录用户身份运行脚本中的某些命令,这样我就不必输入密码或执行chmod 来更改权限?

【问题讨论】:

  • 您写道“...我以 root 身份运行整个脚本,它的输出为 sudo -u $USER”。我想您想问“我以 root 身份运行整个脚本,它以sudo -u root 的形式出现($USER 将是 root,而不是原始用户)”。您可以编辑您的问题以明确说明吗?
  • @WalterA 是的,我确实是这个意思。我已经编辑了我的问题。

标签: bash ubuntu


【解决方案1】:

您需要某个变量中的未评估用户。

您希望如何执行此操作取决于您的实际用例。

你可以看看:

讨厌的临时文件:

echo "$USER" >  /tmp/thatsme.tmp
su -
# Hmm, now hope nobody has changed the tmpfile doing the same trick
orguser=$(cat /tmp/thatsme.tmp)
rm /tmp/thatsme.tmp

保持环境

export orguser="$USER"
su # Not su -
echo "orguser=${orguser}"

处理 ps -ef 并在您所在的同一 tty 上查找原始用户。 (不推荐)

调用su - -c script additional parameter 并更改您的主脚本,使其从$1 拉出用户。

【讨论】:

    【解决方案2】:

    在您的 bash 脚本中,您需要使用“su”命令切换用户,然后使用 -c 命令和您需要的命令/脚本。

    如果您以 root 身份运行,则无需输入 $USER 密码。

    例如:su $USER -c "command"

    【讨论】:

    • 但 $USER 将是 root。我想以非root 的普通登录用户身份运行。
    • 在执行 su -u root 之前为您保存 $USER 因为 su 可能会重置此环境变量
    • 有一个 $SUDO_USER 返回发出 sudo 调用的帐户的用户名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多