Korzystam z prywatnego serwera gier na bezgłowym systemie Linux. Ponieważ nie jestem idiotą, wspomniany serwer działa jako własny nieuprzywilejowany użytkownik z minimalnymi prawami dostępu niezbędnymi do pobierania aktualizacji i modyfikowania światowej bazy danych.
Utworzyłem również plik jednostki systemowej, aby poprawnie uruchamiał, zatrzymywał i restartował serwer w razie potrzeby (na przykład dla wspomnianych aktualizacji).
Jednak, aby rzeczywiście zadzwonić systemctl
lub service <game> start/stop/restart
jeszcze trzeba zalogować się jako root albo w sudo
zdolnej użytkownika.
Czy istnieje sposób, aby powiedzieć systemd, że dla <game>
usługi nieuprzywilejowany użytkownik gamesrv
może uruchamiać polecenia start / stop / restart?
Odpowiedzi:
Mogę wymyślić dwa sposoby, aby to zrobić:
Jednym z nich jest uczynienie z usługi usługi użytkownika, a nie usługi systemowej.
Zamiast tworzyć jednostkę systemową, jednostka systemowa zostanie umieszczona w katalogu osobistym użytkownika usługi, pod adresem
$HOME/.config/systemd/user/daemon-name.service
. Ten sam użytkownik może następnie zarządzać usługą za pomocąsystemctl --user <action> daemon-name.service
.Aby umożliwić jednostce użytkownika rozpoczęcie rozruchu , root musi włączyć linger dla konta, tj
sudo loginctl enable-linger username
. Jednostka musi być równieżWantedBy=default.target
.Innym sposobem jest umożliwienie użytkownikowi dostępu do zarządzania jednostką systemową za pośrednictwem PolicyKit. Wymaga to systemd 226 lub wyższej (i PolicyKit> = 0.106 dla plików reguł JavaScript. D - sprawdź za pomocą
pkaction --version
).Utworzyłbyś nowy plik konfiguracyjny PolicyKit, np.
/etc/polkit-1/rules.d/57-manage-daemon-name.rules
Który sprawdza atrybuty, na które chcesz zezwolić. Na przykład :Nazwany użytkownik może następnie zarządzać nazwaną usługą z
systemctl
użyciem i bezsudo
.źródło
loginctl
działał.sudo
jest do tego stworzony. Zmodyfikuj swój/etc/sudoers
plik za pomocą,visudo
aby dodaćCmd_alias
komendę, z której nieuprzywilejowany użytkownik będzie mógł korzystać:i dodaj wiersz, aby umożliwić nieuprzywilejowanemu użytkownikowi korzystanie z poleceń zdefiniowanych za pomocą aliasu w następujący sposób:
Przeczytaj więcej dokumentacji na temat różnych parametrów polecenia sudo.
Może być konieczne zainstalowanie
sudo
pakietu, aby byłsudo
dostępny w systemie.źródło
systemd
robi plik jednostki, jest określenie, że należy go uruchomić jakogamesrv
.Możesz powiązać się
sudo
z zapewnieniem dostępu równoważnegoroot
, ale można go również użyć, aby umożliwić określony dostęp użytkownika root do określonego, ograniczonego zestawu poleceń.W jaki sposób odpowiedziano już na błąd serwera, w [ Udzielanie dostępu do zestawu poleceń użytkownikowi innemu niż root bez dostępu sudo zestawu poleceń do użytkownika innego niż root bez sudo).
Korzystanie z PolicyKit jest nadal rzadkie. Używanie systemowej „jednostki użytkownika” powinno działać dobrze, ale historycznie twój cel został osiągnięty wiele razy dzięki możliwości
sudo
umożliwienia użytkownikowi uruchamiania określonych poleceń jako root.źródło