Gdyby to był normalny plik binarny, możesz ustawić go w trybie setuid, uruchamiając
# chmod u+s /path/to/binary
Niestety skrypty nie mogą być setuid. (Cóż, możesz, ale jest to ignorowane). Powodem tego jest to, że pierwszy wiersz skryptu informuje system operacyjny, pod jakim tłumaczem ma uruchomić skrypt. Na przykład, jeśli masz skrypt z:
#!/bin/bash
Tak naprawdę skończyłbyś biegać
/bin/bash /path/to/script
Oczywiście potrzebujesz tłumacza setuid, co oznaczałoby, że wszystkie skrypty byłyby setuid. To byłoby złe.
Możesz to zrobić za pomocą sudo, umieszczając następujące polecenie w pliku / etc / sudoers, uruchamiając visudo.
ALL ALL=NOPASSWD: /path/to/script
A teraz każdy użytkownik może uruchomić
$ sudo /path/to/script
Pozwala im to uruchomić skrypt bez wpisywania hasła.
Istnieje alternatywa, która nie wymaga sudo w poleceniu, która wymaga utworzenia małego pliku binarnego z ustawionym skryptem, który wykonuje skrypt, ale każdy dodatkowy plik binarny z setuid stanowi kolejny potencjalny problem bezpieczeństwa.
ALL
nazwą użytkownika, aby umożliwić uruchamianie tylko jednego sudoera bez wprowadzania hasła.Musiałem wstawić ten wiersz NA KOŃCU / etc / sudoers:
ALL ALL = NOPASSWD: <filename>
Najwyraźniej późniejsze%admin ALL=(ALL) ALL
zastąpienie wymagało hasła dla administratorów.Nie ma problemu z bezpieczeństwem, który pozwala na uruchamianie skryptu jako root, o ile skrypt wykonuje dobrze określoną, nieszkodliwą dozwoloną akcję i, jeśli wartości dla jakichkolwiek parametrów nie mogą spowodować, że skrypt źle się zachowuje.
Ale jest gotcha ...
Zawsze używaj pełnych ścieżek w nazwach poleceń i plików. Jeśli napiszesz coś
echo Hello world!
w stylumyrootscript
, ktoś może napisać a~/bin/echo script
imyrootscript
wykonać jako root cokolwiek w nim jest./bin/echo "Hoping this will keep you safe"
:-)źródło
Domyślnie członkowie
wheel
grupy są uprawnieni dosudo
dowolnego polecenia jakoroot
. Prawdopodobnie tak właśnie używaszsudo
do tej pory.Aby zezwolić innemu użytkownikowi, musisz utworzyć
sudoers
regułę. Na przykład:Umożliwi użytkownikowi
mickey.mouse
uruchomienie polecenia/usr/local/bin/test.sh
tak, jakroot
bez konieczności podawania dodatkowego hasła.Powinieneś przeczytać ten dokument, aby uzyskać więcej informacji.
źródło
Użyj,chmod +s <filename>
aby zobaczyć bit Suid. Oznacza to, że gdy plik jest wykonywany, działa z uprawnieniami właściciela pliku (więc zmień go na root, aby tak działał).Jednak może to być BARDZO niebezpieczne w przypadku skryptów typu bash, ponieważ użytkownik znajduje sposób, aby to zmienić, może łatwo uzyskać powłokę root. Upewnij się, że nie może być napisany przez nikogo poza rootem.Linux nie pozwala ci konfigurować skryptów, aby to zrobić, musisz go skompilować jako program. Zamiast tego możesz użyć pliku sudoers (/ etc / sudoers) i dodać taką linię.
<username> ALL = NOPASSWD: /path/to/script
źródło
Inna alternatywa: możesz zrobić małe setuidowe opakowanie C wokół tego skryptu
Coś jak twój własny podzbiór wielu możliwości
sudo
.źródło