Kann root einen Befehl als Nicht-Root ausführen?

10

Ich bin ein Root-Benutzer und möchte eine Anwendung als einen anderen Benutzer ausführen. Ist dies möglich, ohne zu einem anderen Benutzer zu wechseln?

Etwas wie

# google-chrome user=abc

Ich führe tatsächlich 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 benutze ich system()innerhalb des Programms, um eine GUI-App aufzurufen. Ich möchte es jedoch nicht als Root ausführen, daher möchte ich Root-Berechtigungen nur für diesen Aufruf vorübergehend löschen.

Adnan Kamili
quelle
1
Laufen Sie die meiste Zeit wirklich als Root?
Keith
1
@Keith nichts in der Frage impliziert die meiste Zeit .
Kojiro
Oder auch nicht, deshalb bitte ich um Klarstellung.
Keith
Ja, so wird das erste Programm für jeden Benutzer ausgeführt. Der erste Prozess auf dem System wird als Root ausgeführt. Es gibt viele Möglichkeiten, Berechtigungen zu löschen, einschließlich aller Möglichkeiten, die Berechtigungen eskalieren können, sowie einige weitere.
Strg-Alt-Delor

Antworten:

9

Eine tragbare Lösung wäre:

su abc -c google-chrome

Da Google-Chrome jedoch einen X11-Zugriff erfordert, schlägt dies wahrscheinlich fehl, es sei denn, Sie haben es ungesichert. Dies wäre eine sehr schlechte Idee, insbesondere wenn Sie als Root ausgeführt werden.

Wenn X11-Tunelling / Weiterleitung zulässig ist, wäre dies ein besserer Weg

ssh -X abc@localhost google-chrome

oder

ssh -Y abc@localhost google-chrome
jlliagre
quelle
Warum sollte der SSH-Ansatz besser sein? Würde dies nicht immer noch mit der X-Sitzung des Root-Benutzers ausgeführt?
Steve
1
@Steve Using schlägt su abc -c google-chromewahrscheinlich an erster Stelle fehl, da abcdie Root-Sitzung nicht verwendet werden kann und für nicht .Xauthoritylesbar ist abc.
Jlliagre
Ups, tut mir leid, dass ich Sie missverstanden habe. Ich dachte, Sie meinten, es wäre aus Sicherheitsgründen besser
Steve,
10

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 abc Befehl

Wenn Sie eine X-Anwendung als anderer Benutzer ausführen möchten, aber zuerst mit Ihrem eigenen Desktop ein Hilfsskript erstellen müssen, wird dies Ihr Leben einfacher machen

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

mkdir -p ~ / bin

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 benutze es genauso wie sudoaber ohne Schalter:

xsudo- Benutzeranwendung

Genießen.

PS Ab xsessiondem rootKonto wird dringend davon abgeraten!

Serge
quelle
Hast Du es versucht ? Ich fürchte, dieses Beispiel kann nicht funktionieren.
Jlliagre
Ja, denn um eine X-Anwendung von einer anderen Benutzersitzung aus zu starten, müssen Sie den Zugriff auf Ihre Anzeige zulassen. Das ist aber auch möglich. Leider kann ich mich nicht erinnern, wie genau das zu tun ist.
Serge
@jlliagre Ich erinnere mich jedoch, wie man eine X-App auf dem gleichen Host auf knifflige Weise startet: ssh -X abc@localhost google-chrome:)
Serge
Hmm ... Ich schreibe in Kommentaren, was Sie bereits vor 22 Minuten gepostet haben ...
Serge
Aber Sie haben immer noch 6 Stimmen für eine nicht funktionierende Lösung, während ich nur eine für eine richtige habe. StackExchange-Modell ist manchmal ziemlich frustrierend ...
jlliagre
1

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

Um es ohne den Fehler auf right clickIhrem Desktop auszuführen , erstellen Sie einen neuen Launcher mit dem Befehl : chromium-browser --user-data-dir. Sie können es benennen, was Sie wollen, speichern, wenn Sie es öffnen, erhalten Sie den Chrom-Browser. (Funktioniert in Ubuntu 10.04.4 LTS)

user299161
quelle
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
quelle