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

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

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

De hecho, estoy ejecutando un programa CLI como usuario no root. He activado el bit adhesivo 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 sólo para esa llamada.

Respuesta1

Una solución portátil sería:

su abc -c google-chrome

Sin embargo, como Google Chrome requiere acceso X11, es probable que esto falle a menos que lo desproteja, lo cual sería una muy mala idea, especialmente cuando se ejecuta como root.

Si se permite la sintonización/reenvío X11, una mejor manera sería

ssh -X abc@localhost google-chrome

o

ssh -Y abc@localhost google-chrome

Respuesta2

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

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

sudo -u abcdominio

Si desea ejecutar alguna aplicación X como otro usuario pero con su propio escritorio, primero necesita crear un script auxiliar, que le simplificará la vida.

  • cree una carpeta bin en su directorio de inicio:

mkdir -p ~/bin

y usando su editor de texto favorito cree un archivo ~/bin/xsudode la siguiente 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 utilícelo de la misma manera sudopero sin ningún interruptor:

xsudoaplicación de usuario

Disfrutar.

PD: ¡ Se desaconseja encarecidamente comenzar xsessiondesde la cuenta!root

Respuesta3

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

Para ejecutarlo sin el error, right clicken su escritorio, cree un nuevo iniciador con el comando: chromium-browser --user-data-dir. Puedes ponerle el nombre que quieras, guardarlo, cuando lo abras te dará el navegador chromium. (Funciona en Ubuntu 10.04.4 LTS)

Respuesta4

#! /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 "" "${@}"

información relacionada