Czy root może wykonać polecenie jako użytkownik inny niż root?


10

Jestem użytkownikiem root i przypuszczam, że chcę uruchomić dowolną aplikację jako inny użytkownik. Czy to możliwe bez przełączania się na innego użytkownika?

Coś jak

# google-chrome user=abc

W rzeczywistości wykonuję program CLI jako użytkownik inny niż root. Włączyłem lepki bit i używam setuid, więc program działa z uprawnieniami roota. Teraz używam system()w programie do wywołania aplikacji GUI. Ale nie chcę uruchamiać go jako root, więc chcę tymczasowo zrzucić uprawnienia roota tylko dla tego połączenia.


1
Czy naprawdę przez większość czasu działasz jako root?
Keith,

1
@ Zdaje się, że nic w pytaniu nie sugeruje przez większość czasu .
kojiro

Lub nie, dlatego proszę o wyjaśnienia.
Keith

Tak, tak uruchamiany jest pierwszy program dla każdego użytkownika. Pierwszy proces w systemie jest uruchamiany jako root. Istnieje wiele sposobów na zniesienie przywileju, w tym wszystkie sposoby na zwiększenie uprawnień oraz kilka innych.
ctrl-alt-delor

Odpowiedzi:


9

Przenośnym rozwiązaniem byłoby:

su abc -c google-chrome

Ponieważ jednak Google-chrome wymaga dostępu do X11, prawdopodobnie nie powiedzie się, chyba że go nie zabezpieczysz, co byłoby bardzo złym pomysłem, szczególnie podczas uruchamiania jako root.

Jeśli tunelowanie / przekazywanie X11 jest dozwolone, lepszym sposobem byłoby

ssh -X abc@localhost google-chrome

lub

ssh -Y abc@localhost google-chrome

Dlaczego podejście ssh byłoby lepsze? Czy to nadal nie działałoby przy użyciu sesji X użytkownika root?
Steve

1
@Steve Using su abc -c google-chromenajprawdopodobniej zakończy się niepowodzeniem, ponieważ abcnie może korzystać z sesji roota, .Xauthorityponieważ jest nieczytelny abc.
jlliagre

Ups, przepraszam, że źle cię zrozumiałem, myślałem, że masz na myśli, że będzie lepiej z punktu widzenia bezpieczeństwa
Steve

10

Krótka odpowiedź: „Tak, jest to możliwe”.

jeśli chcesz uruchomić aplikację inną niż X, użyj następującego polecenia:

sudo -u abc komenda

Jeśli chcesz uruchomić aplikację X jako inny użytkownik, ale najpierw na swoim pulpicie musisz utworzyć skrypt pomocnika, który ułatwi Ci życie

  • utwórz folder bin w swoim katalogu domowym:

mkdir -p ~ / bin

i używając ulubionego edytora tekstu utwórz plik ~/bin/xsudow następujący sposób:

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

następnie uczyń go wykonywalnym:

chmod + x ~ / bin / xsudo

i używaj go w ten sam sposób, sudoale bez żadnych przełączników:

Aplikacja użytkownika xsudo

Cieszyć się.

PS Począwszy xsessionod rootkonta zdecydowanie odradzam!


Próbowałeś? Obawiam się, że ten konkretny przykład nie działa.
jlliagre

Tak, ponieważ aby uruchomić aplikację X z innej sesji użytkownika, musisz zezwolić na dostęp do swojego ekranu. Ale jest to również możliwe. Niestety nie pamiętam, jak dokładnie to zrobić.
Serge

@jlliagre Jednak pamiętam, jak uruchomić aplikację X na tym samym hoście w trudny sposób: ssh -X abc@localhost google-chrome:)
Serge

Hmm ... Piszę w komentarzach to, co już opublikowałeś 22 minuty temu ...
Serge

Ale nadal masz 6 głosów za niedziałające rozwiązanie, a ja mam tylko jeden za poprawne. Model StackExchange jest czasem dość frustrujący ...
jlliagre

1

Istnieje sposób na uruchomienie chromu po zalogowaniu do użytkownika root. Jeśli otworzysz go normalnie, pojawi się błąd „chrom nie może być uruchamiany jako root”.

Aby go uruchomić bez błędu, right clickpulpicie, należy utworzyć nową wyrzutnię z poleceniem: chromium-browser --user-data-dir. Możesz nazwać go tak, jak chcesz, zapisz go, gdy go otworzysz, da ci przeglądarkę chromową. (Działa w Ubuntu 10.04.4 LTS)


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 "" "${@}"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.