Wyłączyć wyłączanie
Właśnie konfiguruję serwer terminali oparty o CentOSa i GNOME. Wszystko wygląda całkiem nieźle, ale natknąłem się na pewien niewielki problem: jak pozbawić użytkowników korzystających z tego terminala możliwości wyłączania/restartowania całego systemu? Zostawienie tej opcji włączonej może skutkować dość nieprzyjemnymi objawami w postaci nagłych i niespodziewanych restartów całego serwera, a ja nie lubię się denerwować.
Okazuje się, że jest kilka metod, którymi zły użytkownik może się posłużyć i powinniśmy zneutralizować je wszystkie. Ale po kolei:
1) Ikonki „Uruchom ponownie” oraz „Wyłącz” widoczne na ekranie logowania (GDM).
To akurat wyłącza się wyjątkowo prosto:
W sekcji [greeter] pliku /etc/gdm/custom.conf
musimy dopisać linijkę
SystemMenu=false
i zrestartować X’y. Koniec.
Po takim zabiegu ikony służące do denerwowania administratora znikną z ekranu powitalnego raz na zawsze (albo do ponownego włączenia).
Uruchamiamy gconf-editor (jeżeli nie mamy go w systemie, to trzeba sobie doinstalować: yum install gconf-editor), i w gałęzi /apps/panel/global zaznaczamy opcję „disable_log_out„. Nazwa jest trochę myląca, bo samej możliwości wylogowania z systemu nie wyłącza, ale robi to, co mi potrzebne a ja nie muszę chyba wszystkiego rozumieć :-)
3) Zablokowanie możliwości wywołania „poweroff” lub „reboot” z terminala.
Domyślnie CentOS (zamiast kombinować z flagą SUID) dość intensywnie korzysta z programu consolehelper(*) i właśnie w jego konfiguracji będziemy grzebać. Wszystkie programy, które mogą być uruchamiane przez zwykłych użytkowników z prawami roota zdefiniowane są w dwóch katalogach:
/etc/security/console.apps
oraz /etc/pam.d
Aby wyłączyć (brutalnie, ale skutecznie) użytkownikom możliwość denerwowania innych, należy z pierwszego z podanych katalogów (czyli /etc/security/console.apps) usunąć pliki „reboot„, „halt” oraz „poweroff„. Warto jeszcze usunąć dowiązania symboliczne do samego consolehelpera z katalogu /usr/bin (bez usuwania linków użytkownikom, zamiast „nie ma takiego pliku…” wyświetlać się będzie okienko „Nieznany błąd”, co wygląda mało profesjonalnie :-)).
I to chyba wszystko. Po krótkich staraniach nie udało mi się zdalnie wyłączyć systemu nie posiadając uprawnień roota :-)
(*) Trochę więcej o programie consolehelper można poczytać sobie tutaj.