Czy używanie sudo od Jenkins jest złe?

11

Używam wtyczki Publish Over SSH do wdrażania moich aplikacji Jenkinsw różnych środowiskach. Niektóre zadania wdrażania przygotowują środowisko i np. Zatrzymują i ponownie uruchamiają usługę systemową serwera aplikacji. Niektóre z tych poleceń wymagają sudo.

Jestem ciekawy, czy wymaganie sudo w ramach zdalnych zadań publikowania i wykonywania Jenkins może być złe. Czy powinniśmy zmienić politykę bezpieczeństwa na hoście docelowym, aby umożliwić wykonywanie wymaganych funkcji bez sudo?

amfibia
źródło

Odpowiedzi:

6

Nie, naprawdę dobrą praktyką bezpieczeństwa jest sudo, gdy potrzebujesz uprawnień na wyższym poziomie. To jest powód, dla którego większość dystrybucji zabrania domyślnego logowania i faktycznie zmusza cię do sudo supisania zamiast pisania su- chcą zachęcić cię do korzystania z sudo ze względów bezpieczeństwa. Jest kilka powodów, dla których:

  • Audyt. Podczas sudo system rejestruje, kto wykonał sudo i polecenie, które wykonali. Dodaje to bardzo wiele do celów sądowych, gdy trzeba wrócić i dowiedzieć się, co się stało - przypisać winę, złapać nikczemne działania lub po prostu w celu rozwiązywania problemów (co do diabła wydarzyło się ostatniej nocy o 19:00, zanim serwer przestał działać AWOL?)

  • Sudo rządzi. To, że użytkownik musi uruchomić coś z eskalowanymi uprawnieniami, nie oznacza, że ​​musi uruchomić wszystko z eskalowanymi uprawnieniami. Użycie su lub dodanie użytkownika do koła pozwala użytkownikowi zrobić wszystko . W sudo można jednak określić, co użytkownicy mogą, a czego nie mogą robić, korzystając z aliasów poleceń, które pozwalają na stosowanie symboli wieloznacznych, co pozwala na elastyczne reguły, które dają użytkownikom uprawnienia do korzystania z niektórych poleceń, ale nie innych.

  • Hartowanie Możliwe jest wyłączenie roota. Jak w przypadku wszystkich celów i celów, nie istnieje i jest użyteczny / użyteczny tylko w trybie pojedynczego użytkownika - wymaga ponownego uruchomienia serwera (a jedynym powodem, dla którego jest to dozwolone, jest odzyskiwanie hasła). sudo sunie działa. Dokonuje się tego poprzez ustawienie powłoki roota na / bin / nologin. co jest doskonałym sposobem na uniknięcie wielu luk w zabezpieczeniach związanych z eskalacją root. To oczywiście zakłada, że ​​właściwie używasz powyższego punktu (i nadal możesz przyznać określonemu administratorowi wszystkie uprawnienia, choć podważy to twoją postawę bezpieczeństwa).

Te rzeczy są oczywiście tylko częścią twojego modelu bezpieczeństwa. Na przykład, chyba że nie masz użytkowników z pełnymi uprawnieniami administracyjnymi (a czasami nawet wtedy), twój użytkownik może (prawdopodobnie jest w stanie) usunąć dzienniki i historię - chyba że używasz serwera dziennika i syslog do wysyłania dzienników poza pole. Zatem nie ma sposobu, aby schować tego kota z powrotem do torby. Oczywiście, jeśli używasz centralnej struktury katalogów uwierzytelniania, to wróci do gry: jeśli przejdę na jedno konto, zostanie ono naruszone na wszystkich serwerach w organizacji - w tym prawdopodobnie na serwerze dziennika.

Krótko mówiąc, bezpieczeństwo jest skomplikowane, ale sudo jest doskonałym narzędziem do tworzenia bezpiecznego środowiska i więcej osób powinno z niego korzystać w jak największym stopniu.

James Shewey
źródło
7

Czy zezwalasz na zdalny sudolub zdalny dostęp do czegoś, SUID rootco ma dość podobną powierzchnię ataku. Chciałbym pozostać sudow łańcuchu, ponieważ pozwala to łatwo ograniczyć polecenia i ma rejestrowanie, które będzie niezbędne, jeśli będziesz potrzebować później kontroli. sudoma również znacznie dłuższą historię produkcji. Robienie czegoś innego będzie miało mniej historii i wyższe zmiany niemiłych niespodzianek.

Istnieją jednak inne rzeczy, które możesz zrobić, aby zwiększyć bezpieczeństwo:

  • dokręcić ssh
  • zezwól tylko na polecenia restartowania dla kilku określonych użytkowników, w tym jednego dla jenkins
  • zezwalaj tylko na logowanie dla określonych użytkowników ze wszystkich wewnętrznych adresów IP lub po prostu jenkins i adresy IP skoku
  • przechowuj logi na zdalnych skrzynkach, aby nie można było ich zmarnować
pisklęta
źródło
Właściwie właśnie skonfigurowałem swoje zadanie SSH i nie chciałem uruchamiać sudo: „sudo: przepraszam, musisz mieć tty, aby uruchomić sudo”
amfibia
1
Może być konieczne podanie sshtej -topcji. Albo przekonaj sudo, że nie potrzebuje go jak unix.stackexchange.com/questions/122616/...
pisklęta
Jak podać opcję SSH, gdy jest ona wywoływana z Jenkins?
amfibia
Nie jestem co do tego pewien. Czy próbowałeś poprawić, sudojak pokazuje link?
pisklęta
1
Udało mi się włączyć sudo z Jenkins, zmieniając sudoery na zdalnym hoście (cel SSH), aby nie wymagały tty (skomentowano Defaults requiretty)
amfibia