RUN0(1)

NAZWA
run0 - podnosi uprawnienia

SKŁADNIA

run0 [OPCJE...] [POLECENIE...]

OPIS

run0 może posłużyć do tymczasowego i interaktywnego nabycie wyższych lub odmiennych uprawnień. Ma zbliżony skutek do sudo(8), lecz działa odmienne w kilku istotnych obszarach:

    • Od wywołującego do wywołanych poleceń nie są dziedziczone poświadczone kontekstu bezpieczeństwa lub wykonania, ponieważ polecenia są przywoływane z nowej, izolowanej usługi, rozwidlonej przez menedżera usług.

    • Uwierzytelnianie zachodzi za pomocą polkit[1], dzięki czemu wprowadzanie danych uwierzytelniających jest oddzielone od terminala (jeśli to tylko możliwe).

    • Ze względów bezpieczeństwa, dla wywołanego polecenia jest przydzielany odrębny, izolowany pseudoterminal, co oddziela również jego czas istnienia.

    • W implementacji nie jest wykorzystywana funkcja bitów dostępu do plików SetUID/SetGID.

Wszystko to powinno dać bezpieczniejszą i solidniejszą alternatywę dla mechanizmu sudo, w szczególności w środowiskach systemu operacyjnego, w którym nie jest dostępna obsługa SetUID/SetGID (np. po ustawieniu zmiennej NoNewPrivileges= w systemd-system.conf(5)).

Sesje wywołane za pomocą run0 będą działały poprzez stos PAM „systemd-run0”.

Proszę zauważyć, że run0 zaimplementowano jako alternatywne, wielowywołaniowe przywołanie systemd-run(1). Oznacza to, że run0 jest dowiązaniem symbolicznym do pliku wykonywalnego systemd-run i działa jak run0, gdy zostanie wywołane przez dowiązanie symboliczne; w innych sytuacjach działa jak systemd-run.

OPCJE

Obsługiwane są następujące opcje:

--unit=
    Używa danej nazwy jednostki, zamiast wygenerowanej automatycznie.

    Dodane w wersji 256.

--property=
    Ustawia właściwość tworzonej jednostki usługi. Opcja ta przyjmuje przypisania w tej samej postaci, co polecenie set-property systemctl(1).

    Dodane w wersji 256.

--description=
    Zapewnia opis przywoływanej jednostki usługi. Jeśli się go nie poda, za opis posłuży samo polecenie. Zob. Description= w systemd.unit(5).

    Dodane w wersji 256.

--slice=
    Tworzy nową część jednostki .service podanego wycinka (slice), zamiast korzystać z user.slice.

    Dodane w wersji 256.

--slice-inherit
    Tworzy nową część jednostki .service wycinka (slice), w którym został wywołany sam run0. Opcję tę można połączyć z --slice=, wówczas wycinek podany poprzez --slice= jest umieszczany wewnątrz wycinka w którym wywołano polecenie run0.

    Przykład: run0 zostanie wywołany w wycinku foo.slice, a argumentem opcji --slice= będzie bar. Wówczas jednostka zostanie umieszczona pod foo-bar.slice.

    Dodane w wersji 256.

--user=, -u, --group=, -g
    Przełącza na podanego użytkownika/grupę. Bez argumentów przyjmuje wartość domyślną „root”, chyba że podano też --area= lub --empower (zob. niżej), wtedy domyślnie przyjmuje wartość użytkownika wywołującego.

    Dodane w wersji 256.

--nice=
    Uruchamia wywoływaną sesję z podanym poziomem priorytetu nice.

    Dodane w wersji 256.

--chdir=, -D
    Uruchamia wywoływaną sesję z podanym katalogiem roboczym. Jeśli nie poda się katalogu, domyślnie będzie to bieżący katalog roboczy — przy przełączaniu na użytkownika root albo katalog domowy użytkownika docelowego — w pozostałych przypadkach.

    Dodane w wersji 256.

--via-shell
    Przywołuje powłokę zgłoszeniową użytkownika docelowego i wykonuje podane polecenie (jeśli je podano) za jej pomocą.

    Dodane w wersji 258.

-i
    Skrótowa forma opcji --via-shell --chdir='~'.

    Dodane w wersji 258.

--setenv=NAZWA[=WARTOŚĆ]
    Uruchamia wywoływaną sesję z ustawioną podaną zmienną środowiskową. Parametr ten można podać wielokrotnie, aby ustawić wiele zmiennych. Jeśli pominie się „=” i WARTOŚĆ, użyta będzie wartość zmiennej o takiej samej nazwie ze środowiska wywołującego.

    Dodane w wersji 256.

