‫Następny w górę.
‫Ten jest duży.
‫Nie uruchamiaj aplikacji jako root w kontenerze, jeśli możesz
‫tego uniknąć.
‫Jeśli zrobię to naprawdę szybko, na małej
‫demonstracji tutaj.
‫W porządku. Mam Dockera, przynajmniej
‫powinienem. W porządku.
‫A jeśli po prostu ucieknę ...
‫Jeśli po prostu uruchomię Nginx, racja i zrobię
‫górę dokera na tym
‫kontenerze.
‫Co tu widzimy
‫Wewnątrz kontenera Nginx rozpoczął proces w katalogu głównym,
‫a następnie utworzył nowy proces jako
‫użytkownik inny niż root.
‫Zobacz, jak ten użytkownik ma 101 lat.
‫Jest to powszechne w wielu programach opartych na demonach, takich
‫jak MySQL, Postgres, Nginx.
‫Wiele osób, które nie są językami programowania, zrobi
‫to automatycznie. To jest bezpieczne.
‫Pozwala to Nginxowi na odrodzenie procesów
‫roboczych, które nie działają jako root,
‫aby wykonać większość pracy.
‫Mają więc jeden proces główny, który działa jako root,
‫ale nie to akceptuje połączenia i wykonuje
‫większość pracy. Większość
‫z tych procesów roboczych. Działają one jako normalny
‫użytkownik, co oznacza, że jeśli w Nginx występuje
‫luka, są szanse, że nadchodzą
‫połączenia przychodzące i ktoś próbuje wykorzystać protokół Nginx
‫HTTP, zostanie zablokowany lub uwięziony dla tego użytkownika w
‫.. . przez większość czasu, chyba
‫że istnieje poważna luka w zabezpieczeniach.
‫Tu na dole, a potem ograniczają się do tego, co
‫mogą zrobić, prawda. Nawet jeśli mieliby jakoś
‫przejąć ten proces, nadal są ograniczeni jako użytkownik.
‫Więc to jest OK.
‫To wciąż nie działa jako prawdziwy
‫root w kontenerze. To, o czym naprawdę
‫mówię, to jeśli uruchomisz
‫aplikację Python, aplikację Node lub coś
‫w tym rodzaju, gdy jest to język programowania, to
‫będzie to coś, co domyślnie rootuje, ponieważ
‫język programowania w kontenerze nie t wiedzieć, jak działa
‫twój program. Nie wie, co chcesz zrobić.
‫Będzie to domyślnie rootowanie, a to
‫więcej na temat zgodności aplikacji.
‫Można powiedzieć, że chcemy, aby było to domyślnie
‫bezpieczne, ale Docker wybrał, aby wszystkie te oficjalne kontenery działały
‫jako root dla języków programowania.
‫Sprawdźmy to.
‫Ups Nie to.
‫Firefox
‫Więc jeśli pójdziemy, powiedzmy, do Hub.
‫Po prostu zróbmy Węzeł.
‫Jest to wspólne dla większości języków.
‫Po prostu wybiorę Node jako przykład.
‫Wewnątrz węzła,
‫jeśli wejdę do jednego z plików Docker tutaj.
‫Następnie szukam użytkownika.
‫Zauważysz, że tak naprawdę nic nie znajduję.
‫Tylko ten użytkownik dodaje tutaj.
‫Zauważysz, że to robi, prawda.
‫Technicznie dodaje grupę o nazwie Węzeł i
‫użytkownika o nazwie Węzeł.
‫Jeśli przeszukujesz resztę tego pliku, zdajesz sobie sprawę, że nigdy nie zmienia
‫się on na tego użytkownika ze zwrotką U S
‫E R, prawda.
‫Powinieneś zobaczyć gdzieś węzeł użytkownika jako linię.
‫Nie robią tego, bo to twoja praca.
‫Co powinieneś robić na
‫swoim Dockerfile. Tak więc,
‫każdy plik Docker, który tworzysz z
‫tych oficjalnych zdjęć dla języków programowania, powinieneś korzystać z
‫użytkowników, które dla Ciebie tworzą. Jeśli nie tworzą tych użytkowników, możesz utworzyć jednego
‫samodzielnie w ten sam sposób. Możesz po
‫prostu ukraść tę małą dwuwierszową rzecz i zmienić
‫się na dowolnego użytkownika. Jeśli dotyczy Pythona,
‫możesz go nazwać użytkownikiem Pythona, cokolwiek.
‫Jeśli to zrobisz, uruchomione aplikacje
‫nie będą działać jako root w
‫kontenerze. Domyślnie,
‫jeśli uruchomisz dowolną standardową aplikację Node, użyje ona użytkownika
‫root w kontenerze.
‫Dlaczego to takie ważne?
‫Dwie rzeczy.
‫Po pierwsze, jeśli ktoś jest w stanie przebić się przez
‫twoją aplikację i włamać się do niej i uzyskać dostęp
‫do systemu plików, jeśli ... jeśli ta aplikacja jest rootem,
‫to w kontenerze mogą robić, co tylko chcą
‫w kontenerze. Mogą zapisywać
‫pliki w systemie plików. Mogą instalować więcej programów w tym kontenerze,
‫które mogą być uruchamiane w dowolnym momencie w tym kontenerze.
‫Tak naprawdę nie chcemy, żeby to zrobili.
‫Wolelibyśmy, aby były bardzo ograniczone.
‫Więc jeśli twoje aplikacje to
‫obsługują, zrób to. Zasadniczo upewniasz się, że użytkownik
‫jest dostępny.
‫Mam tutaj przykład z DockerCon.
‫Na DockerCon miałem całą rozmowę na temat Node. js, a
‫jednym z tematów był użytkownik.
‫Pokaż mi, czy mogę to znaleźć.
‫Widzisz co tu zrobiłem? Jest to dość prosty plik.
‫Zamierzam to połączyć i włożyć.
‫W tym pliku Docker.
‫W tym pliku Docker mam ...
‫Nie utworzyłem użytkownika, ponieważ obraz węzła
‫już go utworzył. Właśnie zmieniam na węzeł użytkownika.
‫Następnie instaluję moje pakiety za pomocą tych dwóch linii, a następnie
‫zamierzam je uruchomić.
‫Zauważysz, że muszę zacząć korzystać z
‫opcji chown w moich poleceniach kopiowania, aby upewnić się, że moje
‫pliki są teraz tym samym użytkownikiem, co użytkownik, który mój program
‫będzie działał. W przeciwnym razie mogą wystąpić problemy,
‫prawda. Moja aplikacja prawdopodobnie ... jeśli
‫nie może odczytać plików, to nie może go uruchomić, prawda.
‫Potrzebuję zmian tych uprawnień.
‫Mogę to zrobić za pomocą jednego linijki polecenia kopiowania.
‫Zobaczysz też tutaj, że tworzę katalog i przeglądam
‫go, aby za każdym razem, gdy aplikacja została
‫skopiowana, chciałem się upewnić, dodatkowo, że są
‫tam uprawnienia, aby mogła pisać.
‫Ponieważ z chwilą zmiany tego użytkownika, to
‫polecenie kopiowania, a konkretnie to polecenie uruchamiania, będzie działać jako
‫ten użytkownik. Jeśli nie ma
‫uprawnień do zapisu do katalogów, to również zawiedzie.
‫Powodem, dla którego Docker tego nie robi, jest to, że
‫wiedzą, że twoje rzeczy prawdopodobnie się zepsują.
‫Musisz więc wykonać te dodatkowe kroki.
‫Ale to nie jest takie trudne. Naprawdę nie.
‫Prawdopodobnie możesz wykonać wszystkie te testy w ciągu jednego dnia,
‫a następnie będziesz chciał uruchomić swoje systemy za pomocą pełnego CI
‫i pełnego testowania na swoich serwerach, ponieważ czasami PHP jest jednym z
‫tych, które są w tym złe.
‫PHP lubi uruchamiać wiele plików dziennika i
‫pisać na dysku.
‫Naprawdę wszystko, co pozwala na przesyłanie przez użytkowników, zapisuje
‫na dysku. Musisz więc upewnić się,
‫że te uprawnienia są prawidłowe, aby ludzie piszący pliki, na przykład
‫powiedzmy, że prowadzą blog WordPress.
‫Ten blog WordPress będzie zapisywał na dysk, gdy użytkownicy
‫prześlą obrazy do swojego bloga.
‫Chcesz się upewnić, że te uprawnienia będą działać.
‫Więc na pewno będziesz musiał przeprowadzić testy.
‫Gdy to zrobisz, teraz Twoja aplikacja nie będzie
‫działać jako root. Więc nie może mieć pełnej
‫kontroli w kontenerze. Innym powodem,
‫dla którego chcesz to zrobić, jest luka w
‫Linuksie, która jest rzadka, lub Docker, który jest również
‫bardzo rzadki, wtedy istnieje mniejsze prawdopodobieństwo, że
‫wyjdą z tego kontenera. Stało się to tylko, no
‫cóż, raz, kiedy jestem tego bardzo świadomy i właściwie udokumentowałem
‫tutaj trochę tego.
‫Dirty COW. Dirty COW to
‫luka w systemie Linux, która pozwoliła ci
‫wyjść
‫z kontenera, prawda. Zmiana użytkownika tutaj
‫niekoniecznie rozwiązałaby
‫cały problem, ale z pewnością
‫nie zaszkodziła temu problemowi.
‫Inne luki, przed którymi prawdopodobnie chroniłby.
‫Ale to najlepsza praktyka.
‫Myślę, że jeśli masz zespół
‫bezpieczeństwa, będą nalegać, abyś nie działał jako root.
‫Zrobiłbyś to.