Muszę przyznać, że w niektórych przypadkach lubię serwery bez haseł. Typowy serwer jest podatny na zagrożenia dla każdego, kto ma fizyczny dostęp do niego. Dlatego w niektórych przypadkach praktyczne jest fizyczne zablokowanie go i odtąd ufanie wszelkiemu fizycznemu dostępowi.
Podstawowe koncepcje
Teoretycznie, kiedy fizycznie docieram do takiego serwera, powinienem móc wykonywać zadania administracyjne bez hasła, wpisując się po prostu root
jako login i nie powinienem być proszony o hasło. To samo może dotyczyć kont użytkowników, ale tak naprawdę nie można uzyskać do nich fizycznego dostępu. Dlatego nie są potrzebne hasła systemowe do (sporadycznego) dostępu lokalnego.
Podczas zdalnego dostępu do serwera, zarówno w celu administracyjnym, jak i do konta użytkownika, oczekuję, że zawsze będę używać klucza prywatnego SSH. Bardzo łatwo jest skonfigurować klucz SSH dla właśnie utworzonego konta, dlatego nie są potrzebne hasła systemowe do (regularnego) zdalnego dostępu.
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
Wniosek jest taki, że teoretycznie nie potrzebowalibyśmy żadnych haseł systemowych do takich przypadków użycia. Pytanie brzmi: w jaki sposób konfigurujemy konta systemowe i konta użytkowników, aby działały w spójny i bezpieczny sposób?
Szczegóły lokalnego dostępu
Jak zapewnić lokalny dostęp do konta root bez hasła? Nie sądzę, że możemy tego użyć, passwd -d
ponieważ spowoduje to, że dostęp do roota będzie zbyt liberalny, a nieuprzywilejowany użytkownik może przełączyć się na rootowanie za darmo, co jest złe. Nie możemy używać, passwd -l
ponieważ uniemożliwia nam logowanie.
Pamiętaj, że dostęp lokalny dotyczy wyłącznie dostępu za pomocą lokalnej klawiatury. Dlatego prawidłowe rozwiązanie nie może zezwalać na jakiekolwiek przełączanie użytkowników (przy użyciu su
lub sudo
).
Szczegóły dostępu zdalnego
Do niedawna powyższe rozwiązanie działało, ale teraz SSH zaczęło sprawdzać zablokowane konta użytkowników. Prawdopodobnie nie możemy korzystać passwd -d
z tych samych powodów. Nie możemy używać, passwd -u
ponieważ po prostu narzeka, że doprowadziłoby to do tego, co passwd -d
robi.
W przypadku tej części istnieje obejście z fałszywym hasłem.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
Możliwe jest również całkowite wyłączenie sprawdzania zablokowanych kont w SSH, ale fajniej byłoby zachować obsługę zablokowanych kont i po prostu móc je odblokować.
Uwagi końcowe
Interesuje mnie rozwiązanie, które pozwoliłoby ci zalogować się lokalnie na konto roota i wszystkie konta, w tym root zdalnie, bez żadnych haseł. Z drugiej strony rozwiązanie nie może wpływać na bezpieczeństwo, z wyjątkiem wyraźnie opisanych sposobów, w szczególności nie zezwalając użytkownikom zdalnym na dostęp do konta root lub konta innych użytkowników. Rozwiązanie powinno być wystarczająco solidne, aby nie powodowało problemów bezpieczeństwa pośrednio.
Przyjęta i nagrodzona odpowiedź może, ale nie musi opisywać szczegółowej konfiguracji poszczególnych narzędzi, ale musi zawierać kluczowe punkty do osiągnięcia określonych celów. Zauważ, że to chyba nie może być rozwiązany poprzez konwencjonalną użycia narzędzi, takich jak passwd
, ssh
, su
, sudo
i tym podobne.
Więcej pomysłów po przeczytaniu pierwszych odpowiedzi
Pomysł - lokalny dostęp do katalogu głównego można uzyskać, uruchamiając powłoki root zamiast procesów logowania. Ale nadal trzeba blokować tylko uwierzytelnianie za pomocą hasła, a nie uwierzytelnianie za pomocą klucza publicznego.