Bezpiecznie ogranicz dostęp do prywatnego repozytorium Debiana

9

Szukałem metody ograniczenia dostępu do prywatnego repozytorium Debiana i możliwości uwierzytelnienia się w nim w sposób nieinteraktywny (tj. Przy użyciu skryptu)

Najbardziej przydatny artykuł, jaki znalazłem, jeśli faktycznie pochodzi ze strony administracyjnej Debiana, ale bezpieczna metoda używa ssh i kluczy publicznych / prywatnych. Działa świetnie, ale klucz publiczny każdego hosta musi znajdować się w pliku zdalnego kluczy autoryzowanych, aby pomyślnie się uwierzytelnić. Nie mówi nic o podaniu hasła do ssh: //, ale przypuszczam, że powinno to być możliwe.

Czy próbowałeś innych alternatyw (np. Ftps)?

Z góry dziękuję

Humber
źródło
Problem, który mam z powyższym artykułem, polega na tym, że nie tylko zapewnia dostęp do repozytorium APT - daje dostęp do powłoki mojej maszynie repozytorium APT. To niedopuszczalne ryzyko.
BobDoolittle,

Odpowiedzi:

5

Jeśli zawsze uruchamiasz apt-getręcznie na swoich serwerach (bez automatycznych apt-getpoleceń uruchamianych przez crons), możesz rozważyć użycie przekazywania agentów ssh . Pozwala to uniknąć konieczności zarządzania jednym kluczem publicznym / prywatnym na każdym zarządzanym serwerze i jest to prawdopodobnie bezpieczniejsze niż pozostawienie kluczy prywatnych na każdym serwerze.

Konfiguracja początkowa - połącz się z serwerami, którymi chcesz zarządzać, i dodaj coś takiego do /etc/apt/sources.listtego (w tym przykładzie założono, że chcesz połączyć swoje serwery z managerkontem):

    deb ssh://[email protected]/path other stuff
  • utwórz parę kluczy prywatnych / publicznych na własnym komputerze, johndoena przykład za pomocą swojego loginu (pod warunkiem, że twój komputer działa na debian: jeśli nie, możesz to zrobić z serwera debian dedykowanego do zarządzania):

    ssh-keygen
    
  • upewnij się, że jest chroniony przez silne hasło
  • skopiuj swój klucz publiczny na serwer repozytorium w /home/manager/.ssh/authorized_keys:

    ssh-copy-id [email protected]
    

Raz na sesję zarządzania

  • uruchom agenta ssh na swoim komputerze, wpisując:

    eval `ssh-agent`
    
  • dodaj swój klucz do agenta (będzie to wymagało twojego hasła):

    ssh-add
    

Zarządzanie serwerem

  • połącz się z serwerem, którym chcesz zarządzać ssh -A( -Aaktywuje przekazywanie agentów):

    ssh -A some.server.org
    
  • przełącz się na root (jeśli chcesz użyć sudo, musisz skonfigurować, /etc/sudoersbo inaczej sudoprzerwie przekazywanie agentów, przeczytaj to ):

    su
    
  • powinieneś być teraz w stanie połączyć się z kontem menedżera repozytorium za pomocą ssh bez ponownego wpisywania hasła, dzięki przekazaniu agenta. Dlatego apt-getpowinien działać dobrze:

    apt-get udate
    

Kończenie sesji zarządzania

  • Po zakończeniu zarządzania serwerami usuń klucze z agenta:

    ssh-add -D
    

Zalety

  • Wymagana jest niewielka wstępna konfiguracja
  • Wymagany jest tylko jeden klucz prywatny
  • Klucz prywatny jest chroniony silnym hasłem
  • Jeśli ktoś uzyska dostęp do roota na jednym z twoich serwerów, nie będzie miał natychmiastowego dostępu do twojego serwera repozytorium.
    • Pamiętaj, że jeśli haker jest cierpliwy i wykwalifikowany, może poczekać, aż połączysz się z serwerem za pomocą przekazywania agentów, a także może przejąć mechanizm przekazywania, aby uzyskać dostęp do serwera repozytorium.
    • Aby temu zapobiec, możesz użyć ssh-ask, aby zaakceptować / odrzucić każdą próbę użycia klucza.
    • W każdym razie haker nie uzyska dostępu do samego klucza prywatnego: po prostu będzie mógł przejąć mechanizm przekazywania, aby użyć klucza i tylko w czasie, gdy jesteś podłączony do serwera.
