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ę, zamiast na roota.
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.
--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, --pipe
Żąda alokacji pseudo TTY dla sesji
run0 (przy opcji
--pty), lub żąda
bezpośredniego przekazywania deskryptorów plików STDIO
wywołującego (przy opcji
--pipe). Jeśli nie poda
się żadnego z tych przełączników, albo poda
oba, 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 innym przypadku odpowiednie deskryptory
plików są przekazywane bezpośrednio.
Dodane w wersji 257.
--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.
--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ą --setenv=POWŁOKA=... i obecnie
domyślnie jest to powłoka użytkownika
pierwotnego (a nie użytkownika docelowego) przy wywołaniu
lokalnym, albo /bin/sh, jeśli korzysta się z
--machine=.
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.