-
Uwaga na suid-y
Do popełnienia tego tekstu skłonił mnie artykuł o tym jak zrobić żeby ping działał. Nie chodzi mi o samego ping-a, bo ping od dawien dawna suid-a miał i jakoś się świat nie zawalił. Ale jest też parę innych narzędzi które działają „z root-a” i aż kusi żeby zrobić „chmod +s”. Ot choćby traceroute czy jego „kuzyn” mtr. Danie s-ki jest łatwe i rozwiązuje sprawę, więc dlaczego twórcy dystrybucji tego nie zrobili? Ano z powodów bezpieczeństwa. Bo program z ustawionym setUID wykonuje się z prawami właściciela pliku a nie tego kto go uruchomił. Czyli program setuid-root będzie się wykonywał z prawami root-a niezależnie kto go uruchomi. Czyli, jeśli program ma jakiś błąd, to jego wykorzystanie daje możliwość zrobienie czegoś jako root właśnie. Akurat ping jest na tyle prostu i na tyle stary, że nie spodziewam się tu jakichś zagrożeń, o tyle włamania przez mtr-a już się zdarzały parę razy. W polityce bezpieczeństwa najlepsza jest zasada dawania minimalnych niezbędnych uprawnień i ani trochę więcej. A ustawienie +s tak po prostu to danie dostępu dla wszystkich. Co więc zrobić, jeśli trzeba takiego ping-a czy mtr-a udostępnić jakiejś grupie użytkowników? Słowo klucz to „grupa”. Jeśli chcemy żeby kilka kont mogło uruchamiać na przykład mtr-a, trzeba stworzyć grupę. Czyli robimy:
groupadd mtr
chmod o-x /usr/bin/mtr
chgrp mtr /usr/bin/mtr
chmod u+s /usr/bin/mtr
Co zrobiliśmy? Po pierwsze, stworzyliśmy grupę „mtr”. Potem zabraliśmy możliwość uruchomienia mtr-a dla wszystkich, czyli może go uruchomić tylko root i członkowie grupy mtr. Na koniec ustawiliśmy setuid-a. Jeśli ktoś ma mieć prawo korzystania z mtr to się go dopisuje do grupy mtr i tyle. Oczywiście, jeśli ktoś znajdzie błąd w mtr, to nadal będzie go można wykorzystać. Ale już nie będzie to takie łatwe.