Czy możliwe jest pobranie kluczy publicznych z bazy danych zamiast pliku autoryzowanych_kluczy?
Chciałbym użyć takiej konfiguracji do zarządzania dostępem ssh do rzeczy takich jak repozytoria git dla wielu użytkowników bez potrzeby ponownego tworzenia pliku autoryzowanych_kluczy przy każdej zmianie lub dodaniu klucza publicznego.
database
ssh
public-key
Fionn
źródło
źródło
Odpowiedzi:
Znalazłem to pytanie, próbując sam na nie odpowiedzieć. Po kilku poszukiwaniach i eksperymentach znalazłem kilka innych opcji. Pominąłem część dotyczącą dystrybucji kluczy jako alternatywy, ponieważ Matt Simmons to opisał. Wiem też, że zdarza się, że to nie wystarczy. Na przykład, jeśli jesteś GitHub i musisz przechowywać miliony kluczy publicznych dla jednego użytkownika, ciągłe aktualizowanie plików SSH uprawnione_klucze i utrzymywanie ich synchronizacji między potencjalnie dziesiątkami a setkami skrzynek brzegowych nie jest wykonalne ani pożądane.
Więc,
Przede wszystkim RedHat (i warianty) mają obsługiwaną łatę dla OpenSSH, która dodaje opcje
AuthorizedKeysCommand
iAuthorizedKeysCommandRunAs
. Łatka została scalona w górę w openssh 6.2. Aby zacytować ze strony man :W dzisiejszych eksperymentach stwierdziłem, że od razu nie działa to z powodu domyślnych zasad SELinux. Możesz obejść ten problem, wyłączając wymuszanie SELinux za pomocą
setenforce 0
. Ponieważ włączenie SELinux jest prawdopodobnie złym pomysłem, zamiast tego możesz wygenerować poprawną politykę. W moim przypadku było to tak proste, jak próba zalogowania się zAuthorizedKeysCommand
opcją skonfigurowaną w,/etc/ssh/sshd_config
a następnie za pomocąaudit2allow -a -M local && semodule -i local.pp
. To w zasadzie przegląda dzienniki kontroli i znajduje rzeczy, którym zapobiegano, i generuje dla nich wyjątki. Jeśli prawdopodobnie znajdują się tam inne elementy, które mogą znaleźć się na białej liście, prawdopodobnie powinieneś dowiedzieć się więcej oaudit2allow
tym, aby upewnić się, że nowe zasady są odpowiednie.Istnieją inne (prawdopodobnie mniej przetestowane i zaufane) łatki, aby dodać podobną funkcjonalność. Na przykład istnieje openssh-script-auth . Możesz także znaleźć łatkę używaną przez RedHat i zastosować ją bezpośrednio. Szybki przegląd Googling odkrywa https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch i https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch, które są na podstawie wersji RH, ale zaktualizowanych do nowszych wersji OpenSSH.
Łata OpenSSH, aby wykonywać wyszukiwania kluczy bezpośrednio z niektórych sklepów (np. GitHub i CodeBaseHQ i inne zrobiły). Zgodnie z moją najlepszą wiedzą GitHub nie otworzył tej łatki, ale wiem, że w przeszłości spotkałem się z wersjami wyszukiwania kluczy MySQL i PostgreSQL. Próbowałem je teraz znaleźć ponownie, ale nie miałem szczęścia.
Istnieje również kilka opcji opartych na BEZPIECZNIKACH. Na przykład istnieje LPKFuse, który pozwala obsługiwać klucze publiczne z LDAP, zmieniając
AuthorizedKeysFile
lokalizację na jedną w systemie plików LPKFuse. LPKFuse FS tworzy pliki wirtualne, których zawartość jest wspierana przez pola z serwera katalogów.Podsumowując, myślę, że opcja nr 1 jest zdecydowanie najlepsza, ponieważ jest oficjalnie obsługiwana przez RedHat. Ponadto pozwala umieścić dowolną logikę w tym skrypcie (w tym rozmowę z bazą danych) w dowolnym języku.
źródło
O ile mi wiadomo, OpenSSH nie ma takiej możliwości. Najlepszym rozwiązaniem może być automatyczne generowanie skryptu co noc przez skrypt (lub tak często, jak to konieczne).
Możesz także zobaczyć to pytanie: System do dystrybucji kluczy publicznych SSH
źródło
Wierzę, że w nowszych wersjach openssh możesz przechowywać klucze we wpisie LDAP użytkownika. Jeśli używasz już LDAP lub AD do zarządzania kontem, powinieneś być w stanie wykorzystać go również do zarządzania kluczami.
źródło