--background=KOLOR
    Zmienia kolor tła na podany kolor ANSI, na czas trwania sesji. Jeśli nie poda się koloru, tło będzie zabarwione czerwonawo przy działaniu jako root i żółtawo, przy działaniu pod innym identyfikatorem użytkownika, jako przypomnienie działania ze zmienionymi uprawnieniami. Kolor należy podać jako kolor tła ANSI X3.64 SGR, tj. łańcuch, taki jak: „40”, „41”, ..., „47”, „48;2;...”, „48;5;...”. Więcej na ten temat w artykule Sekwencje specjalne ANSI (angielska Wikipedia)[2]. Aby wyłączyć, należy podać łańcuch pusty.

    Przykład: „--background=44” ustawi niebieskie tło.

    Dodane w wersji 256.

--pty, --pty-late, --pipe
    Żąda alokacji pseudo TTY dla sesji run0 (przy opcji --pty lub --pty-late), lub żąda bezpośredniego przekazywania deskryptorów plików STDIO wywołującego (przy opcji --pipe). --pty-late jest bardzo podobne do --pty, lecz zaczyna przetwarzanie TTY dopiero po ukończeniu inicjowania jednostki, pozostawiając do tego czasu wejście do dyspozycji agentów polkit/haseł. Jeśli nie poda się żadnego z tych przełączników, albo poda --pipe wraz z jednym z --pty/--pty-late, tryb zostanie wybrany automatycznie: jeśli standardowe wejście, standardowe wyjście i standardowe wyjście błędów są połączone z terminalem, to alokowany jest pseudoterminal (w trybie --pty-late dzieje się tak, o ile nie podano --no-ask-password, bowiem wówczas wybierany jest --pty); w innym przypadku odpowiednie deskryptory plików są przekazywane bezpośrednio.

    --pty oraz --pipe dodano w wersji 257.

    --pty-late dodano w wersji 258.

--shell-prompt-prefix=ŁAŃCUCH
    Ustawia łańcuch przedrostka zachęty powłoki. W ten sposób ostatecznie wpływa się na zmienną środowiskową $SHELL_PROMPT_PREFIX wywoływanego programu, która jest zwykle importowana do zachęty powłoki. Domyślnie – jeśli obsługiwane są emoji – pokazywane jest emoji superbohatera (🦸). To domyślne ustawienie można zmienić (lub wyłączyć) przekazując zmienną środowiskową $SYSTEMD_RUN_SHELL_PROMPT_PREFIX do run0, zob. niżej. Ustawienie łańcucha pustego wyłączy stosowania przedrostka zachęty powłoki.

    Dodane w wersji 257.

--lightweight=WARTOŚĆ-LOGICZNA
    Reguluje, czy aktywować menedżer usług dla poszczególnych użytkowników wobec użytkownika docelowego. Domyślnie (gdy nieustawione lub ustawione na auto), jeśli użytkownikiem docelowym jest „root” lub użytkownik systemowy, w wyniku wywołania run0 menedżer usług dla poszczególnych użytkowników nie jest aktywowany; w innych przypadkach jest.

    Ostatecznie, w ten sposób kontroluje się zmienną środowiskową $XDG_SESSION_CLASS, która oddziałuje na pam_systemd(8).

    Dodane w wersji 258.

--area=OBSZAR
    Reguluje „obszar” konta docelowego, do którego następuje logowanie. Obszary to drugorzędne katalogi domowe wewnątrz podstawowego katalogu domowego użytkownika docelowego tj. logowanie do obszaru „foobar” konta skutkuje ustawienie $HOME na ~/Areas/foobar przy zalogowaniu.

    Przy stosowaniu tej opcji, domyślny użytkownik do którego następuje przejście zmienia się z roota na użytkownika wywołującego (lecz pierwszeństwo ma --user=, zob. wyżej). Innymi słowy, podanie jedynie obszaru, bez użytkownika, jest mechanizmem tworzącym nową sesję użytkownika wywołującego, jedynie ze zmienionym obszarem.

    Ostatecznie, w ten sposób kontroluje się zmienną środowiskową $XDG_AREA, która oddziałuje na pam_systemd(8).

    Więcej informacji o pojęciu obszaru opisano w podręczniku pam_systemd_home(8).

    Dodane w wersji 258.

