Czy użytkownik systemu Linux może zmienić hasło bez znajomości aktualnego hasła?

25

Konfiguruję kilka ubuntuskrzynek i używam opscode chefjako narzędzia konfiguracyjnego. Byłoby dość łatwo zainstalować klucze publiczne dla każdego użytkownika na każdym z tych serwerów i wyłączyć uwierzytelnianie za pomocą hasła.

Jednak użytkownicy powinni mieć również sudouprawnienia, które domyślnie wymagają hasła.

Jeśli chcę używać kluczy publicznych przez użytkowników jako metoda zarządzania dostępem i pozwalają użytkownikom sudoprzywileje, to znaczy, mam również skonfigurować użytkownikom NOPASSWD: ALLw visduo, czy jest jakiś sposób, że użytkownik może zmieniać swoje hasło jeśli oni masz tylko uwierzytelnianie za pomocą klucza publicznego?

cwd
źródło
@sr - nie wygląda to sposób nurt robi ...
CWD
Dlaczego chcesz, aby Twoi użytkownicy mieli uprawnienia sudo? Mam nadzieję, że zdajesz sobie sprawę, że dajesz przez to dostęp do konta root. Może być szansa, aby zainwestować trochę czasu i zezwolić na użycie tylko części poleceń w połączeniu z sudo (co może być mniej niepewne). Go man sudoersdostarczy informacji o tym, że niektóre polecenia mogą być uruchamiane z sudo bez konieczności podawania hasła użytkownika. Możesz nawet dodać skrypt shellscript do / etc / sudoers, który pozwoliłby na ustawienie „własnego hasła” dla każdego użytkownika bez konieczności wcześniejszego hasła.
humanityANDpeace
@humanityANDpeace - Zdaję sobie z tego sprawę. Wszyscy członkowie naszego zespołu wymagają dostępu roota do serwerów w chmurze, które obsługujemy. Teraz używamy szefa kuchni do zarządzania kluczami publicznymi użytkowników i mamy grupę sysadmin NOPASSWD: ALL, do której należą członkowie zespołu. Jeśli możesz zasugerować lepsze rozwiązanie, opublikuj je jako odpowiedź.
cwd

Odpowiedzi:

21

Sudo, w swojej najczęstszej konfiguracji, wymaga wpisania hasła przez użytkownika. Zazwyczaj użytkownik użył już swojego hasła do uwierzytelnienia na koncie, a ponowne wpisanie hasła jest sposobem na potwierdzenie, że legalny użytkownik nie porzucił konsoli i został przejęty.

W twojej konfiguracji hasło użytkownika będzie używane tylko do uwierzytelnienia w sudo. W szczególności, jeśli włamany zostanie klucz SSH użytkownika, osoba atakująca nie będzie mogła podnieść uprawnień do rootowania na serwerze. Osoba atakująca może podłożyć rejestrator kluczy na konto, ale ten rejestrator kluczy byłby wykrywalny przez innych użytkowników, a nawet być obserwowany automatycznie.

Użytkownik zwykle musi znać swoje bieżące hasło, aby zmienić je na inne hasło. passwdProgram weryfikuje to (może być skonfigurowany, aby nie, ale to nie jest przydatne lub w ogóle wskazane w scenariuszu). Jednak root może zmienić hasło dowolnego użytkownika, nie znając starego; w związku z tym użytkownik z uprawnieniami sudo może zmienić swoje hasło bez wprowadzania go po passwdznaku zachęty, uruchamiając sudo passwd $USER. Jeśli sudojest skonfigurowany tak, aby wymagał hasła użytkownika, musi on sudomimo to wpisać hasło .

Możesz selektywnie wyłączyć uwierzytelnianie za pomocą hasła. W tej sytuacji wyłączysz uwierzytelnianie hasła w ssh i ewentualnie w innych usługach. Większość usług na większości współczesnych jednorożców (w tym Ubuntu) korzysta z PAM do konfigurowania metod uwierzytelniania. W systemie Ubuntu pliki konfiguracyjne PAM są dostępne /etc/pam.d. Aby wyłączyć uwierzytelnianie za pomocą hasła, skomentuj auth … pam_unix.solinię /etc/pam.d/common-auth. Ponadto, upewnij się, że masz PasswordAuthentication now /etc/ssh/sshd_configwbudowanemu uwierzytelniania hasłem wyłączyć sshd za.

Możesz zezwolić niektórym użytkownikom administracyjnym na logowanie się za pomocą hasła lub zezwolić na uwierzytelnianie za pomocą hasła w konsoli. Jest to możliwe w przypadku PAM (jest dość elastyczny), ale nie mogłem powiedzieć, jak mam czubek głowy; zadaj osobne pytanie, jeśli potrzebujesz pomocy.

