it-swarm-eu.dev

Může si uživatel linuxu změnit své heslo bez znalosti aktuálního hesla?

Zřídil jsem několik ubuntu boxů a jako konfigurační nástroj používám chef opscode. Bylo by docela snadné nainstalovat veřejné klíče pro každého uživatele na každý z těchto serverů a zakázat ověřování heslem.

Uživatelé by však měli mít také oprávnění Sudo, což ve výchozím nastavení vyžaduje heslo.

Pokud chci použít veřejné klíče uživatelů jako metodu správy přístupu a povolit uživatelům oprávnění Sudo, znamená to, že bych také měl uživatele nastavit pomocí NOPASSWD: ALL in visduo, nebo existuje způsob, jak si uživatel může změnit své vlastní heslo, pokud má pouze ověření pomocí veřejného klíče?

26
cwd

Sudo ve své nejběžnější konfiguraci vyžaduje, aby uživatel zadal heslo. Obvykle už uživatel použil své heslo k ověření do účtu a opětovné zadání hesla je způsob, jak potvrdit, že legitimní uživatel neopustil svou konzoli a byl unesen.

Ve vašem nastavení bude heslo uživatele použito pouze pro autentizaci do Sudo. Zejména v případě ohrožení klíče SSH uživatele by útočník nemohl zvýšit oprávnění root na serveru. Útočník by mohl do účtu vložit záznamník klíčů, ale tento záznamník klíčů by byl detekovatelný jinými uživateli a mohl by být dokonce sledován automaticky.

Uživatel obvykle potřebuje znát své aktuální heslo, aby jej změnil na jiné heslo. Program passwd to ověří (může být nakonfigurován tak, aby nebyl, ale to není užitečné nebo vůbec žádoucí ve vašem scénáři). Kořen však může změnit jakékoli heslo uživatele, aniž by znal staré; proto uživatel s právy Sudo může změnit své vlastní heslo, aniž by ho zadal na výzvu passwd spuštěním Sudo passwd $USER. Pokud je Sudo nakonfigurováno tak, aby vyžadovalo heslo uživatele, musí uživatel heslo zadat do Sudo.

Ověřování heslem můžete deaktivovat selektivně. Ve vaší situaci byste zakázali ověřování heslem v ssh a případně i v jiných službách. Většina služeb ve většině moderních odvětví (včetně Ubuntu) používá ke konfiguraci metod autentizace PAM . Na Ubuntu jsou konfigurační soubory PAM aktivní v /etc/pam.d. Chcete-li zakázat ověřování heslem, okomentujte řádek auth … pam_unix.so V /etc/pam.d/common-auth. Dále se ujistěte, že máte PasswordAuthentication no V /etc/ssh/sshd_config, Abyste zakázali vestavěné ověřování heslem sshd.

Možná budete chtít povolit některým uživatelům správy přihlásit se pomocí hesla nebo povolit ověřování hesla na konzole. To je možné s PAM (je to docela flexibilní), ale nemohl jsem vám říct, jak mimo temeno hlavy; pokud potřebujete pomoc, položte samostatnou otázku.

Můžete použít modul pam_ssh_agent_auth . Je to docela jednoduché kompilovat, a pak stačí přidat záznam

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

před před ostatními položkami auth (nebo include) v /etc/pam.d/Sudo

a

Defaults    env_keep += "SSH_AUTH_SOCK"

na /etc/sudoers (přes visudo).

Nyní se každý uživatel může autentizovat k Sudo prostřednictvím (předávaného nebo lokálního) agenta SSH nebo svého hesla. Může být rozumné požádat vaše uživatele, aby použili ssh-add -c tak, že každé volání Sudo bude vyžadovat alespoň nějaké potvrzení.

8
Tobias Kienzler

Ano, je to neuvěřitelně nezabezpečené a také umožňuje uživateli přístup k heslům ostatních uživatelů, ale protože mají Sudo, moc toho neuděláte.

V zásadě děláte následující:

$ Sudo -i

Nyní jsme root. Máme přístup ke všemu.

# passwd $username

$ username může být uživatelské jméno kohokoli.

Zadejte nové heslo systému UNIX:

Znovu zadejte nové heslo systému UNIX: passwd: heslo bylo úspěšně aktualizováno

Boom, heslo změněno. Opět, neuvěřitelně nejistá, protože můžete změnit někoho, ale funguje to, ale funguje to. Nedoporučuji to, ale spíše nabízím tuto odpověď jako příklad toho, co ne dělat.

1
jrg
#% 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

> To by vám mělo umožnit mít uživatele, kteří se mohou přihlásit pouze pomocí veřejných klíčů a nemohou používat hesla pro přihlášení. Při prvním přihlášení však bude nucen změnit heslo ... ale bez nutnosti mu prozradit nějaké pochmurné heslo předem ... Uživatelé budou jednoduše požádáni o resetování hesla a následně je mohou použít pouze pro Sudo ale pomocí tohoto hesla se nebude moci přihlásit (ssh). Trik je zde, aby uživatelům neřekli nějaké fiktivní heslo, které by pak museli zadat při přihlášení, jakmile budou muset změnit své heslo ... V matici Shell žádná komunikace od administrátora (root) skutečnému uživateli je vyžadováno.

0
hardeep

Smyslem hesla je zajistit, aby hackeři, kteří získají klíč uživatele nebo najdou bezobslužný terminál, nemohou získat přístup root. Z tohoto důvodu bych nedoporučoval žádné řešení, které by zahrnovalo Sudo bez hesla.

Doporučuji vám to udržovat jednoduché: možná pošlete uživateli výchozí heslo s přísnými pokyny, jak jej změnit ASAP, nebo vložit skript do jeho .profile nebo .login nebo něco takového, co vyžaduje při prvním přihlášení nové heslo. Po dokončení by se mohl sám deaktivovat a pomocí expect můžete zadat stávající heslo, takže ho nikdy nemusí znát.

0
ams