LDAP: tworzenie kopii zapasowych za pomocą slapcat vs ldapsearch

11

Używany: openldap-servers-2.4.23-34.el6_5.1.x86_64

Zadanie: utwórz skrypt crontabdo utworzenia pełnej kopii zapasowej zaplanowanej bazy danych.

1) slapcat- utwórz plik w domyślnym formacie Berkeley DB.

2) slapcatmożna to zrobić podczas slapddziałania (jeśli bdb/hdbużywana jest baza danych).

3) Aby przywrócić plik po slapcat- należy go użyć slapadd(nie ldapadd).

4) slapcat/addnie wymaga hasła.

5) slapaddmożna to zrobić tylko po slapdzatrzymaniu.

Przykład:

 $ slapcat -f /etc/openldap/slapd.conf -b "dc=db_1" -l db_1_backup.ldif
 $ slapadd -l db_1_backup.ldif

Zamiast slapcat/add- rzućmy okiem na ldapsearch/add:

1) ldapsearch- tworzy plik z prawie takimi samymi informacjami jak slapcat;

2) ldapadd- może korzystać z pliku z ldapsearch, nie wymaga slapdzatrzymania;

3) ldapadd/search- wymaga hasła.

Przykład:

 $ ldapsearch -D "cn=root,dc=db_1" -W -b "dc=db_1" "dc=db_1" -LLL > db_1_backup2.ldif
 $ ldapadd -x -D "cn=root,dc=db_1" -W -f db_1_backup2.ldif

Więc - pytanie brzmi:

1) Czy brakuje mi czegoś w tym opisie narzędzi?

2) Jaka jest jeszcze różnica między ldapadd/slapaddi ladpsearch/slapcat?

setevoy
źródło

Odpowiedzi:

12

Dobre podsumowanie, kilka dodatkowych punktów:

  • slapcatzrzuty z dowolnego (lokalnego) zaplecza pamięci bezpośredniej, nie musi to być Berkeley (hdb lub bdb), działa również z OLC ( cn=config). Zrzuca do formatu LDIF . (Przez bezpośredni mam na myśli bezpośrednio zarządzany przez OpenLDAP, nie na przykład backend SQL, nawet jeśli jest on przechowywany lokalnie.)
  • ldapaddwymaga, aby slapd był uruchomiony, slapaddwymaga, aby nie był uruchomiony
  • ldapsearchwymaga, że slapd jest uruchomiony, slapcatnie obchodzi go, czy działa z backendem BDB, jak zauważyłeś

W skrócie:

  • slapcatjest sposobem na uzyskanie dobrej kopii zapasowej, którą można szybko przywrócić, aczkolwiek z przestojem w systemie głównym (można obejść ten problem przy różnych typach konfiguracji replikacji). Tego należy użyć do ogólnej kopii zapasowej i kopii zapasowych przed aktualizacją.
  • ldapsearch(bez +) dostarczy ci przenośną kopię zapasową, którą prawdopodobnie z łatwością załadujesz na dowolny inny serwer katalogów, ale będzie to realne przywrócenie tylko w prostej konfiguracji OpenLDAP (bez replikacji, bez specjalnych nakładek, bez przepisywania), a jeśli nie obchodzi Cię zachowanie UUID / tworzenie / modyfikowanie metadanych. Będziesz także potrzebował dodatkowych plików schematu, które pasują do twoich danych.
  • ldapadd(wykorzystując swoją inną tożsamość ldapmodify) można użyć do łatwego zastosowania modyfikacji LDAP (modyfikacja obiektu, usunięcie i zmiana nazwy), które nie są możliwe ani możliwe z slapadd/ slapcatsame

