Pisząc skrypt powłoki, w którym niektóre, ale nie wszystkie polecenia w nim potrzebują uprawnień administratora, powinienem:
dodaj sudo do tych poleceń, które wymagają uprawnień administratora i uruchom skrypt powłoki bez sudo, lub
nie dodajesz sudo do tych poleceń, które wymagają uprawnień administratora, ale uruchamiasz skrypt powłoki za pomocą sudo?
Po drugie, będę musiał podać hasło tylko raz, ale wszystkie polecenia w skrypcie będą uruchamiane z uprawnieniami administratora, w tym tymi, które nie potrzebują.
Po pierwsze, może być konieczne wielokrotne podanie hasła dla różnych poleceń sudo, podczas gdy uprawnienia administratora są przyznawane tylko tym, które ich potrzebują.
Ze względów bezpieczeństwa pierwszy sposób jest lepszy. Dla wygody drugi sposób jest lepszy.
Myślałem o przyjęciu pierwszego sposobu. Mam więc do czynienia z niedogodnością związaną z udostępnianiem haseł wielu poleceniom sudo w skrypcie powłoki.
-
Dobrze napisany skrypt wykryje, czy działa z odpowiednimi uprawnieniami i w ogóle nie wywoła sudo, ale jest wiele złych skryptów
Więc powinienem użyć drugiego sposobu? W takim razie,
jak napisać: „skrypt wykryłby, gdyby działał z odpowiednimi uprawnieniami i wcale nie wywoływał sudo”?
jak mogę poprawić jego bezpieczeństwo, aby uniknąć problemu z nadawaniem uprawnień superużytkownikowi komendom, które nie potrzebują ich podczas uruchamiania skryptu w sudo?
- Czy to proste podejście miałoby najlepsze z obu podejść: dodaj sudo do poleceń, które go potrzebują, i uruchom skrypt z sudo lub bez, w zależności od tego, czy chcę wygodę czy bezpieczeństwo? Czy to podejście ma jakiś problem?
Dzięki.
sudo
ma domyślną pamięć podręczną poświadczeń. Czy to jest wyłączone na twojej platformie?Odpowiedzi:
Aby rozwiązać pierwszy problem:
Istnieje proste i POSIX sprawdzenie roota:
Alternatywnie, w Bash, kodery o większej wydajności mogą chcieć użyć:
Zauważ, że celowo zapakowałem kod w funkcje do ponownego użycia.
Aby rozwiązać drugi problem:
Nie możesz wiele z tym zrobić. Przynajmniej nic nie przychodzi mi do głowy. Gdybym zobaczył scenariusz, mogę mieć sugestie. Ale ponieważ nie umieściłeś go w swoim pytaniu ... Jeśli uruchomisz cały skrypt za pomocą
sudo
lub asroot
, nie widzę sposobu, aby to kontrolować.Aby rozwiązać komentarz:
W moich skryptach zwykle stosuję to drugie podejście, ale to niekoniecznie oznacza, że polecam ci to. Ponieważ zależy to od tego, dla kogo przeznaczony jest skrypt -
root
tylko dla ; dla użytkowników głównie z wyjątkiem posiadania przez niektórych użytkownikówsudo
praw; musiałbym dosłownie dołączyć swój skrypt do pytania, aby móc odpowiedzieć z dowolną wartością.źródło
sudo -u "$SUDO_USER" command...
?sudo -u "$SUDO_USER" command
to znaczy tutaj?Myślę, że mogę na to odpowiedzieć.
Nie ma powodu, dla którego powinieneś mieć problem, oto powód:
Jeśli istnieje tylko jedna komenda, którą należy uruchomić jako root, wówczas
run
twój program jakoroot
lubsudo
ponieważsudo
w skrypcie jest dłuższa droga. Czy zapomniałeś, że programiści są leniwi?Jeśli potrzebujesz wiele poleceń
run
, jakroot
następnie uruchomić go jakoroot
lubsudo
.Jeśli inni użytkownicy potrzebują
run
Twojego programu, skonfigurujsudo
je, ponieważsudo
można je łatwo dostosować do własnych potrzeb.Oto przykład z
sudo
:Zawsze używaj
visudo
podczas edycji pliku sudoers .....sudo
jest również świetny do zmiany użytkowników w twoim programie / skrypcie, oto wiersz z jednego ze moich skryptów:https://www.cyberciti.biz/tips/shell-root-user-check-script.html
jak-i-i-określić-jeśli-shell-skrypt-działa-z-root-uprawnieniami
EDYCJA na żądanie dżentelmena @terdon:
Pomyśl o swoim skrypcie w ten sposób ...
Czy jest to skrypt publiczny (inne osoby niż ty go użyjesz) Co robi skrypt? Czy to wskazuje godzinę? Czy aktualizuje iptables w 200 systemach? Jeśli tylko z niego korzystasz, to czy jest to związane z pracą / zawodem, czy jest do użytku osobistego?
Musisz tylko wiedzieć z góry, z czego składa się twoja grupa użytkowników, to wszystko.
Jeśli ma to
written
dawać lub sprzedawać administratorom, nawet wtedy, dlaczego nie powinnoscript
być dozwolone działanie jakoroot
? Jaką szkodę może to zrobić?Prawdziwe skrypty / programy działają często jako uprzywilejowany użytkownik i nikt nie wspomina, że to nie problem, ale kiedy programiści, głównie nowicjusze tacy jak ja, mówią o tych rzeczach, to jest to prawdziwe zagrożenie bezpieczeństwa ..... co facet w twoim poście odesłanie to próba powiedzenia, choć nie elegancko jest to, że niektórzy ludzie patrzą na kontrolę, którą masz
system
i twój kod ... czy ustawiasz pliki na więcej uprawnień, niż zamierzasz używać, czy masz wszystkie kontrole w swoim logika, czy utalentowany programista widzi w twoim kodzie niebezpieczeństwa, tylko na niego patrzy?Jeśli twój
code needs root
, użyjsudo
, a jeśli jest ich wiele, po prostu uruchom go jakoroot.
...... moja odpowiedź kończy się tutaj uffźródło