Jak sprawić, aby / sbin / shutdown, / sbin / reboot itp. Wymagały sudo ponownie w 16.04?


18

Z jakiegoś powodu, mamy nie muszą już być root (lub używając sudo), aby uruchomić /sbin/shutdown, /sbin/rebootetc.

Wydaje się, że dzieje się tak, ponieważ te pliki wykonywalne są teraz dowiązaniami symbolicznymi, z /bin/systemctlktórymi obsługuje wszystko jak zwykły użytkownik.

Co jednak, jeśli chcę shutdowni rebootponownie wymagać uwierzytelnienia roota? Jak mogę to osiągnąć?


3
Domyślam się, że zasady Polkit. Zmodyfikuj askubuntu.com/a/570969/158442 zgodnie z potrzebami (użyj pkaction | grep login1dla innych zasad zainteresowania)
muru

3
(przykład reguł wymagających uprawnień administratora: askubuntu.com/a/744094/158442 )
muru

1
Czy to nie tylko, jeśli jesteś jedyną zalogowaną osobą. Jeśli w systemie jest ktoś jeszcze zalogowany, zostaniesz poproszony o podanie hasła roota.
ognjen

To może nie być odpowiedź, której oczekujesz, ale podobne zachowanie może być spowodowane przez innego administratora, który edytował twoje / etc / sudoers. Jeśli to jest przyczyną problemu, możesz go zmienić, pisząc sudo visudoi sprawdzając, czy jest linia ze ścieżką do tych plików wykonywalnych.
Damien

Odpowiedzi:


5

Systemd rzeczywiście obsłużyć shutdown, rebooti inne polecenia, a przywileje przypisane domyślne są liberalne. Aby to zmienić, musisz utworzyć regułę Polkit. Utwórz .pklaplik w /etc/polkit-1/localauthority/50-local.d(powiedzmy confirm-shutdown.pkla) zawierający:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

Różne wyłączenie, restart, itp polecenia są pod względem polkit działania w org.freedesktop.login1, na przykład org.freedesktop.login1.power-off, org.freedesktop.login1.rebootitd Specyficzny problemem jest domyślna konfiguracja, która jest w /usr/share/polkit-1/actions/org.freedesktop.login1.policy:

<action id="org.freedesktop.login1.power-off">
        <description>Power off the system</description>
        ...
        <defaults>
                <allow_any>auth_admin_keep</allow_any>
                <allow_inactive>auth_admin_keep</allow_inactive>
                <allow_active>yes</allow_active>
        </defaults>

Pamiętaj, że pozwala to aktywnemu użytkownikowi na wyłączenie, ponowne uruchomienie itp.


0

Możesz użyć chmodpolecenia.

  • Jeśli chcesz dać dostęp tylko do roota, możesz napisać:

    chmod 700 directory/to/the/file
    
  • Jeśli chcesz zezwolić rootowi i grupie sudo, możesz napisać:

    chmod 770 directory/to/the/file
    
  • Jeśli chcesz zmienić grupę plików z sudo na inną (jak użytkownik lub administratorzy), musisz wpisać:

    chown owner:group directory/to/the/file
    
  • Jeśli chcesz cofnąć, uruchom:

    chown root:sudo filedirectory 
    

Uwaga : może być konieczne użycie sudotej komendy lub zalogowanie się na konto root


Zauważ, że próba zmiany uprawnień do linku zmieni uprawnienia do celu (w tym przypadku /bin/systemctl), więc uruchomienie chmod / sbin / shutdown wpłynie na wszystkie linki wskazujące, /bin/systemctlże uprawnienia do bin/systemctlzostaną zmienione, co potwierdza polecenie $ ll /bin/systemctl -rwx ------ 1 root root 659848 18 stycznia 16:04 / bin / systemctl *
Starszy Geek

Jeśli chcesz to zmienić, domyślne uprawnienia to-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Starszy Geek


-1

Możesz utworzyć skrypt sprawdzający, czy użytkownik uruchamia go z uprawnieniami administratora, czy nie.
Następnie uruchomi polecenie systemctl lub zwróci błąd.

#! / bin / bash
if ["$ (whoami)"! = "root"]; następnie
    echo „Przepraszamy, nie jesteś rootem”.
    wyjście 1
jeszcze
    (polecenie zamknięcia systemu)
fi

Źródło


4
Co powstrzyma użytkownika innego niż root przed obejściem tego skryptu?
Robie Basak,

-1

Spróbuj zmienić swoje uprawnienia w terminalu. Możesz sprawić, by był wykonywalny tylko przez określoną grupę, taką jak koło lub administrator. Niestety (a może na szczęście) plik może mieć tylko jedną własność grupy, więc chown po prostu nie działałby sam. Spróbuj „sudo chown root: wheel / sbin / shutdown”, a następnie „sudo chmod g + x / sbin / shutdown”. Spowoduje to, że plik będzie wykonywalny tylko przez roota i administratorów (wzdrygnie się), a sudoers będą musieli wprowadzić swoje hasła.


2
Grupa „koła” jest sprawą Arch Linux i być może innych dystrybucji, ale zdecydowanie nie dotyczy Ubuntu btw.
Bajt Dowódca

2
To nie jest skuteczne. Użytkownik może po prostu pobrać plik binarny systemctl z innego miejsca i uruchomić go zamiast tego.
Robie Basak,

@Robie, możesz to zrobić z dowolnym rozwiązaniem. Możesz przytrzymać przycisk zasilania. Moje rozwiązanie działa na to, o co prosi.
chevydog
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.