Ist es für Root möglich, einen Befehl als Nicht-Root auszuführen?

Ist es für Root möglich, einen Befehl als Nicht-Root auszuführen?

Ich bin Root-Benutzer und möchte nun eine beliebige Anwendung als anderer Benutzer ausführen. Ist das möglich, ohne zu einem anderen Benutzer zu wechseln?

Etwas wie

# google-chrome user=abc

Ich führe gerade ein CLI-Programm als Nicht-Root-Benutzer aus. Ich habe das Sticky-Bit aktiviert und verwende setuid, sodass das Programm mit Root-Rechten ausgeführt wird. Jetzt verwende ich system()innerhalb des Programms, um eine GUI-Anwendung aufzurufen. Ich möchte sie aber nicht als Root ausführen, daher möchte ich die Root-Rechte nur für diesen Aufruf vorübergehend aufheben.

Antwort1

Eine portable Lösung wäre:

su abc -c google-chrome

Da Google Chrome jedoch X11-Zugriff erfordert, wird dies wahrscheinlich fehlschlagen, sofern Sie es nicht ungesichert aufheben, was insbesondere bei der Ausführung als Root keine gute Idee wäre.

Wenn X11-Tunneling/Forwarding erlaubt ist, wäre ein besserer Weg

ssh -X abc@localhost google-chrome

oder

ssh -Y abc@localhost google-chrome

Antwort2

Kurze Antwort: „Ja, das ist möglich“.

wenn Sie eine Nicht-X-Anwendung ausführen möchten, verwenden Sie einfach den folgenden Befehl:

sudo -u abcBefehl

Wenn Sie eine X-Anwendung als anderer Benutzer, aber mit Ihrem eigenen Desktop ausführen möchten, müssen Sie zuerst ein Hilfsskript erstellen, das Ihnen das Leben erleichtert

  • Erstellen Sie einen Bin-Ordner in Ihrem Home-Verzeichnis:

mkdir -p ~/bin

und erstellen Sie mit Ihrem bevorzugten Texteditor eine Datei ~/bin/xsudowie folgt:

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

dann machen Sie es ausführbar:

chmod +x ~/bin/xsudo

und verwenden Sie es auf die gleiche Weise wie, sudojedoch ohne Schalter:

AbonnierenBenutzeranwendung

Genießen.

PS: Es wird dringend davon abgeraten xsession, vom rootKonto aus zu starten!

Antwort3

Es gibt eine Möglichkeit, Chromium auszuführen, wenn Sie als Root-Benutzer angemeldet sind. Wenn Sie es normal öffnen, wird ein Fehler wie „Chromium kann nicht als Root ausgeführt werden“ angezeigt.

Um es ohne den Fehler auszuführen, right clickerstellen Sie auf Ihrem Desktop einen neuen Launcher mit dem Befehl: chromium-browser --user-data-dir. Sie können ihn beliebig benennen und speichern. Wenn Sie ihn öffnen, wird Ihnen der Chromium-Browser angezeigt. (Funktioniert unter Ubuntu 10.04.4 LTS)

Antwort4

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

verwandte Informationen