É possível que o root execute um comando como não-root?


10

Eu sou um usuário root e suponho que desejo executar qualquer aplicativo como outro usuário. Isso é possível, sem mudar para outro usuário?

Algo como

# google-chrome user=abc

Na verdade, estou executando um programa CLI como um usuário não raiz. Eu configurei o bit adesivo e estou usando o setuid, portanto, o programa é executado com privilégios de root. Agora estou usando system()dentro do programa para chamar um aplicativo GUI. Mas não quero executá-lo como root, portanto, quero eliminar temporariamente os privilégios de root apenas para essa chamada.


1
Você está realmente rodando como root na maioria das vezes?
Keith

1
@ Keith nada na questão implica na maioria das vezes .
Kojiro # 29/12

Ou não, é por isso que peço esclarecimentos.
Keith

Sim, é assim que o primeiro programa para cada usuário é executado. O primeiro processo no sistema é executado como raiz. Existem várias maneiras de eliminar privilégios, incluindo todas as maneiras que podem ser escalonadas, além de outras.
ctrl-alt-delor 29/09/12

Respostas:


9

Uma solução portátil seria:

su abc -c google-chrome

No entanto, como o google-chrome está exigindo acesso ao X11, isso provavelmente falhará, a menos que você o tenha desprotegido, o que seria uma péssima idéia, principalmente durante a execução como root.

Se o tunelamento / encaminhamento X11 for permitido, uma maneira melhor seria

ssh -X abc@localhost google-chrome

ou

ssh -Y abc@localhost google-chrome

Por que a abordagem ssh seria melhor? Isso ainda não seria executado usando a sessão X do usuário raiz?
1313 Steve Steve

1
O @Steve Using su abc -c google-chromeprovavelmente falhará em primeiro lugar porque abcnão pode usar a sessão do root, .Xauthoritysendo ilegível para abc.
Jlliagre

Oops pesaroso eu não entendi você, eu pensei que você quis dizer que seria melhor a partir de uma perspectiva de segurança
Steve

10

Resposta curta: "Sim, isso é possível".

se você deseja executar um aplicativo não-X, basta usar o seguinte comando:

Comando sudo -u abc

Se você deseja executar algum aplicativo X como outro usuário, mas primeiro com seu próprio desktop, é necessário criar um script auxiliar, que tornará sua vida mais simples

  • crie uma pasta bin no seu diretório pessoal:

mkdir -p ~ / bin

e usando seu editor de texto favorito, crie um arquivo da ~/bin/xsudoseguinte maneira:

#!/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 - ; $*"

então torne-o executável:

chmod + x ~ / bin / xsudo

e use da mesma maneira, sudomas sem nenhuma chave:

aplicativo de usuário xsudo

Apreciar.

PS A xsessionpartir da rootconta é fortemente desencorajado!


Você tentou? Receio que este exemplo em particular não funcione.
Jlliagre

Sim, porque para iniciar um aplicativo X a partir de outra sessão do usuário, é necessário permitir o acesso à exibição. Mas isso também é possível. Infelizmente, não me lembro exatamente como isso deve ser feito.
29411 Serge

@jlliagre No entanto, eu me lembro como iniciar um aplicativo X no mesmo host de uma forma complicada: ssh -X abc@localhost google-chrome:)
Serge

Hmm ... estou escrevendo nos comentários o que você já postou 22 minutos atrás ...
Serge

Mas você ainda tem 6 votos a favor para uma solução não útil, enquanto eu só tenho um para um correto. Modelo Stackexchange às vezes é muito frustrante ...
jlliagre

1

Existe uma maneira de executar o chromium quando conectado ao usuário root. Se você abrir normalmente, ocorrerá um erro como "o cromo não pode ser executado como raiz".

Para executá-lo sem o erro, right clicko seu ambiente de trabalho, criar um novo lançador com o comando: chromium-browser --user-data-dir. Você pode nomear o que quiser, salvá-lo, quando você o abrir, ele fornecerá o navegador chromium. (Funciona no 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 "" "${@}"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.