Czy niepewne jest posiadanie użytkownika z sudo bez hasła?

10

Jestem nowy w Ansible. Większość przewodników dotyczących udostępniania VPS, które widziałem do tej pory, robi to:

  1. wyłącz logowanie roota
  2. utwórz nowego użytkownika, który będzie mógł się logować tylko ssh(nie hasłem)
  3. dodaj nowego użytkownika do wheelgrupy z uprawnieniami sudo bez hasła

Rozumiem (1) i (2), ale nie (3).

Z pewnością bez hasła sudojest jak logowanie się jako root? Rozumiem korzyści (wygodę), ale czy to nie jest bardzo niepewne?

Zdaję sobie sprawę z tego, że administratorzy zarządzają swoimi sieciami na różne sposoby, dlatego można powiedzieć, że jest to „subiektywne”, ale jest to BARDZO powszechna praktyka, jest nawet pokazywana w różnych oficjalnych dokumentach odpowiadających, a także w przewodnikach wydawanych przez firmy hostingowe. Jest to sprzeczne ze zdrowym rozsądkiem. Jaka jest za tym logika?

lonix
źródło
1
Ansible jest przeznaczony do automatyzacji zadań administracyjnych, więc ogólnie potrzebuje dostępu na najwyższym poziomie (root), stąd „sudo bez hasła”. Jeśli potrzebujesz go tylko do uruchomienia podzbioru poleceń dostępnych w twoim systemie, możesz zablokować go tylko do tych poleceń z bardziej szczegółową konfiguracją sudo. Sudo bez hasła niekoniecznie oznacza dostęp do wszystkiego, co może zrobić root (choć staje się to trudne do wyegzekwowania, gdy zdajesz sobie sprawę, że użytkownik może potencjalnie zmodyfikować konfigurację sudo przez sudo, aby dać sobie większą kontrolę ...).
David Spillett,
@DavidSpillett Zastanawiałem się nad tym - tj. Określając, które polecenia sudo zezwalają w pliku sudoers ... ale przeczytałem gdzieś, że ansible robi wszystko, interpretując za pomocą złożonych poleceń python, i że takie podejście szybko się popsuło.
lonix,

Odpowiedzi:

18

Jeśli konto usługi może wykonywać sudo bez hasła, musisz zabezpieczyć dostęp do tego konta.

Mając konto nie ma hasła, i używając tylko klucze SSH do logowania się do niego, osiąga to, o ile można zachować ssh klucz prywatny, a także zabezpieczyć.

Michael Hampton
źródło
Jestem więc „w pewnym sensie” zaniepokojony tą konwencją - a jednak jest to konwencja dotycząca ansible, z konieczności / pragmatyzmu.
lonix,
Więc mówisz, że zasadniczo „przenoszę” podstawowe zabezpieczenia z VPS do mojego lokalnego systemu, który zawiera klucz ssh konta Ansible? W takim przypadku słabym punktem nie jest sam VPS, a raczej ja! Muszę też zachować szczególną czujność, chroniąc ten klucz ssh, w zamian za wygodę, jaką daje mi automatyzacja.
lonix,
6
Klucz ssh, hasło chronione przez ssh-agent, jest dość dobrą referencją.
John Mahowald,
@lonix Wszystkie zabezpieczone systemy wymagają poświadczeń. Zabezpieczone systemy są co najwyżej tak bezpieczne, jak środki, które podejmujesz w celu zabezpieczenia tych poświadczeń, ponieważ posiadanie ich zapewnia 100% dostęp do nich. Tak, nie możesz oczekiwać, że zabezpieczysz VPS, jeśli nie zabezpieczysz odpowiednio swojego klucza SSH (lub hasła roota lub cokolwiek innego). Fakt, że konfigurujesz sudo bez hasła, nic nie znaczy z tego punktu widzenia, włączenie sudo z hasłem nie zmienia faktu, że konieczne jest zabezpieczenie klucza SSH.
Giacomo Alzetta,
@GiacomoAlzetta Wiem, że miałem na myśli to, że odpowiedzialność jest przenoszona z pilota na maszynę lokalną. Ponieważ eskalacja sudo odbywa się bez hasła, słaby punkt staje się lokalny.
lonix,
4

Nowy użytkownik utworzony w (2) może zalogować się tylko za pomocą klucza SSH, bez hasła. Klucz SSH zapewnia pośredni dostęp do roota. Jest to równoważne z zezwoleniem na zalogowanie się do konta root za pomocą klucza.

Ponieważ konto nie ma hasła, nie można sudopoprosić o hasło. Również Ansible musi być w stanie wykonywać polecenia. Posiadanie dodatkowego hasła do podania w tym samym miejscu co klucz nie zwiększy bezpieczeństwa.

RalfFriedl
źródło
2

Problem polega na tym, że odpowiedzią są administratorzy i automatyzacja, więc jeśli musisz wprowadzić hasło, aby uruchomić skrypt, nie jest to naprawdę najlepszy sposób. Nie jest też bezpieczne przechowywanie hasła sudo w pliku lub bazie danych i odbieranie go za każdym razem, gdy uruchamia playbook. Tak więc połączenie sudo bez hasła i uwierzytelnienia za pomocą kluczy ssh to najlepsza metoda zapewnienia bezpieczeństwa i braku właściwych problemów poprzez uruchomienie playbooka. Jesteś także administratorem i wiesz, co programujesz w poradniku. Poradnik nie może więc zniszczyć twoich serwerów.

NicoKlaus
źródło
Poradniki mogą zniszczyć twoje systemy, ale jeśli użyjesz tylko oddzielnych kluczy środowiska testowego, nie zniszczy to hostów produkcyjnych.
John Mahowald,
Dokładnie, jest to, mam nadzieję, warunek wstępny podczas pracy na produktywnych systemach.
NicoKlaus,
1
Ansible ma „ansible-vault” oraz wtyczki / moduły / biblioteki, które pozwalają na przechowywanie tajemnic w wielu systemach tajnego przechowywania stron trzecich, takich jak Bitwarden, Hashicorp Vault, Keepass itp.
Zoredache,