--empower
    Po podaniu, run0 podniesie przywileje wybranego użytkownika (opcją --user=) lub bieżącego użytkownika, jeśli nie wybrano użytkownika. Obecnie oznacza to, że wywoływany proces otrzymuje wszystkie dostępne przywileje oraz dodaje, jako grupę dodatkową, grupę „empower” (dla której domyślnie dozwolone są wszystkie akcje polkit), natomiast w przyszłości, zastosowanie tej opcji może zapewnić dodatkowe przywileje.

    Proszę zauważyć, że inne (nieuprzywilejowane) procesy wybranego użytkownika będą miały przywileje wobec wywoływanego procesu. Nie powinno stosować się tej opcji w środowiskach, gdzie jako wybrany użytkownik mogą działać złośliwe procesy.

    Dodane w wersji 259.

--same-root-dir
    Wykonuje sesję run0 w tym samym katalogu głównym, w jakim wykonywane jest polecenie run0.

    Dodane w wersji 259.

--machine=
    Dokonuje operacji w lokalnym kontenerze. Określa nazwę kontenera, z którym ma się połączyć.

    Dodane w wersji 256.

--no-ask-password
    Nie odpytuje użytkownika o uwierzytelnienie, do operacji wymagających dodatkowych uprawnień.

-h, --help
    Wyświetla krótki komunikat pomocy i wychodzi.

--version
    Wyświetla krótką informację o wersji i wychodzi.

Wszelkie argumenty wiersza polecenia występujące po pierwszym argumencie niebędącym opcją, stają się częścią wiersza polecenia dla wywoływanego procesu. Jeśli nie poda się wiersza polecenia, wywoływana jest powłoka interaktywna. Powłokę, która ma być wywołana, ustawia się za pomocą --via-shell – wówczas używa się powłoki użytkownika docelowego – lub poprzez --setenv=POWŁOKA=.... Domyślnie wykonywana jest powłoka użytkownika pierwotnego przy wywołaniu lokalnym, albo /bin/sh, jeśli korzysta się z --machine=.

Proszę zauważyć, że w odróżnieniu od sudo, run0 zawsze tworzy powłoki korzystając z zachowania powłoki zgłoszeniowej, niezależnie od podania opcji -i.

STATUS ZAKOŃCZENIA

W przypadku powodzenia zwracane jest 0. Jeśli run0 nie uda się uruchomić sesji lub podane polecenie zawiedzie, zwrócona zostanie wartość niezerowa.

ZMIENNE ŚRODOWISKOWE

Podobnie jak w przypadku systemd-run, sesja odziedziczy środowisko systemu od menedżera usług. Dodatkowo ustawione zostaną następujące zmienne środowiskowe:

$TERM
    Skopiowana z $TERM wywołującego. Może być przesłonięta za pomocą opcji --setenv=

    Dodane w wersji 256.

$SUDO_USER
    Ustawiana na nazwę pierwotnego użytkownika.

    Dodane w wersji 256.

$SUDO_UID
    Ustawiana na numeryczny, uniksowy identyfikator pierwotnego użytkownika.

    Dodane w wersji 256.

$SUDO_GID
    Ustawiana na główny, numeryczny, uniksowy identyfikator grupy pierwotnego użytkownika.

    Dodane w wersji 256.

$SHELL_PROMPT_PREFIX
    Domyślnie ustawiana na emoji superbohatera (jeśli jest to obsługiwane), lecz może być przesłonięta przez zmienną środowiskową $SYSTEMD_RUN_SHELL_PROMPT_PREFIX (zob. niżej) lub przełącznik --shell-prompt-prefix= (zob. wyżej).

    Dodane w wersji 257.

Do run0 można przekazać następujące zmienne:

$SYSTEMD_RUN_SHELL_PROMPT_PREFIX
    Jeśli ustawiona, przesłania domyślny przedrostek zachęty powłoki, który run0 ustawia dla przywołanej powłoki (emoji superbohatera). Ustawienie łańcucha pustego wyłączy stosowania przedrostka zachęty powłoki.

    Dodane w wersji 257.

ZOBACZ TAKŻE

systemd(1), systemd-run(1), sudo(8), machinectl(1), pam_systemd(8)

UWAGI

1.  polkit
    https://www.freedesktop.org/wiki/Software/polkit

2.  Sekwencje specjalne ANSI (angielska Wikipedia)
    https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.