root是否可以以非root用户身份执行命令?


10

我是root用户,假设我想以其他用户身份运行任何应用程序。是否可以在不切换到其他用户的情况下进行?

就像是

# google-chrome user=abc

我实际上是以非root用户身份执行CLI程序的。我已经设置了粘性位,并且正在使用setuid,因此该程序以root特权运行。现在,我system()在程序中使用它来调用GUI应用程序。但是我不想以root用户身份运行它,因此我只想暂时取消该调用的root特权。


1
您是否大多数时候都以root身份运行?
基思(Keith)2012年

1
@Keith在大多数情况下,问题中没有任何暗示。
kojiro 2012年

是否,这就是为什么我要求澄清。
基思(Keith)

是的,这就是为每个用户运行第一个程序的方式。系统上的第一个进程以root用户身份运行。放弃特权的方法有很多,包括可以提升特权的所有方法,还有更多方法。
ctrl-alt-delor 2012年

Answers:


9

便携式解决方案是:

su abc -c google-chrome

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

如果允许X11调整/转发,则更好的方法是

ssh -X abc@localhost google-chrome

要么

ssh -Y abc@localhost google-chrome

为什么ssh方法会更好?仍然不能使用root用户的X会话运行吗?
史蒂夫

1
@Steve使用su abc -c google-chrome首先可能会失败,因为abc无法使用root的会话,.Xauthority这对于无法读取abc
jlliagre

抱歉,我误解了您,我认为您的意思是从安全角度出发会更好
Steve,

10

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

如果您想执行非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没有任何开关的方式相同的方式使用它:

xsudo 用户应用程序

请享用。

强烈建议不要xsessionroot帐户开始!


你试过了吗?恐怕此特定示例无法正常工作。
jlliagre 2012年

是的,因为要从另一个用户会话启动X应用程序,必须允许您访问显示的内容。但这也是可能的。不幸的是,我不记得要怎么做。
Serge 2012年

@jlliagre但是,我记得如何以一种棘手的方式在同一主机上启动X应用程序:ssh -X abc@localhost google-chrome:)
Serge

嗯...我在写评论,你已经在22分钟前发布了...
Serge

但是您仍然有6票赞成无效的解决方案,而我只有1票赞成正确的解决方案。StackExchange模型有时会令人沮丧……
jlliagre 2012年

1

登录到root用户时,有一种方法可以运行Chrome。如果正常打开它,则会出现诸如“铬不能以根用户身份运行”的错误。

要在没有错误的情况下运行它,right click请在您的桌面上使用以下命令创建一个新的启动器:chromium-browser --user-data-dir。您可以按自己的喜好命名,保存并打开它,然后打开浏览器。(可在Ubuntu 10.04.4 LTS中使用)


1
#! /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 "" "${@}"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.