Muszę uruchomić coś takiego jak sudo bez hasła, więc użyłem visudo
i dodałem to do mojego sudoers
pliku:
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Potem wypróbowałem:
$ sudo /path/to/my/program
[sudo] password for MYUSERNAME:
Dlaczego prosi o hasło? Jak mogę uruchamiać / używać poleceń jako użytkownik root bez użytkownika root, bez pytania o hasło?
/path/to/my/program
był skryptem w języku Python?.bashrc
)? A może nawet skrypt powłoki w środku/usr/local/sbin
? Spróbować./etc
, ale niektóre systemy umieszczają go gdzie indziej. Jeśli nie możesz go znaleźć, spróbujman sudoers
. Lokalna lokalizacja tego pliku powinna zostać podstawiona naman
stronie w czasie, gdysudo
została zbudowana dla tego systemu.Jeśli jest wiele pasujących wpisów
/etc/sudoers
, sudo używa ostatniego. Dlatego jeśli możesz wykonać dowolną komendę z monitem o hasło i chcesz móc wykonać określoną komendę bez monitu o hasło, potrzebujesz wyjątku na końcu.Zwróć uwagę na użycie
(root)
, aby umożliwić uruchamianie programu jako root, ale nie jako inni użytkownicy. (Nie udzielaj więcej uprawnień niż wymagane minimum, chyba że wymyśliłeś implikacje).Uwaga dla czytelników, którzy nie używają Ubuntu lub którzy zmienili domyślną konfigurację sudo (sudo Ubuntu jest domyślnie w porządku) : Uruchamianie skryptów powłoki z podwyższonymi uprawnieniami jest ryzykowne, musisz zacząć od czystego środowiska (po uruchomieniu powłoki, jest już za późno (zobacz Zezwalaj na setuid na skryptach powłoki ), więc musisz się tym zająć sudo). Upewnij się, że masz
Defaults env_reset
w/etc/sudoers
albo, że ta opcja jest domyślnym czasu kompilacji (sudo sudo -V | grep env
powinny zawieraćReset the environment to a default set of variables
).źródło
john ALL=(ALL) NOPASSWD: all
. Nie ma sensu przechodzić przezsu
.sudoers
nie musisz robić nic specjalnego:sudo
sprawdza to za każdym razem.OSTRZEŻENIE : Ta odpowiedź została uznana za niepewną. Zobacz komentarze poniżej
Kompletne rozwiązanie: następujące kroki pomogą Ci osiągnąć pożądany wynik:
Utwórz nowy plik skryptu (zamień
create_dir.sh
na żądaną nazwę skryptu):Skrypt zostanie utworzony w katalogu osobistym użytkownika
Dodaj niektóre polecenia, które może wykonać tylko użytkownik
root
lubsudo
użytkownik, takie jak utworzenie folderu na poziomie katalogu głównego:Uwaga: Nie dodawaj
sudo
do tych poleceń. Zapisz i wyjdź (używając:wq!
)Przypisywanie uprawnień do wykonywania przy użyciu:
Wprowadź zmiany, aby ten skrypt nie wymagał hasła.
Otwórz
sudoers
plik:Dodaj następujący wiersz na końcu:
Zamień na
ahmad
dowolną swoją nazwę użytkownika. Upewnij się także, że to ostatni wiersz. Zapisz i wyjdź.Teraz po uruchomieniu polecenia dodaj
sudo
przed nim:Spowoduje to uruchomienie poleceń w pliku skryptu bez pytania o hasło.
Wykonaj proste kroki wymienione tutaj http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/
źródło
sudo
część niesudo chmod u+x create_dir.sh
jest konieczna, ponieważ użytkownik ma (prawdopodobnie) własność nad swoim domowym reż. Ponieważ użytkownik może pisaćcreate_dir.sh
, skutecznie dałeś mu darmową powłokę root.chmod
jest niepotrzebna, ponieważ polegasz nasudo
podniesieniu swoich uprawnień.Myślę, że twoja składnia jest nieprawidłowa. Przynajmniej używam następujących, które działają dla mnie:
źródło
(ALL)
Część jest opcjonalna, pozostawiając ją ma dokładnie ten sam efekt. Mając(root)
byłaby lepsza, ale jego brak nie wyjaśniają problemu.Jeśli chcesz uniknąć konieczności używania sudo ani zmieniać pliku konfiguracyjnego sudoers, możesz użyć:
Spowoduje to, że polecenie będzie działać jako root bez potrzeby sudo.
źródło
Jeśli masz dystrybucję taką jak Manjaro, musisz najpierw zająć się plikiem, który przesłania definicję / etc / sudoers, możesz go usunąć lub pracować bezpośrednio z tym plikiem, aby dodać nowe konfiguracje.
Ten plik to:
JEDYNY sposób, aby zobaczyć, że ma uprawnienia administratora, nie można wyświetlić tego katalogu bez niego, ten plik jest specyficzny dla Manjaro, możesz znaleźć tę konfigurację pod inną nazwą, ale w tym samym katalogu.
W wybranym pliku możesz dodać następujące linie, aby uzyskać żądaną konfigurację:
Zignoruj uwierzytelnianie dla grupy
lub Ignoruj uwierzytelnianie dla użytkownika
lub Ignoruj uwierzytelnianie pliku wykonywalnego dla określonego użytkownika
SZYBKA UWAGA: Otwierasz drzwi do korzystania z SUDO bez uwierzytelnienia, co oznacza, że możesz uruchomić wszystko, modyfikując wszystko z systemu, używać go z odpowiedzialnością.
źródło
Sprawdź, czy sudo nie jest aliasowane. Biegnij tak
Na przykład alias powłoki taki jak ten:
może powodować takie zachowanie.
źródło
sudoers
przez sudo. A może mówisz o przekierowaniusudo
na coś, co zawsze drukuje ten komunikat o błędzie, aby zgarnąć hasła? Jest to mało prawdopodobne w tym przypadku ...alias sudo="sudo env PATH=$PATH"
mam w sobie~/.bashrc
. Zamiast po prostu rozwiązać to dla siebie i ślepo zajmować się biznesem, podałem swoją odpowiedź jako możliwe rozwiązanie dla każdego, kto przyjdzie z tym wątkiem.Po uruchomieniu skryptu musisz uruchomić go jako
sudo /path/to/my/script
.Edycja: Na podstawie komentarza do innej odpowiedzi chcesz uruchomić to z ikony. Będziesz musiał utworzyć
.desktop
plik, który uruchamia twój program w sudo, tak jak w terminalu.Możesz również rozważyć użycie
gtk-sudo
wizualnego monitu o podanie hasła.Prawdopodobnie powinieneś pomyśleć o tym, że nie powinieneś uruchamiać rzeczy jako root, i że lepszym sposobem jest zmiana systemu na dalsze, tak aby w ogóle nie potrzebujesz uprawnień roota.
źródło
To rozwiązało problem (wypróbowałem też kilka innych odpowiedzi, które mogły pomóc):
Skrypt, do którego dzwoniłem, znajdował się w
/usr/bin
katalogu, do którego nie mam uprawnień do zapisu (chociaż zwykle mogę tam czytać dowolne pliki). Skrypt został chmodded + x (uprawnienie do pliku wykonywalnego), ale nadal nie działał. Przenosząc ten plik do ścieżki w moim katalogu domowym, zamiast tego/usr/bin
mogłem w końcu wywołać go za pomocą sudo bez podawania hasła.Również coś, w co wątpiłem (wyjaśnienie dla przyszłych czytelników): Musisz uruchomić skrypt jako sudo. Wpisz
sudo
podczas wywoływania skryptu. Nie używajsudo
polecenia w skrypcie, który faktycznie wymaga rootowania (w moim przypadku zmienia się podświetlenie klawiatury). Być może to również działa, ale nie musisz i wydaje się, że jest to lepsze rozwiązanie, aby tego nie robić.źródło
sudo
skryptu jest całkowicie w porządku, pod warunkiem, że masz odpowiednie uprawnienia (ustawione wsudoers
), aby uruchomić dane polecenie bez hasła. To sprawia, że wszystko jest trochę bezpieczniejsze.Inną możliwością może być instalacja, konfiguracja, a następnie użycie polecenia super, aby uruchomić skrypt jako
Jeśli chcesz uruchomić jakiś binarny plik wykonywalny (np które zostały skompilowane do ELF binarnego z jakiegoś kodu źródłowego C)-co jest nie Script jako root, można rozważyć to setuid (a właściwie
/bin/login
,/usr/bin/sudo
a/bin/su
isuper
są przy użyciu tej techniki ). Bądź jednak bardzo ostrożny, możesz otworzyć ogromną lukę bezpieczeństwa .Konkretnie, twój program powinien być zakodowany paranoicznie (więc sprawdź wszystkie argumenty oraz środowisko i warunki zewnętrzne przed „działaniem”, zakładając potencjalnie wrogiego użytkownika), wtedy możesz ostrożnie używać seteuid (2) i przyjaciół (patrz także setreuid (2) ) (patrz także możliwości (7) i poświadczenia (7) i wykonanie (2) ...)
Użyjesz
chmod u+s
(czytaj chmod (1) ) podczas instalowania takiego pliku binarnego.Ale bądź bardzo ostrożny .
Przeczytaj wiele rzeczy na temat setuid , w tym Advanced Linux Programming , zanim zakodujesz coś takiego.
Zauważ, że skrypt lub jakakolwiek szarpana rzecz nie może być setuid. Ale możesz zakodować (w C) małe owijające binarnie pliki setuid.
źródło
Idealnie, jeśli dostosowujesz, które polecenia mogą być uruchamiane
sudo
, powinieneś wprowadzić te zmiany w osobnym pliku,/etc/sudoers.d/
zamiast bezpośrednio edytowaćsudoers
plik. Powinieneś również zawsze używaćvisudo
do edycji plików. Trzeba przyznać NIGDYNOPASSWD
naALL
polecenia.Przykład:
sudo visudo -f /etc/sudoers.d/mynotriskycommand
Wstaw swoje pozwolenie na udzielenie linii:
myuser ALL= NOPASSWD: /path/to/your/program
Następnie zapisz i wyjdź, a
visudo
ostrzeże Cię, jeśli wystąpią jakiekolwiek błędy składniowe.Możesz uruchomić,
sudo -l
aby zobaczyć uprawnienia przyznane przez użytkownika, jeśli którekolwiek zNOPASSWD
poleceń specyficznych dla użytkownika pojawi się PRZED jakimkolwiek%groupyouarein ALL=(ALL) ALL
poleceniem na wyjściu, zostaniesz poproszony o podanie hasła.Jeśli odkryjesz, że tworzysz wiele takich plików sudoers.d, być może będziesz chciał utworzyć je o nazwach poszczególnych użytkowników, aby były łatwiejsze do wizualizacji. Należy pamiętać, że kolejność NAZW PLIKU i ZASAD w pliku jest bardzo ważna, OSTATNIE załadowane wygrywa, niezależnie od tego, czy jest WIĘCEJ, czy MNIEJ dopuszczające niż poprzednie wpisy.
Spróbuj uruchomić
printf '%s\n' {{0..99},{A-Z},{a-z}} | sort
iprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort
sprawdź, czy bieżący język jest drukowanyAaBbCc
itp., AABC
następnieabc
określ najlepszy najlepszy prefiks „ostatniej” litery.źródło
Aby każdy użytkownik mógł uruchomić program jako sudo bez pytania o hasło, możesz dodać następujący wiersz
%sudo ALL=(root) NOPASSWD: /path/to/your/program
w
/etc/sudoers
Zauważ, że % sudo to robi.
źródło
Poniżej przedstawiono przypadek, w którym chcesz uruchomić polecenie bez hasła tylko wtedy, gdy ma on określony zestaw opcji, w których część opcji jest zmienna . AFAIK nie jest możliwe stosowanie zmiennych lub zakresów wartości w deklaracjach sudoers, tzn. Możesz wyraźnie zezwolić na dostęp,
command option1
ale niecommand option2
używając:user_name ALL=(root) /usr/bin/command option1
ale jeśli struktura jest
command option1 value1
, gdzievalue1
może się różnić, musisz mieć wyraźne wiersze sudoers dla każdej możliwej wartościvalue1
. Skrypt powłoki umożliwia obejście tego.Ta odpowiedź została zainspirowana odpowiedzią M. Ahmada Zafara i naprawia tam problem bezpieczeństwa.
sudo
./usr/local/bin/
), Ustaw plik jako root (np.chown root:wheel /usr/local/bin/script_name
) Bez dostępu do zapisu dla innych (npchmod 755 /usr/local/bin/script_name
.).Dodaj wyjątek do sudoers za pomocą visudo:
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name
.Uruchom skrypt
sudo script_name
.Na przykład chcę zmienić limit czasu uśpienia wyświetlacza w systemie macOS. Odbywa się to za pomocą:
sudo pmset displaysleep time_in_minutes
Uważam, że zmiana limitu czasu snu jest niewinną czynnością, która nie usprawiedliwia kłopotów z wpisywaniem hasła, ale
pmset
może robić wiele rzeczy i chciałbym, aby te inne rzeczy pozostały za hasłem sudo.Mam więc następujący skrypt
/usr/local/bin/ds
:Na końcu
sudoers
pliku mam następujący wiersz:user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
Aby ustawić limit czasu na 3 minuty, uruchamiam skrypt ze zwykłego konta użytkownika
user_name
:sudo ds 3
PS Większość mojego skryptu to sprawdzanie poprawności danych wejściowych, co nie jest obowiązkowe, więc działałyby również:
źródło