W przypadku większości administratorów główne uwagi wynikają z nieco odmiennej zawartości LDIF w każdym przypadku oraz z wymogu slapduruchomienia (lub nie). Najważniejsze różnice to:

  1. slapcatjest szybszy, ponieważ po prostu zrzuca bazę danych, pomijając narzut protokołu LDAP, uwierzytelnianie, kontrolę dostępu, ograniczenia obiektowe i czasowe, nakładki; i nie wyszukuje zgodnie z hierarchią LDAP.
  2. slapaddjest szybszy (ponownie, bez narzutów protokołu LDAP), a jeśli przywracasz znaną dobrą kopię zapasową, możesz uruchomić w trybie szybkim ( -q), aby przyspieszyć duży import. Możesz także wyłączyć sprawdzanie schematu ( -s), choć nie jest to rzadkie niż niewielkie zmiany w schemacie lub sprawdzanie poprawności danych między wersjami OpenLDAP.
  3. slapcatjest ograniczony do lokalnych baz danych, nie będzie przechodził do innych katalogów (np. z back-ldap, back-meta) tak jak to ldapsearchbędzie. To samo dotyczy slapadd/ ldapadd.
  4. ldapsearchzwróci atrybuty dynamiczne, które nie są przechowywane w wewnętrznej bazie danych, np. hasSubordinateslub te obsługiwane przez nakładki (np slapo-memberof.). Będziesz miał problemy z ładowaniem ich ldapadd(np. Atrybuty operacyjne bez modyfikacji użytkownika). Przepisywanie (slapo-rwm) może również zniekształcać ldapsearchwidok zawartości katalogu.
  5. slapcatobejmuje atrybuty wewnętrzne (operacyjne), jeśli używasz replikacji, atrybuty te są krytyczne. Dzięki replikacji jesteś nieco mniej zależny od kopii zapasowych, ale jeśli użyjesz ldapadddo przeładowania twojego wzorca, każdy obiekt zostanie odtworzony przez replikację (zmieniony entryUUID entryCSN) Chociaż możesz dołączyć atrybuty operacyjne, używając specjalnego atrybutu „+” z ldapsearch(lub allopnakładką), to nie to samo, coslapcat można zobaczyć w poprzednim punkcie. Te atrybuty obejmują również tworzenie / modyfikowanie nazwy wyróżniającej i znaczników czasu, które mogą być ważne w niektórych aplikacjach.
  6. ponieważ slapcatnie przestrzega hierarchii LDAP (dorozumiane porządkowanie), nie ma gwarancji, że jej porządkowanie danych będzie wykonalne ldapadd- tj. nawet jeśli usuniesz atrybuty operacyjne, ldapaddmoże narzekać, ponieważ podrzędne mogą pojawić się przed ich przełożonymi (rodzicami) . Specyfikacje LDAP wymagają istnienia elementu nadrzędnego, ale także nie określają kolejności wyników wyszukiwania pod tym względem. Zobacz komentarz Howarda poniżej, OpenLDAP po slapaddcichu obsługuje nieuporządkowane dane dla niektórych backendów. W skrócie możesz być w stanie wielokrotnie używać slapaddopcji Kontynuuj po błędzie ( -c), dopóki nie zostaną utworzone wszystkie „poza kolejnością” rodziców, zatrzymując się, gdy nie otrzymasz już żadnego kodu błędu 32 (brak takiego obiektu,
  7. ldapadd podlega regułom i nakładkom LDAP, np. integralności referencyjnej, ppolicy (polityka haseł)
  8. slapcatwoli używać wartości atrybutów zakodowanych w formacie base-64 dla co najmniej userPassword (oznaczonego za ::nazwą atrybutu)
  9. ldapsearchma więcej opcji formatowania LDIF i zapisywania dużych atrybutów w osobnych plikach. Może także obsługiwać polecenia i aliasy .
pan. spuratic
źródło
Kolejność wyników LDAP jest niezdefiniowana. Zarówno slapcat, jak i ldapsearch mogą zwracać wpisy w dowolnej kolejności, żadna z danych wyjściowych nie jest gwarantowana w odpowiedniej kolejności do użycia z ldapadd. Sterowniki bdb / hdb / mdb firmy slapadd mają specjalne obejścia do przetwarzania danych wejściowych w dowolnej kolejności, a ldapadd nie.
hyc
slapcatzwraca pozycje w bazie danych (backend), które mogą, ale nie muszą być dobrze zdefiniowane. ldapsearchdomyślnie zwraca kolejność, w jakiej odpowiada serwer, przy OpenLDAP istnieje możliwość sortowania po stronie klienta (np. -S "") lub kontroli sortowania po stronie serwera (np. -E sssjeśli jest obsługiwany i podlega pewnym drobnym pułapkom związanym z konfiguracją i schematem). Spec mówi wyniki wyszukiwania mogą być w dowolnej kolejności. Implementacja może zdefiniować domyślną kolejność, większość ludzi zakłada, że ​​domyślną jest „rodzic przed dzieckiem”, dokumentuje to tylko OpenDS, AFAIK.
mr
2
Kolejność wyników wyszukiwania w OpenLDAP jest celowo nieudokumentowana. Ponieważ specyfikacja mówi już, że wyniki mogą być w dowolnej kolejności, oprogramowanie klienckie nie może polegać na żadnej konkretnej kolejności. Sortowania wyników można oczywiście dokonać, ale wymaga to znacznie więcej zasobów i zwykle nie jest interesujące podczas wykonywania pełnej kopii zapasowej. Kolejność baz danych jest względnie nieistotna, biorąc pod uwagę możliwość zmiany nazw poddrzewa przenoszących gałęzie do nowych lokalizacji DIT.
hyc
1

slapcatnie działa, jeśli masz nakładki, np memberOf. Więc jeśli zrobić slapcat/ slapaddcykl członków nakładki będą już działać.

Robert Munteanu
źródło