Gilles „SO- przestań być zły”
źródło
jednym wygodnym sposobem korzystania z PAM w połączeniu z uwierzytelnianiem klucza SSH jest pam_ssh_agent_auth , który ma tę zaletę, że zastępuje monit o hasło (teoretycznie jeszcze bezpieczniejszym) uwierzytelnianiem klucza, z którego SSH może korzystać mimo to
Tobias Kienzler
więc mówisz, sudo passwdże zmieniłby hasło dla bieżącego użytkownika, a nie dla użytkownika sudo?
still_dreaming_1
1
@ still_dreaming_1 Nie, mówię, że użytkownik, który może uruchamiać polecenia, sudomoże zmienić własne hasło. Dokładne polecenie tak naprawdę nie ma znaczenia, ale w celu uzyskania bardziej szczegółowych informacji, byłoby to, sudo passwd bobgdzie bobjest nazwa użytkownika lub coś równoważnego. Bez argumentów sudo passwdrzeczywiście zmieniłby hasło do roota.
Gilles 'SO - przestań być zły'
7

Możesz użyć modułu pam_ssh_agent_auth . Kompilacja jest dość prosta, a następnie wystarczy dodać wpis

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

przed drugim auth(lubinclude ) wpisami w/etc/pam.d/sudo

i

Defaults    env_keep += "SSH_AUTH_SOCK"

do /etc/sudoers (przez visudo).

Teraz każdy użytkownik może albo uwierzytelnić się sudoza pośrednictwem (przekazanego lub lokalnego) agenta SSH lub swojego hasła. Rozsądne może być poproszenie użytkowników o ssh-add -ctakie użycie , aby każde sudopołączenie wymagało przynajmniej potwierdzenia.

Tobias Kienzler
źródło
W pokrewnej sprawie istnieje pam_ssh , który pozwala używać hasła SSH zamiast uniksowego do logowania, automatycznie uruchamia agenta i dodaje klucz - zapewniając w ten sposób możliwość pojedynczego logowania.
Tobias Kienzler
1

Tak, jest niesamowicie niepewny i umożliwia użytkownikowi dostęp do haseł innych użytkowników, ale ponieważ mają sudo, niewiele można zrobić.

Zasadniczo wykonujesz następujące czynności:

$ sudo -i

Teraz jesteśmy rootem. Mamy dostęp do wszystkiego.

# passwd $username

$ nazwa użytkownika może być dowolną nazwą użytkownika.

Wprowadź nowe hasło UNIX:

Wpisz ponownie nowe hasło UNIX: hasło: hasło zostało zaktualizowane pomyślnie

Boom, hasło zmienione. Ponownie, niesamowicie niepewny, ponieważ możesz zmienić każdego, ale działa, ale działa. Nie polecam tego, ale raczej podaję tę odpowiedź jako przykład tego, czego nie należy robić.

jrg
źródło
wygląda dobrze, ale czy możesz wyjaśnić, co się tutaj dzieje?
cwd
4
Nie można obejść się sudo -ibez aktualnego hasła użytkownika.
kravemir
@Miro. Tak jak mówisz. Nadal sudo bashmoże być bez hasła, biorąc pod uwagę taką konfigurację w /etc/sudoerspliku. Myślę @jrg jest jak powiedział bardziej koncentrując się na kwestii braku bezpieczeństwa z sudo tutaj
humanityANDpeace
1
szczerze mówiąc, nie musisz tego robić sudo -i, możesz przejść bezpośrednio do sudo passwd $username@Miro, nie musisz znać aktualnego hasła użytkownika. Aby korzystać z sudo, musisz jedynie znać hasło roota
Antony
0

Chodzi o to, aby hakerzy, którzy uzyskali klucz użytkownika lub znaleźli nienadzorowany terminal, nie mogli uzyskać dostępu do konta root. Z tego powodu nie poleciłbym żadnego rozwiązania, które wymagałoby sudo bez hasła.

Proponuję trzymać go prosta: może wysłać użytkownikowi domyślne hasło ze ścisłymi instrukcjami, aby go zmienić jak najszybciej, albo wstawić skrypt w ich .profilelub .loginczy coś takiego, że to wymaga nowego hasła przy pierwszym logowaniu. Po zakończeniu może się wyłączyć i możesz użyć expectistniejącego hasła, aby nigdy nie musiało go znać.

ams
źródło
0
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

> Powinno to umożliwić użytkownikom, którzy mogą logować się tylko przy użyciu kluczy publicznych i nie mogą używać haseł do logowania. Będzie jednak zmuszony zmienić hasło przy pierwszym logowaniu ... ale bez konieczności podawania mu pewnego hasła z góry ... Użytkownicy zostaną poproszeni o zresetowanie hasła, a następnie będą mogli go używać tylko w sudo ale nie będzie w stanie zalogować się (ssh) przy użyciu tego hasła. Zwróć uwagę, że sztuczka polega na tym, aby nie podawać użytkownikom fałszywego hasła, które będą musieli wprowadzić podczas logowania, gdy będą musieli zmienić swoje hasło ... W skorupie orzecha brak komunikacji od administratora (root) do faktycznego użytkownika jest wymagany.

hardeep
źródło