Jako uprzywilejowany użytkownik próbuję ustawić sudo
hasło na inne niż hasło używane podczas logowania.
Przeprowadziłem badania, ale nie znalazłem odpowiedzi. Czy sudo
obsługuje tego rodzaju konfigurację?
Jeśli kiedykolwiek zgubisz hasło, stracisz wszystko. Ktoś może się zalogować i awansować przy root
użyciu tego samego hasła.
sudo
ma opcję zapytania o root
hasło zamiast wywołania hasła użytkownika ( rootpw
), ale udostępnianie root
hasła zdecydowanie nie jest opcją, dlatego skonfigurowaliśmy sudo
.
Robiłem to config 2FA
w przeszłości, działało świetnie, ale także pokonywało cel automatyzacji. Na przykład jeśli chcesz wykonać uprzywilejowane polecenie na kilkunastu serwerach za pomocą expect
skryptu, dodanie 2FA
nie pozwala na to.
Najbliższym rozwiązaniem, jakie znalazłem, jest zezwolenie tylko na klucz prywatny SSH i ustawienie hasła z kluczem, który różni się od sudo
hasła (logowania). Mimo to nie jest wygodne, ponieważ w sytuacji awaryjnej nie można zalogować się na komputerze, na którym nie ma tego klucza.
Odpowiedzi:
Jeśli chcesz poprosić o hasło roota, w przeciwieństwie do hasła użytkownika, masz do wyboru opcje
/etc/sudoers
.rootpw
w szczególności sprawi, że poprosi o hasło roota. Jestrunaspw
itargetpw
również; zobacz szczegóły na stronie sudoers (5).Poza tym sudo wykonuje uwierzytelnianie (podobnie jak wszystko inne) za pośrednictwem PAM. PAM obsługuje konfigurację dla poszczególnych aplikacji. Konfiguracja Sudo jest już uruchomiona (przynajmniej w moim systemie Debian)
/etc/pam.d/sudo
i wygląda następująco:Innymi słowy, domyślnie uwierzytelnia się jak wszystko inne w systemie. Możesz zmienić tę
@include common-auth
linię i poprosić PAM (a tym samym sudo) o użycie alternatywnego źródła hasła. Nieskomentowane wiersze we wspólnym auth wyglądają mniej więcej tak (domyślnie będzie inaczej, jeśli używasz np. LDAP):Możesz użyć np.
pam_userdb.so
Zamiastpam_unix.so
i przechowywać alternatywne hasła w bazie danych Berkeley DB.przykład
Utworzyłem katalog
/var/local/sudopass
, właściciela / grupęroot:shadow
, tryb2750
. Wewnątrz utworzyłem plik bazy danych haseł, używającdb5.1_load
(która jest wersją Berkeley DB używaną w Debian Wheezy):Ten skrót został wygenerowany przy
mkpasswd -m des
użyciu hasła „hasło”. Bardzo bardzo bezpieczny! (Niestety pam_userdb wydaje się nie obsługiwać niczego lepszego niż starożytnycrypt(3)
skrót).Teraz edytuj
/etc/pam.d/sudo
i usuń@include common-auth
linię, a zamiast tego umieść to w miejscu:Pamiętaj, że pam_userdb dodaje
.db
rozszerzenie do przekazywanej bazy danych, więc musisz ją.db
wyłączyć.Według dannysauer w komentarzu może być konieczne wykonanie tej samej edycji
/etc/pam.d/sudo-i
.Teraz do sudo muszę użyć
password
prawdziwego hasła logowania:źródło
crypt(3)
skrót” w nowoczesnych wersjach glibc ma wsparcie dla sha-512, np.mkpasswd -m sha-512
. pam_userdb.so poradzi sobie z nimi dobrze.W przypadku Redhat / Centos wymaganie można spełnić, wykonując następujące czynności:
Utwórz niestandardowego użytkownika i przekaż:
Zmodyfikuj plik sudo pam.d, aby wyglądał następująco:
Nadal szukam sposobu konfiguracji, aby tylko określony użytkownik / grupa musiał zostać uwierzytelniony za pomocą tej niestandardowej metody, inni nadal mogą być uwierzytelniani za pomocą normalnej metody uwierzytelniania systemowego. Czy ktoś może mi dać jakieś porady?
źródło
[user_unknown=ignore,success=ok,default=bad]
... ale musisz się z tym pograć (i przeczytać dokumenty PAM), aby wszystko było dobrzepam_succeed_if
pominięcia jednego modułu, jeśli użytkownik znajduje się na liście grup, lub pominięcia dwóch modułów, jeśli nie.Nie sądzę, że sudo obsługuje taką konfigurację. Celem pytania o hasło sudo jest upewnienie się, że osoba wydająca polecenie sudo jest tą samą osobą, która jest zalogowana, a najłatwiejszym sposobem na to jest poproszenie o zalogowanie się aktualnie zalogowanego użytkownika.
Innymi słowy, celem pytania o hasło sudo nie jest ustanowienie autorytetu , lecz ustalenie tożsamości . Na podstawie ustalonej tożsamości i konfiguracji sudo można podjąć decyzję, czy dany użytkownik ma niezbędne uprawnienia lub prawa dostępu.
źródło
Obawiasz się, że hasło do konta może zostać ujawnione. Rozwiązaniem jest nieużywanie hasła logowania w sposób umożliwiający jego ujawnienie. W przypadku ssh hasło jest szyfrowane na kablu, więc jest w porządku. Ludzie wyłączają uwierzytelnianie hasła za pomocą ssh, aby zapobiec atakom polegającym na odgadywaniu hasła, a nie chronić poufność hasła. Jeśli używasz tego samego hasła do konta do innych celów, upewnij się, że używasz bezpiecznego, szyfrowanego kanału, aby podać hasło. Jeśli martwisz się o keylogger lub cokolwiek innego, przestań używać niezaufanych maszyn do logowania.
Jeśli ktoś może dostać twoje hasło ssh, prawdopodobnie może również otrzymać alternatywne hasło sudo, więc lepiej zainwestować czas w zwiększenie bezpieczeństwa połączeń niż spędzanie czasu tylko na komplikowaniu rzeczy z powodu iluzji większego bezpieczeństwa.
źródło
Nie mam natychmiastowego dostępu do systemu, w którym mogę to przetestować i ustalić szczegóły, ale mam pomysł:
shau
.)shau2
. (Nie jestem pewien, czy chcesz mieć taki sam identyfikator UID jakshau
.)shau2
aby mieć uprawnienia sudo z NOPASSWD.su shau2 -c sudo "$@"
. To powinno poprosić oshau2
hasło. Jeśli zostanie to wprowadzone poprawnie, będzie działaćsudo
jakoshau2
(co nie powinno wymagać podania hasła).shau
uprawnienia sudo.Niestety musisz to powtórzyć dla każdego użytkownika, który ma uprawnienia sudo.
źródło
Dziękuję @ Shâu Shắc za odpowiedź ! To rozwiązanie działa również dla LinuxMint 17.1 Cinnamon 32bit (zainstalowałem tylko
db-util
pakiet, aby uruchomićdb_load
).Ale jestem bardzo mylony z wynikowym
passwd.db
plikiem. Zrobiłem to samo, co w twojej odpowiedzi (ale użyłem Davida i Jonesa , wyglądają bardziej przyciągająco):Ale wprowadzone poświadczenia są przechowywane w pliku skrótu jako zwykły tekst:
Możesz także zobaczyć Davida i Jonesa za pośrednictwem mcedit :
Tak, można ograniczyć uprawnienia
/usr/local/etc/passwd.db
. Ale w każdym razie nazwa użytkownika i hasło przechowywane jako zwykły tekst są złe.Nawet z osobnym hasłem sudo istnieją pewne potencjalne luki w zabezpieczeniach (domyślnie konfiguracja dystrybucji). W związku z tym osobne hasło nie ma zastosowania do su (więc możliwe jest rozpoczęcie sesji roota przy użyciu
su
i hasła logowania). Również Policy Kit nie przestrzega oddzielnego hasła (możliwe jest uruchomienie Synaptic przy użyciusynaptic-pkexec
i hasło logowania. Następnie usuń pakiety ...). Problemy te można wyeliminować przez dodatkowe dostrojenie plików konfiguracyjnych.Zasadniczo wydaje się, że bezpieczne oddzielne hasło sudo można osiągnąć tylko przy pomocy niestandardowego modułu PAM (być może taki moduł porówna hasło i skrót SHA-512 odczytany z pliku) lub funkcji SELinux.
PS: przepraszam, powinien to być komentarz. Ale idzie to jako odpowiedź ze względu na format tekstu. Dzięki za zrozumienie.
źródło