root 可以以非 root 身份执行命令吗?

root 可以以非 root 身份执行命令吗?

我是 root 用户,假设我想以其他用户身份运行任何应用程序。这可行吗,无需切换到其他用户?

就像是

# google-chrome user=abc

我实际上是以非 root 用户身份执行 CLI 程序。我已设置 sticky 位并使用 setuid,因此程序以 root 权限运行。现在我system()在程序内使用它来调用 GUI 应用程序。但我不想以 root 身份运行它,所以我只想暂时放弃该调用的 root 权限。

答案1

一个可移植的解决方案是:

su abc -c google-chrome

但是,由于 google-chrome 需要 X11 访问,除非您取消其安全保护,否则此操作可能会失败,但这是一个非常糟糕的主意,尤其是在以 root 身份运行时。

如果允许 X11 隧道/转发,更好的方法是

ssh -X abc@localhost google-chrome

或者

ssh -Y abc@localhost google-chrome

答案2

简短的回答:“是的,这是可能的”。

如果您想执行非 X 应用程序,则只需使用以下命令:

sudo -u abc命令

如果您喜欢以其他用户身份运行某些 X 应用程序,但首先使用自己的桌面,则需要创建一个辅助脚本,这将使您的生活更简单

  • 在你的主目录下创建一个 bin 文件夹:

mkdir -p ~/bin

~/bin/xsudo并使用您最喜欢的文本编辑器创建如下文件:

#!/bin/bash
# (C) serge 2012
# The script is licensed to all users of StackExchange family free of charge
# Fixes/Enhancements to the script are greatly appreciated. 
# 
# SUDO_ASKPASS has to be set to the path of ssh-askpass
# fix the following two lines if your distribution does not match this autodetection
. /etc/profile.d/gnome-ssh-askpass.sh
export SUDO_ASKPASS="${SSH_ASKPASS}"

SUDOUSERNAME="$1"
shift
xauth nlist "${DISPLAY}"|sudo -HA -u $SUDOUSERNAME env --unset=XAUTHORITY \
bash -c "xauth nmerge - ; $*"

然后使其可执行:

chmod + x ~/bin/xsudo

并以与下面相同的方式使用它,sudo但不需要任何开关:

须藤用户应用程序

享受。

PS强烈反对xsession从帐户开始!root

答案3

有一种方法可以在登录root用户的情况下运行chromium,如果你正常打开,它会给你一个“chromium无法以root身份运行”这样的错误。

要运行它而不出现错误,right click请在您的桌面上使用以下命令创建一个新的启动器:chromium-browser --user-data-dir。您可以随意命名它,保存它,当您打开它时,它会为您提供 Chromium 浏览器。(适用于 Ubuntu 10.04.4 LTS)

答案4

#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e)


execute () {
    function="${1}"
    command="${2}"
    error=$(eval "${command}" 2>&1 >"/dev/null")

    if [ ${?} -ne 0 ]; then
        echo "${function}: $error"
        exit 1
    fi
}


executeAsNonAdmin () {
    function="${1}"
    command="${2}"

    eval setPasswordAsker="SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass"
    run="runuser ${SUDO_USER} --session-command=\"${setPasswordAsker}\" --command=\"${command}\""
    execute "${function}" "${run}"
}


executeAsNonAdmin "" "${@}"

相关内容