MiniQuark
źródło
Jeszcze raz dziękuję MiniQuark. W rzeczywistości aktualizacje są nienadzorowane, ale jest to świetna metoda, którą mógłbym zastosować do celów testowych.
Humber
Cała przyjemność po mojej stronie! :) Cieszę się, że to pomaga.
MiniQuark
4

Jednym ze sposobów jest umożliwienie dostępu do repozytorium określonemu zestawowi adresów IP. Działa to bardzo dobrze w przypadku sieci LAN i VPN.

Prosty i wydajny.

Antoine Benkemoun
źródło
1
Dzięki Antoine :). W rzeczywistości repozytorium, które mam teraz, jest dostępne przy użyciu tej metody (http przez połączenie OpenVPN). Ograniczam adresy IP należące do VPN. Wadą jest to, że każdy host musi być podłączony do sieci VPN, aby uzyskać dostęp do repozytorium, co jest nieco denerwujące (zarządzanie kilkoma certyfikatami / kluczami). Przepraszamy za brak określenia tego w pytaniu.
Humber
To prawda, że ​​zarządzanie OpenVPN jest uciążliwe, ale sprawia, że ​​zarządzanie bezpieczeństwem repozytorium jest bardzo proste. Ponadto użytkownicy nie muszą zawracać sobie głowy poświadczeniami, gdy są w sieci VPN.
Antoine Benkemoun
2

Rozwiązanie ssh + klucze publiczne / prywatne nie jest takie złe:

  • zaloguj się jako root na maszynie klienta
  • typ ssh-keygen, a następniessh-copy-id [email protected]
  • edytuj /etc/apt/sources.listi dodaj coś takiego:

    deb ssh://[email protected]/path other stuff
    

To prawda, że ​​wymaga umieszczenia klucza publicznego każdego serwera w ~/.ssh/authorized_keyspliku na serwerze, ale nie jest to takie skomplikowane (patrz wyżej) i daje kontrolę nad tym, które serwery są dozwolone lub nie w danym momencie (możesz usunąć klucz w w dowolnym momencie authorized_keys).

MiniQuark
źródło
Dzięki MiniQuark. Tak, to rozwiązanie nie jest takie złe, ale ssh-copy-id nie działa, jeśli uwierzytelnianie hasła jest wyłączone na serwerze openssh. Myślałem o rozpowszechnieniu tego samego pliku klucza na każdym kliencie przy użyciu repozytorium, aby móc z niego korzystać. Dla większego bezpieczeństwa użyty zostanie użytkownik z minimalnymi uprawnieniami. To prawie to samo, co udostępnianie poświadczeń. Obecnie testuję tę metodę, aby sprawdzić, jak się zachowuje / działa.
Humber
1

Możesz skonfigurować dostęp https do swojego repozytorium, zabezpieczony loginem / hasłem (podstawowe uwierzytelnianie). Problem polega na tym, że musisz wprowadzić loginu / hasło w postaci jawnego tekstu /etc/apt/sources.list(uwaga: istnieje łatka, która pozwala na wprowadzenie loginu / hasła /root/.netrc).

MiniQuark
źródło
Jest to prawdopodobnie najlepsze rozwiązanie, także nie jest to netrc, ale /etc/apt/auth.conf. Dokumenty tutaj: manpages.debian.org/testing/apt/apt_auth.conf.5.en.html
Nicholi
0

Link w twoim pytaniu pokazuje wiele metod. Chcesz numer 2, https + podstawowe uwierzytelnianie.

Justin
źródło
Dzięki, Justin. Myślę, że transport https z apt działa tylko wtedy, gdy zainstalowany jest apt-transport-https. To interesująca alternatywa. Jedyną wadą są referencje w sources.list
Humber
chmod 600 /etc/apt/sources.list
Justin