¿Es posible que root ejecute un comando como no root?

10

Soy un usuario root y supongo que quiero ejecutar cualquier aplicación como otro usuario. ¿Es esto posible, sin cambiar a otro usuario?

Algo como

# google-chrome user=abc

En realidad estoy ejecutando un programa CLI como usuario no root. He configurado el bit fijo y estoy usando setuid, por lo que el programa se ejecuta con privilegios de root. Ahora estoy usando system()dentro del programa para invocar una aplicación GUI. Pero no quiero ejecutarlo como root, por lo que quiero eliminar temporalmente los privilegios de root solo para esa llamada.

adnan kamili
fuente
1
¿Realmente estás corriendo como root la mayor parte del tiempo?
Keith
1
@Keith nada en la pregunta implica la mayor parte del tiempo .
kojiro
O no, por eso pido aclaraciones.
Keith
Sí, así es como se ejecuta el primer programa para cada usuario. El primer proceso en el sistema se ejecuta como root. Hay muchas formas de eliminar privilegios, incluidas todas las formas en que se pueden escalar los privilegios, y algunas más.
ctrl-alt-delor

Respuestas:

9

Una solución portátil sería:

su abc -c google-chrome

Sin embargo, como google-chrome requiere acceso a X11, esto probablemente fallará a menos que lo desproteja, lo que sería una muy mala idea, especialmente mientras se ejecuta como root.

Si se permite el tunelado / reenvío X11, una mejor manera sería

ssh -X abc@localhost google-chrome

o

ssh -Y abc@localhost google-chrome
jlliagre
fuente
¿Por qué el enfoque ssh sería mejor? ¿No se seguiría ejecutando con la sesión X del usuario raíz?
Steve
1
@Steve Using su abc -c google-chromeprobablemente fallará en primer lugar porque abcno puede usar la sesión de root, ya que no se puede .Xauthorityleer abc.
jlliagre
Vaya, lo siento, te entendí mal, pensé que querías decir que sería mejor desde una perspectiva de seguridad
Steve
10

Respuesta corta: "Sí, esto es posible".

si desea ejecutar una aplicación que no sea X, simplemente use el siguiente comando:

comando sudo -u abc

Si desea ejecutar alguna aplicación X como otro usuario pero primero con su propio escritorio, debe crear una secuencia de comandos auxiliar, que simplificará su vida

  • cree una carpeta bin debajo de su directorio de inicio:

mkdir -p ~ / bin

y usando su editor de texto favorito, cree un archivo de la ~/bin/xsudosiguiente manera:

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

luego hazlo ejecutable:

chmod + x ~ / bin / xsudo

y úselo de la misma manera sudopero sin interruptores:

aplicación de usuario xsudo

Disfrutar.

PD: ¡Se recomienda encarecidamente comenzar xsessiondesde la rootcuenta!

Sarga
fuente
Lo intentaste ? Me temo que este ejemplo en particular no puede funcionar.
jlliagre
Sí, porque para iniciar una aplicación X desde otra sesión de usuario, debe permitir el acceso a su pantalla. Pero esto también es posible. Lamentablemente, no recuerdo exactamente cómo hacerlo.
Serge
@jlliagre Sin embargo, recuerdo cómo iniciar una aplicación X en el mismo host de una manera complicada: ssh -X abc@localhost google-chrome:)
Serge
Hmm ... Estoy escribiendo en comentarios lo que ya publicaste hace 22 minutos ...
Serge
Pero todavía tiene 6 votos para una solución que no funciona, mientras que solo obtuve uno para la correcta. El modelo StackExchange a veces es bastante frustrante ...
jlliagre
1

Hay una manera de ejecutar chromium cuando inicia sesión en el usuario root. Si lo abre normalmente, le dará un error como "el cromo no se puede ejecutar como root".

Para ejecutarlo sin el error, right clickel escritorio, cree un nuevo lanzador con el comando: chromium-browser --user-data-dir. Puedes nombrarlo como quieras, guardarlo, cuando lo abras, te dará el navegador de cromo. (Funciona en Ubuntu 10.04.4 LTS)

usuario299161
fuente
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 "" "${@}"
Alberto Salvia Novella
fuente