Krótko mówiąc: Wielka stara korporacja, wiele serwerów UNIX / Linux.
Odziedziczyłem odpowiedzialność za kilka skryptów, które opuściły kilka lat temu. Jednym z nich był skrypt, który będzie uruchamiany co miesiąc X dolarów w celu globalnej aktualizacji hasła roota na wszystkich naszych serwerach.
Skrypt jest bałaganem Shell Script and Expect i działa na zaufaniu SSH, które jest ustawione między wszystkimi naszymi serwerami a centralnym serwerem dowodzenia i kontroli.
Problem polega na tym, że scenariusz to ogromny bałagan. Polecenia Expect próbują uwzględnić każdą możliwą wersję „passwd”, która istnieje na dowolnym urządzeniu z systemem UNIX / Linux - i różnią się one nieco.
Ponieważ rozbudowujemy i aktualizujemy dużą część naszej infrastruktury, skrypt staje się naprawdę niemożliwy do zarządzania.
Moje pytanie brzmi: czy jest na to lepszy sposób? Zakładając, że istnieje już zaufanie SSH, jaki jest najlepszy sposób na zmianę hasła roota na ponad 3000 serwerów jednocześnie?
sudo
i eliminowanie haseł roota nie jest opcją, prawda?Odpowiedzi:
Użyj marionetki .
Puppet jest bardzo elastyczny, łatwy w utrzymaniu i korzysta z SSL. Może zabrzmi to nieco przesadnie i będziesz musiał włożyć dodatkowy wysiłek w budowę systemu Lalek.
Ale. Najprawdopodobniej nie jest to ostatnia masowa aktualizacja, którą zrobisz na tych komputerach. Puppet zaoszczędzi ci dużo czasu, gdy rozpocznie się faktyczna procedura masowej aktualizacji, a skrypty będą bardzo czytelne / wielokrotnego użytku.
Przynajmniej działało to dla mnie kilka lat temu i nadal jestem w stanie ponownie wykorzystać niektóre z tych przepisów na kukiełki (inaczej skrypty). Użyłem go również w nieco mniejszych środowiskach, po prostu upewnij się, że każda maszyna faktycznie ma znany stan .
Wielokrotnie (w wielu firmach) udowodniłem, że wszystkie niestandardowe skrypty wdrożeniowe stają się kłopotliwe po pewnym czasie lub gdy wkracza następny facet. I dopóki nosisz telefon komórkowy, stare skrypty będą cię prześladować.
Jeśli uważasz, że to naprawdę brzmi dobrze, oto świetny samouczek Puppet z dołączonym wirtualnym środowiskiem, aby zacząć.
źródło
user{"root":}
do ustawienia hasła. Zamiast tego użyjexec{"chpasswd -e ..."}
znacznie bezpieczniejszego.pip install ansible
w oknie GNU / Linux zbudować listę hostów iansible -m user -a "password=$crpyt"
. Nie potrzeba agentów. Zarządza systemami GNU / Linux, AIX i Solaris od razu po wyjęciu z pudełka.Z dużym powodzeniem korzystałem z modułu Perl Authen :: PAM w systemie Solaris. Oto przykładowy skrypt:
źródło
Jeśli potrafisz pisać w Perlu, moduł Net :: OpenSSH :: Parallel pozwala dość łatwo pisać skrypty, które wykonują akcje równolegle na zdalnych hostach za pośrednictwem SSH.
Zawiera przykładowy skrypt do zmiany haseł, których można użyć jako podstawy. Wygląda na to, że masz heterogeniczne środowisko, w którym chciałbyś pogrupować hosty według typu i użyć dla każdego z nich innej podrzędnej obsługi dialogu.
źródło
Nie wiem o „najlepszym” i czy jest to możliwe dla wszystkich maszyn innych niż Linux * nix w twoim miksie, ale czy widziałeś marionetkę lub cfengine dla tego rodzaju aktywności?
Istnieją również komercyjne (bardzo drogie) narzędzia do zarządzania tożsamością, dwa, które widziałem / używałem w przeszłości, to Oracle Identity Manager i Novel odpowiednik.
źródło
Po dalszym badaniu tego nauczyłem się kilku rzeczy ...
Przede wszystkim jest to bardzo denerwujące zadanie automatyzacji, szczególnie w wielu różnych środowiskach. Najbardziej poprawną odpowiedzią na to pytanie jest prawdopodobnie @ tomi: użyj Puppet.
Ostatecznie mam nadzieję, że Puppet będzie zarządzał infrastrukturą, ale wdrożenie na serwerach UNIX całego przedsiębiorstwa w celu zmiany hasła roota nie jest obecnie wykonalne.
Po przeczytaniu wielu stron i wielu stron Google-fu udało mi się wymyślić skrypt, który zapętla listę serwerów docelowych, otwiera połączenie SSH i uruchamia jedną z następujących czynności:
Robi to znacznie więcej niż uruchamianie tylko tych poleceń, ale te powyżej służą do magii.
Nie mogłem znaleźć żadnego prostego sposobu, aby nie iteracyjnie zmienić hasło w Solarisie, więc uciekliśmy się do modyfikacji
/etc/shadow
w locie.źródło
/dev/null
zanim to zrobisz.Ostatnio zrobiłem to używając skryptu Bash ..
źródło
To moje dotychczasowe rozwiązanie. wciąż muszę sprawdzić, czy działa na wielu systemach
źródło
Możesz użyć pdsh, aby wykonać polecenie na wielu hostach jednocześnie.
źródło
passwd
różni się w zależności od różnych wymienionych wersji.pw
nie zawsze dostępne ....passwd
zawsze jest interaktywny dla użytkownika.passwd
na RHEL Linux ma przynajmniej--stdin
parametrOprócz marionetek: SaltStack Inne podejście - zautomatyzuj wykonywanie za pomocą bibliotek SSH, sekwencyjnie lub równolegle, za pomocą Fabric http://docs.fabfile.org/en/1.6/ , Capistrano lub podobnego, które nie wymagają dużo czasu / wysiłku do wdrożenia.
źródło
Dwie opcje:
Użyj marionetki
Użyj pokładu run. Run deck to serwer, który pozwala na wykonywanie poleceń na setkach komputerów jednocześnie. Możesz grupować maszyny w grupy, aby wykonywać polecenia tylko na podzbiorze maszyn.
http://rundeck.org
źródło
Myślę, że format
/etc/shadow
pliku jest dość standardowy we wszystkich dystrybucjach Linuksa. Czy możesz po prostu napisać prosty skrypt awk, aby zaktualizować hasło?cat /etc/shadow| awk -v pass='NEWPASSHASH' -v now=`date '+%s'` 'BEGIN{ OFS=FS=":"} /^root/ {$2=pass; $3=now} {print}' > /tmp/shadow && mv /tmp/shadow /etc/shadow
Zrobiłbym to, żeby to przetestować, żebyś nie zablokował się;)
źródło