![Ist es für Root möglich, einen Befehl als Nicht-Root auszuführen?](https://rvso.com/image/1331456/Ist%20es%20f%C3%BCr%20Root%20m%C3%B6glich%2C%20einen%20Befehl%20als%20Nicht-Root%20auszuf%C3%BChren%3F.png)
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/xsudo
wie 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, sudo
jedoch ohne Schalter:
AbonnierenBenutzeranwendung
Genießen.
PS: Es wird dringend davon abgeraten xsession
, vom root
Konto 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 "" "${@}"