APT-DATER
W dobie wszechobecnych chmur i setek wirtualnych serwerów ciężko jest zapanować nad ich bezpieczeństwem i aktualnością pakietów. Czasami nawet, o dziwo, ciężko zapanować nad ilością maszyn, jakie mamy pod opieką. Kiedyś na jednej maszynie miało się tysiące klientów i kilka/kilkanaście maszyn do zarządzania. Teraz możemy zaoferować każdemu klientowi osobny VPS. Jest to podyktowane zarówno wygodą (łatwiej wdrożyć różną konfigurację per klient) jak i bezpieczeństwem (serwery cachujące najczęściej pracują bez autoryzacji). Do tego dochodzi nam automatyzacja procesów. Przygotowanie nowego serwera dla klienta to już nie jest kilka dni pracy administratora, a użycie jednego z wielu narzędzi do automatycznego tworzenia maszyn. W takim środowisku ilość maszyn jest bardzo dynamiczna, a dopisywanie ich do dokumentacji i ręcznego logowania się traci najmniejszy sens.
Na nasze szczęście powstało wiele narzędzi do rozwiązania tego problemu. My jednak skupimy się na Debianie. W ramach samej dystrybucji istnieje paczka apt-dater. Jest to bardzo proste narzędzie (wg zasady KISS – Keep It Simple Stupid), ale potrafi nam oszczędzić naprawdę sporo czasu i mieć wgląd w stan naszej infrastruktury. Jak łatwo się domyślić, mamy tutaj do czynienia z serwerem zarządzającym oraz klientami (czyli serwerami, które chcemy aktualizować).
Ze względów bezpieczeństwa najlepiej stworzyć osobny serwer do celów zarządzania. Z tego serwera będzie można zalogować się na wszystkie inne. Ale, co jest dobre, nie będziemy się logować jako root, tylko jako użytkownik dedykowany do kilku poleceń. Niemniej jednak lepiej dmuchać na zimne i minimalizować możliwości i skutki ataków na nas. Jedynie czego potrzebujemy na serwerze zarządzającym to SSH (a nawet nie, jeżeli mamy dostęp fizyczny do serwera).
Konfiguracja po stronie serwera zarządzającego
Na serwerze zarządzającym instalujemy pakiet apt-dater
apt-get install apt-dater
Kolejne rzeczy możemy wykonywać ze zwykłego użytkownika. Jako, że chcemy się logować do naszych serwerów bez hasła użyjemy logowania po kluczu. Aby wygenerować klucze używamy polecenia
ssh-keygen -t rsa
Na wszystkie pytania wciskamy enter. Wprowadzanie hasła do pliku prywatnego spowoduje, że będziemy musieli wpisać hasło do każdego serwera do którego się logujemy. A tego właśnie chcemy uniknąć.
Następnie musimy skonfigurować apt-dater. Pliki konfiguracyjne umieszczone są w
~/.config/apt-dater
Mamy tam 3 pliki
apt-dater.conf - główny plik konfiguracyjny. Tutaj możemy wybrać czy użyć apt-get czy aptitude. hosts.conf - lista serwerów, można je podzielić na grupy. screenrc - opcje dla screena. Można tego pliku nie ruszać. Tutaj jest pole do popisu dla automatyki. Nie będę pokazywał implementacji, bo ta zależy od reszty systemu tworzenia maszyn. Oczywiście jeżeli takiego systemu nie posiadamy to możemy dopisywać maszyny ręcznie. Składnia pliku jest następująca # [Nazwa grupy] # Hosts=([Użytkownik@]host.domain[:Port SSH];)* #
Czyli przykładowo
[Hosts]
Hosts=apt@serwer1.giat.pl;apt@serwer2.giat.pl;apt@serwer3.giat.pl;
Konfiguracja po stronie klienta
Po stronie klienta potrzebujemy niestety poustawiać trochę więcej rzeczy. Chociaż i to da się łatwo zautomatyzować.
Na początek musimy dodać użytkownika apt przez polecenie
useradd apt
następnie edytujemy plik sudoers za pomocą polecenia visudo
Dopisujemy tam linijkę
apt ALL=NOPASSWD: /usr/bin/apt-get, /usr/bin/aptitude
I zapisujemy. Ta czynność sprawia, że jeżeli ktoś włamie się nam na serwer zarządzający, to będzie mógł użyć tylko poleceń apt-get i aptitude. Wiem, że to sporo, ale i tak zawsze mniej niż to, co może użytkownik root.
Tworzymy plik w miejscu /home/apt/.ssh/authorized_keys o zawartości pliku ~/.ssh/id_rsa.pub z serwera zarządzającego.
Uprawnienia pliku powinny być takie jak poniżej
-rw------- 1 apt apt 396 lut 26 16:02 authorized_keys
Konsola apt-dater
Od teraz powinniśmy się móc zalogować do konsoli apt-dater. Na początek musimy się połączyć z każdym serwerem zanim apt-dater wciągnie go na listę do aktualizacji, ale szczegóły jak to zrobić poznacie w następnym poście.