top of page

Search Results

Znaleziono 168 wyników za pomocą pustego wyszukiwania

  • Wydano Linux Kernel 6.3 - oto co nowego

    Nowa wersja jądra Linux pojawiła się z szeregiem ulepszeń dotyczących sprzętu, wydajności oraz bezpieczeństwa. Linus Torvalds ogłosił wydanie Linux 6.3 na Linux Kernel Mailing List (LKML), komentując: "...oto jesteśmy, zgodnie z planem, z wersją 6.3 gotową do Waszej dyspozycji". Co nowego? Przejrzyjmy nowości w wersji 6.3. Linux 6.3: Nowe funkcje Jak można się było spodziewać, jądro Linux 6.3 wprowadza wiele wsparcia dla nadchodzących i jeszcze niewydanych procesorów oraz sprzętu graficznego od Intela i AMD. Chociaż są one ekscytujące (i niezbędne), trudno się nimi emocjonować, gdy niewiele osób na razie z nich skorzysta. Na szczęście wprowadzono również wiele zmian, które mają bezpośredni wpływ na nasze codzienne korzystanie z systemu. Ważną zmianą związaną z AMD w wersji 6.2 jest wsparcie dla automatycznej funkcji IBRS AMD w ramach łagodzenia Spectre. W dziedzinie architektury nowe sterowniki zarządzania energią dla ARM i RISC-V pojawiają się w Linux 6.3. Ten drugi obsługuje również przyspieszone funkcje łańcuchów znaków (poprzez rozszerzenie manipulacji bitami Zbb), a pierwszy zyskuje wsparcie dla instrukcji rozszerzenia macierzy skalowalnych 2. W systemach plików NFS (zarówno po stronie klienta, jak i serwera) obsługuje teraz szyfrowanie oparte na AES-SHA2; optymalizacje wydajności bezpośredniego wejścia/wyjścia EXT4; niskie opóźnienia dekompresji dla EROFS oraz szybszy sterownik systemu plików Brtfs. Wsparcie sprzętowe obejmuje natywny interfejs kontrolera Steam Deck w HID, pozwala na obsługę kierownicy Logitech G923 Xbox edition na Linuksie, ulepsza działanie kontrolerów 8BitDo Pro 2 oraz dodaje monitorowanie czujników dla różnych płyt głównych ASUS z serii Ryzen. Inne ważne zmiany: Wsparcie dla kodu Rust w trybie użytkownika Linux Adapter Wi-Fi Realtek RTL8188EU Wsparcie dla chipsetu Wi-Fi 7 Qualcomm Wsparcie dla Ethernet w NVIDIA BlueField 3 DPU Wielościeżkowy protokół TCP obsługujący mieszaną transmisję IPv4 i IPv6 Nowe narzędzie do analizy szumów sprzęowych Wsparcie dla KVM w przypadku rozszerzonych hiperwywołań Hyper-V Wreszcie, wiele jednopłytkowych urządzeń korzysta z aktualizacji sterowników, takich jak BannaPi R3, BPI-M2 Pro oraz Orange Pi R1 Plus (często wymieniane jako prawdziwa alternatywa dla Raspberry Pi 4). Dodatkowo usunięto ponad 150 000 linii kodu obsługującego (przestarzałe i nieużywane) płyty ARM. Jak zawsze, warto przejrzeć szczegółowe omówienia LWN dotyczące nowych funkcji (często z linkami do dalszych informacji o konkretnych zmianach). Jak zainstalować Linux 6.3? Można pobrać jądro Linux 6.3 ze strony kernel.org, jednak aby z niego skorzystać, trzeba będzie skompilować je ręcznie. Nie masz ochoty? Na szczęście inni są chętni do wykonania tej ciężkiej pracy za nas! Użytkownicy dystrybucji rolling-release mogą spodziewać się tego jądra jako aktualizacji w niedalekiej przyszłości, natomiast niektóre dystrybucje o stałych wydaniach, takie jak Pop!_OS, także spakują tę wersję i udostępnią swoim użytkownikom za pośrednictwem standardowych kanałów aktualizacji oprogramowania. Użytkownicy Ubuntu pragnący zainstalować tę aktualizację będą musieli rozważyć zainstalowanie głównych kompilacji Canonical. Chociaż są one tworzone przez deweloperów Ubuntu, te główne kompilacje nie są objęte wsparciem, testowaniem ani gwarancją wydajności. Używaj ich na własne ryzyko. Źródło: https://lwn.net/Articles/923846/ https://lwn.net/Articles/924384/ https://www.phoronix.com/review/linux-63-features https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/tlfs/hypercall-interface#extended-hypercall-interface https://lkml.org/lkml/2023/4/23/284 https://kernel.org/ https://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D

  • QEMU 8.0 - oprogramowanie do wirtualizacji z nowymi funkcjami dla ARM i RISC-V

    Ta ważna aktualizacja QEMU wprowadza także nowe funkcje i usprawnienia dla platform s390x, x86 oraz HPPA. Oprogramowanie do emulacji maszyn i wirtualizacji open-source QEMU 8.0 zostało wydane jako znacząca aktualizacja, która przynosi szereg nowych funkcji i ulepszeń dla platform ARM, RISC-V, x86, s390x oraz HPPA. Wydanie QEMU 8.0 następuje rok po premierze QEMU 7.0 i ma na celu usprawnienie wsparcia dla architektur ARM oraz RISC-V. W przypadku ARM, dodaje wsparcie dla emulacji FEAT_EVT, FEAT_FGT oraz AArch32 ARMv8-R, emulację procesora Cortex-A55 i Cortex-R52, wsparcie dla nowego typu maszyny Olimex STM32 H405, a także wsparcie gdbstub dla rejestrów systemowych M-profile. Dla architektury RISC-V, QEMU 8.0 przynosi aktualizację wsparcia maszynowego dla OpenTitan, PolarFire i OpenSBI, dodatkowe wsparcie dla ISA i rozszerzeń smstateen, natywnego debugowania icount trigger, związanych z pamięcią podręczną zdarzeń PMU w trybie wirtualnym, rozszerzeń Zawrs/Svadu/T-Head/Zicond oraz wsparcie ACPI. Ponadto RISC-V otrzymał szereg poprawek, obejmujących propagację PMP dla TLB, wyjątki mret, nieskompresowane instrukcje oraz inne ulepszenia emulacji/wirtualizacji. Dla platformy HP Precision Architecture (HPPA) wersja QEMU 8.0 przynosi ulepszenia we wsparciu dla instrukcji fid (Floating-Point Identify) oraz emulacji 32-bitowej. Z kolei platforma s390x (IBM Z) otrzymała wsparcie dla asynchronicznego demontażu pamięci dla bezpiecznych gości KVM podczas ponownego uruchomienia oraz ulepszoną obsługę urządzeń zPCI passthrough. Dla x86 najnowsza wersja QEMU wprowadza nowy model procesora SapphireRapids, wsparcie dla gości Xen w KVM z jądrem Linux 5.12 i nowszym, a także wsparcie TCG dla flag CPUID FSRM, FZRM, FSRS i FSRC. Wśród innych godnych uwagi zmian, QEMU 8.0 ulepsza virtio-mem, dodając wsparcie dla użycia prealokacji w połączeniu z migracją na żywo, zaktualizowane eksperymentalne wsparcie migracji do wersji 2 dla protokołu migracji VFIO oraz poprawę wydajności w przypadku TCP i stosowania TLS dla qemu-nbd. QEMU 8.0 jest dostępne do pobrania jako źródłowy plik tar ze strony oficjalnej, jeśli chcesz skompilować je samodzielnie. Jeśli nie chcesz tego robić, powinieneś móc zainstalować QEMU 8.0 z repozytoriów stabilnych swojej dystrybucji Linux w ciągu najbliższych dni lub tygodni. Źródło: https://gitlab.com/qemu-project/qemu https://www.qemu.org/docs/master/devel/submitting-a-patch.html https://www.qemu.org/download/

  • Google Authenticator otrzymuje funkcję tworzenia kopii zapasowych w chmurze dla kodów TOTP.

    W poniedziałek gigant wyszukiwania Google przedstawił znaczącą aktualizację swojej 12-letniej aplikacji Authenticator na Androida i iOS, dodając opcję synchronizacji kont, która pozwala użytkownikom tworzyć kopie zapasowe swoich haseł jednorazowych opartych na czasie (TOTP) w chmurze. "Ta zmiana oznacza, że użytkownicy są lepiej chronieni przed blokadą, a usługi mogą polegać na tym, że użytkownicy zachowają dostęp, zwiększając zarówno wygodę, jak i bezpieczeństwo," powiedział Christiaan Brand z Google. Aktualizacja, która wprowadza także nową ikonę do aplikacji dwuskładnikowego uwierzytelniania (2FA), wreszcie upodabnia ją do iCloud Keychain firmy Apple i rozwiązuje długoletnie zażalenie, że jest związana z urządzeniem, na którym jest zainstalowana, co sprawia, że jest uciążliwa podczas przełączania się między telefonami. Jeszcze gorzej, jak twierdzi Google, użytkownicy, którzy całkowicie stracili dostęp do swoich urządzeń, "tracili możliwość logowania się do dowolnej usługi, w której skonfigurowali 2FA za pomocą Authenticatora". Funkcja synchronizacji w chmurze jest opcjonalna, co oznacza, że użytkownicy mogą zdecydować się korzystać z aplikacji Authenticator bez łączenia jej z kontem Google. Mimo to warto pamiętać o potencjalnych zagrożeniach związanych z kopiami zapasowymi w chmurze, ponieważ złośliwy podmiot mający dostęp do konta Google mógłby wykorzystać je do włamania się do innych usług internetowych. Rozwój aplikacji ma miejsce kilka dni po tym, jak szwajcarska firma Proton, która skupia się na prywatności, przekroczyła 100 milionów aktywnych kont w zeszłym tygodniu, przedstawiając zaszyfrowane end-to-end narzędzie do zarządzania hasłami o nazwie Proton Pass. Narzędzie o otwartym kodzie źródłowym, które można publicznie audytować, wykorzystuje funkcję haszowania haseł bcrypt oraz ulepszoną wersję protokołu Secure Remote Password (SRP) do uwierzytelniania, a także integruje się z 2FA. Źródło: https://proton.me/blog/proton-100-million-accounts https://proton.me/blog/proton-pass-beta https://proton.me/pass https://support.apple.com/guide/iphone/passkeys-passwords-devices-iph82d6721b2/ios https://security.googleblog.com/2023/04/google-authenticator-now-supports.html

  • Krytyczna podatność w MS Outlook umożliwiająca przejęcie konta użytkownika bez ingerencji.

    We wtorek Microsoft wydał łatkę naprawiającą poważną lukę w Outlooku. Wszyscy użytkownicy korzystający z tego programu powinni traktować tę informację priorytetowo, gdyż podatność stwarza niezwykle łatwy sposób na atak, który z pewnością zostanie szybko wykorzystany przez cyberprzestępców. Luka otrzymała numer CVE-2023-23397 i opisuje się ją następująco: „Microsoft Office Outlook zawiera lukę w zabezpieczeniach umożliwiającą eskalację uprawnień, która pozwala przeprowadzić atak NTLM Relay na inną usługę w celu uwierzytelnienia użytkownika” Szczegóły dotyczące wykorzystania luki nie zostały podane. Atakujący może wykorzystać lukę, wysyłając specjalnie spreparowaną wiadomość e-mail, która uruchamia się automatycznie po pobraniu i przetworzeniu przez klienta programu Outlook. Może to prowadzić do jej exploitacji ZANIM wiadomość e-mail zostanie wyświetlona w okienku podglądu! Nie musimy klikać na nic – wszystko odbywa się w tle. Sytuacja ta jest możliwa przez niepoprawną walidację dwóch właściwości wiadomości, które opiszemy poniżej, oraz możliwość przejęcia skrótu NTLM hasła użytkownika: „Atakujący, który wykorzysta podatność, może uzyskać dostęp do skrótu Net-NTLMv2 użytkownika, który może posłużyć jako podstawa ataku NTLM Relay na inną usługę w celu uwierzytelnienia użytkownika”. W sieci można znaleźć demonstrację ataku z wykorzystaniem exploita, przedstawioną przez badaczy z MDSec Demonstracja ataku na użytkownika poprzez Outlook: Luka jest szczególnie interesująca, ponieważ uruchamia uwierzytelnianie NTLM na adres IP (tj. system poza strefą intranetu lub zaufanymi witrynami), co następuje natychmiast po otwarciu wiadomości e-mail, niezależnie od tego, czy użytkownik wybrał opcję załadowania zdalnych obrazów, czy nie! Chociaż nie podano żadnych szczegółowych informacji, Microsoft udostępnił skrypt do przeprowadzania inspekcji serwera Exchange w celu identyfikacji elementów poczty, które mogą być wykorzystane do ataku. Badacze dokonali przeglądu skryptu audytu. Kod ujawnia, że szuka on dwóch konkretnych właściwości: PidLidReminderFileParameter, PidLidReminderOverride. Pierwsza, PidLidReminderFileParameter, to parametr kontrolujący, jaka nazwa pliku powinna być odtwarzana przez klienta programu Outlook, gdy zostanie wyzwolone przypomnienie o elemencie poczty. Badacze zwracają uwagę na jeden aspekt: „Jest to oczywiście szczególnie interesujące, ponieważ sugeruje, że właściwość akceptuje nazwę pliku, która potencjalnie może być ścieżką UNC w celu wyzwolenia uwierzytelnienia NTLM”. Po dalszej analizie dostępnych właściwości badacze zwrócili również uwagę na właściwość PidLidReminderOverride, którą wykorzystali do napisania exploita. „Mając to na uwadze, prawdopodobnie powinniśmy ustawić właściwość PidLidReminderOverride, aby spowodować, że Outlook przeanalizuje nasz złośliwy UNC wewnątrz PidLidReminderFileParameter”. Exploit na lukę w Outlook: W pierwszym kroku badacze utworzyli plik MSG (wiadomość) programu MS Outlook w formie spotkania. Do jego wygenerowania wykorzystali napisaną w .NET bibliotekę MsgKit. W klasie „Appointment” dokumentu dodali opisywane wyżej właściwości PidLidReminderOverride i PidLidReminderFileParameter (jeszcze przed zapisaniem pliku MSG): Jak widać na powyższym ekranie, parametr PidLidReminderFileParameter „definiuje zewnętrzne źródło pliku (dostępne na adresie IP 10.211.55.21), zaś PidLidReminderOverride pozwala nadpisać domyślną wartość. Całość kodu wygeneruje plik MSG spotkania i zostanie ono zapisane na dysku „C:” w katalogu „tools” jako „appointment.msg”. Teraz wystarczy taką wiadomość przesłać do użytkownika i ustawić usługę nasłuchującą na adresie 10.211.55.21 żądania NTLM. Outlook w momencie odebrania wiadomości w formie nowego spotkania w kalendarzu tak naprawdę wysyła na adres atakującego skrót NTLM hash użytkownika. Co dalej można zrobić z takim dobrodziejstwem, sprawdzisz już na pewno na Kapitanie, wpisując odpowiednią frazę w polu wyszukiwania? Czy jest się czego obawiać? Jeśli masz wdrożone odpowiednie konfiguracje i blokady ruchu SMB (port 445) na zewnątrz organizacji, nie powinieneś się obawiać tego ataku z zewnątrz. Za to może on być łatwy do przeprowadzenia od środka. Microsoft zaleca wyłączenie usługi WebClient działającej na komputerach w firmie (podobnie do zalecenia dotyczącego blokowania ruchu TCP/445). Lecz trzeba to zrobić z niezwykłą rozwagą, bo spowoduje to zablokowanie wszystkich połączeń WebDAV, w tym intranetu, co może mieć wpływ na użytkowników lub aplikacje. Warto też wprowadzić następujące środki łagodzące: wdrożyć odpowiednie narzędzia do monitorowania ruchu NTLM w organizacji, dodać użytkowników do grupy bezpieczeństwa w Active Directory „Protected Users” w przypadku kont administracyjnych i wrażliwych w firmie, zablokować ruch wychodzący TCP 445/SMB z Twojej sieci na firewallu brzegowym, wewnętrznym i w ustawieniach VPN. Zapobiegnie to wysyłaniu komunikatów uwierzytelniających NTLM do zdalnych udziałów plików. Podsumowanie: Podatność z pewnością ta dzisiejsza może dołączyć do grona najgroźniejszych i najciekawszych. Stosując odpowiednie metody ochrony środowiska i jego konfiguracji zgodnie z najlepszymi praktykami, możesz uchronić firmę przed tego typu atakiem (również w przyszłości). Zaktualizowany tytuł: Krytyczna podatność w MS Outlook umożliwiająca przejęcie konta użytkownika bez interakcji: Exploit dostępny! Zaktualizowany artykuł: Microsoft niedawno wydał łatkę dla krytycznej luki w zabezpieczeniach oprogramowania Outlook. Wszyscy użytkownicy Outlooka powinni potraktować tę informację priorytetowo, ponieważ podatność stwarza niezwykle łatwy sposób na atak, który bez wątpienia zostanie szybko przyjęty przez atakujących. Źródło: https://github.com/microsoft/CSS-Exchange/blob/a4c096e8b6e6eddeba2f42910f165681ed64adf7/docs/Security/CVE-2023-23397.md https://github.com/Sicos1977/MsgKit https://vimeo.com/user117332457?embedded=true&source=owner_portrait&owner=117332457

  • Drugi atak typu zero-day uderza w Google Chrome - pilna aktualizacja wydana

    We wtorek Google wprowadziło pilne poprawki, aby zaradzić kolejnemu aktywnie wykorzystywanemu, poważnemu błędowi typu zero-day w przeglądarce internetowej Chrome. Wada, śledzona jako CVE-2023-2136, opisana jest jako przypadłość przekroczenia zakresu liczby całkowitej (integer overflow) w Skia, otwartoźródłowej bibliotece grafiki 2D. Clément Lecigne z Google's Threat Analysis Group (TAG) został uznany za osobę, która odkryła i zgłosiła błąd 12 kwietnia 2023 roku. "Przekroczenie zakresu liczby całkowitej w Skia w Google Chrome przed wersją 112.0.5615.137 pozwalało zdalnemu atakującemu, który przejął kontrolę nad procesem renderowania, potencjalnie uniknąć piaskownicy za pomocą spreparowanej strony HTML", według bazy danych narodowej podatności NIST (NVD). Gigant technologiczny, który naprawił również siedem innych problemów związanych z bezpieczeństwem w najnowszej aktualizacji, poinformował, że jest świadomy aktywnego wykorzystywania tej wady, ale nie ujawnił dodatkowych szczegółów, aby zapobiec dalszym nadużyciom. To druga podatność typu zero-day w Chrome wykorzystana przez cyberprzestępców w tym roku. Pojawiła się zaledwie kilka dni po tym, jak Google naprawiło CVE-2023-2033 w zeszłym tygodniu. Nie jest od razu jasne, czy oba ataki zero-day zostały połączone jako część działań zainfekowanych w rzeczywistości. Zaleca się użytkownikom uaktualnienie do wersji 112.0.5615.137/138 dla Windows, 112.0.5615.137 dla macOS oraz 112.0.5615.165 dla Linux, aby zminimalizować potencjalne zagrożenia. Użytkownikom przeglądarek opartych na Chromium, takich jak Microsoft Edge, Brave, Opera i Vivaldi, zaleca się również zastosowanie poprawek, gdy tylko będą dostępne.

  • 10 poleceń związanych z obsługą jądra w systemie Linux - part 4

    Hej zapraszam do kolejnego artykułu z cyklu polecenia Linux. Na początek szybki opis 10 poleceń zwiazanych/powiązanych z obsługa jądra systemu linux (lub narzędzi które komunikując się z jądrem) System operacyjny Linux, znany ze swojej elastyczności i stabilności, jest szeroko stosowany zarówno w systemach serwerowych, jak i osobistych. W centrum systemu Linux znajduje się jądro, które zarządza wszystkimi podstawowymi funkcjami systemu. W tym artykule omówimy 10 niezbędnych poleceń związanych z obsługą jądra w systemie Linux, które pomogą Ci monitorować, konfigurować i aktualizować jądro, a także zdiagnozować potencjalne problemy. Na początek szybki przegląd tych poleceń a potem szczegółowy opis każdego z nich wraz z przykładami użycia - Zapraszam. Poprzednie części: Część 1: Przydatne polecania dla każdego - Linux part 1 Część 2: Zarządzania pakietami apt, apt-get, apt-cache, aptitude, dpkg, rpm, yum, dnf, zypper - part 2 Część 3: Przydatne polecenia systemu Linux - part 3 (numactl, taskset, cgrups, schedtool) Szybka lista 10 poleceń 1. uname Polecenie 'uname' pozwala na wyświetlenie podstawowych informacji o jądrze systemu Linux. Można je wykorzystać do sprawdzenia wersji jądra, nazwy hosta, architektury sprzętowej i innych informacji. Przykład użycia: uname -a 2. dmesg Polecenie 'dmesg' pozwala na wyświetlenie komunikatów jądra, które mogą być przydatne podczas diagnozowania problemów z urządzeniami sprzętowymi czy sterownikami. Przykład użycia: dmesg | grep -i error 3. lsmod Polecenie 'lsmod' służy do wyświetlania listy aktualnie załadowanych modułów jądra. Moduły te odpowiadają za różne funkcje, takie jak obsługa sprzętu czy systemu plików. Przykład użycia: lsmod 4. modprobe Polecenie 'modprobe' umożliwia ładowanie i usuwanie modułów jądra. Jest to przydatne, gdy chcesz dodać nowe funkcje do systemu lub usunąć nieużywane moduły, aby zaoszczędzić zasoby. Przykład użycia: sudo modprobe -v sudo modprobe -r 5. modinfo Polecenie 'modinfo' pozwala na wyświetlenie informacji o modułach jądra, takich jak opis, parametry, zależności i autora. Przykład użycia: modinfo 6. sysctl Polecenie 'sysctl' służy do konfiguracji i odczytywania parametrów jądra systemu Linux. Pozwala to na zmianę ustawień systemowych w czasie rzeczywistym. Przykład użycia: sudo sysctl -a sudo sysctl -w = 7. lspci Polecenie 'lspci' umożliwia wyświetlanie informacji o urządzeniach PCI, takich jak karty graficzne, kontrolery sieciowe i kontrolery dźwięku. Przykład użycia: lspci -v 8. lsusb Polecenie 'lsusb' służy do wyświetlania informacji o podłączonych urządzeniach USB. Pozwala to na zidentyfikowanie urządzeń oraz ich producentów, co może być przydatne podczas diagnozowania problemów. Przykład użycia: lsusb lsusb -v 9. vmstat Polecenie 'vmstat' pozwala na monitorowanie wydajności jądra, w tym użycia procesora, pamięci RAM, dysku twardego i innych zasobów systemowych. Przykład użycia: vmstat vmstat 1 10 10. kexec Polecenie 'kexec' umożliwia szybkie przeładowanie jądra systemu Linux bez konieczności przechodzenia przez cały proces uruchamiania. Jest to przydatne, gdy chcesz szybko zaktualizować jądro lub przetestować nową wersję. Przykład użycia: sudo kexec -l /boot/vmlinuz- --initrd=/boot/initrd.img- --command-line="$(cat /proc/cmdline)" sudo kexec -e Od ogółu do szczegółu - polecenia linux. 1. uname Polecenie uname w systemie Linux to niezwykle pomocne narzędzie służące do wyświetlania informacji o systemie, takich jak wersja jądra, nazwa hosta, architektura sprzętowa oraz inne. W tym artykule przyjrzymy się temu poleceniu w szczegółach, omówimy dostępne przełączniki oraz pokażemy różne przykłady użycia. Czym jest polecenie uname? Polecenie uname (skrót od unix name) to standardowe narzędzie dostępne w systemach Unix i Unix-podobnych, takich jak Linux. Umożliwia ono wyświetlanie informacji na temat jądra systemu operacyjnego oraz sprzętu komputera. W praktyce jest często wykorzystywane do szybkiego sprawdzenia informacji o systemie podczas rozwiązywania problemów, diagnozowania awarii czy konfiguracji oprogramowania. Przełączniki polecenia uname Polecenie uname posiada kilka przełączników, które umożliwiają precyzyjne wyświetlanie informacji na temat systemu. Oto lista najważniejszych przełączników oraz ich funkcje: -a lub --all: Wyświetla wszystkie dostępne informacje na temat systemu, takie jak nazwa hosta, wersja jądra, architektura sprzętowa, nazwa systemu operacyjnego, itp. -s lub --kernel-name: Wyświetla nazwę jądra systemu operacyjnego. -n lub --nodename: Wyświetla nazwę hosta (nazwę sieciową) komputera. -r lub --kernel-release: Wyświetla wersję jądra systemu operacyjnego. -v lub --kernel-version: Wyświetla dodatkowe informacje na temat wersji jądra, takie jak data kompilacji czy opis. -m lub --machine: Wyświetla informacje na temat architektury sprzętowej komputera. -p lub --processor: Wyświetla informacje na temat procesora. W przypadku niektórych systemów może być tożsame z wynikiem przełącznika -m. -i lub --hardware-platform: Wyświetla informacje na temat platformy sprzętowej komputera. W przypadku niektórych systemów może być tożsame z wynikiem przełącznika -m. -o lub --operating-system: Wyświetla nazwę systemu operacyjnego. Przykłady użycia polecenia uname Teraz, gdy znamy dostępne przełączniki, możemy przejść do omówienia różnych przykładów użycia polecenia uname. Wyświetlanie wszystkich informacji na temat systemu: uname -a To polecenie wyświetli wszystkie dostępne informacje na temat systemu, takie jak nazwa hosta, wersja jądra, architektura sprzętowa, nazwa systemu operacyjnego, itp. Wynik może wyglądać mniej więcej tak: Linux myhostname 5.4.0-73-generic #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux Wyświetlanie wersji jądra: uname -r To polecenie wyświetli tylko wersję jądra systemu operacyjnego, np.: 5.4.0-73-generic Wyświetlanie nazwy hosta: uname -n To polecenie wyświetli nazwę hosta (nazwę sieciową) komputera, np.: myhostname Wyświetlanie architektury sprzętowej: uname -m To polecenie wyświetli informacje na temat architektury sprzętowej komputera, np.: x86_64 Wyświetlanie informacji na temat procesora: uname -p To polecenie wyświetli informacje na temat procesora. W przypadku niektórych systemów może być tożsame z wynikiem przełącznika -m. Wynik może wyglądać tak: x86_64 Wyświetlanie informacji na temat platformy sprzętowej: uname -i To polecenie wyświetli informacje na temat platformy sprzętowej komputera. W przypadku niektórych systemów może być tożsame z wynikiem przełącznika -m. Wynik może wyglądać tak: x86_64 Wyświetlanie nazwy systemu operacyjnego: uname -o To polecenie wyświetli nazwę systemu operacyjnego, np.: GNU/Linux Zastosowanie polecenia uname w praktyce W praktyce polecenie uname jest często używane do szybkiego sprawdzenia informacji o systemie podczas rozwiązywania problemów, diagnozowania awarii czy konfiguracji oprogramowania. Na przykład, jeśli będziesz musiał zainstalować sterowniki dla swojego sprzętu, możesz użyć polecenia uname, aby sprawdzić, jaka jest architektura sprzętowa komputera. Następnie możesz pobrać odpowiednią wersję sterowników dla swojego systemu. Polecenie uname jest także użyteczne podczas diagnozowania problemów z jądrem systemu. Jeśli wystąpią problemy związane z jądrem, być może będziesz musiał zaktualizować lub zainstalować nowszą wersję. W takim przypadku polecenie uname pozwoli Ci sprawdzić aktualną wersję jądra, co ułatwi wybór właściwej wersji do aktualizacji. Dodatkowo, polecenie uname może być użyte w skryptach lub automatyzacji. Możesz na przykład stworzyć skrypt, który będzie zbierał informacje na temat różnych systemów w sieci i tworzył raport na podstawie tych informacji. Polecenie uname jest więc nie tylko przydatne dla administratorów systemu, ale także dla programistów i innych osób pracujących z systemami Linux. Polecenie uname w systemie Linux to niezwykle pomocne narzędzie do wyświetlania informacji o systemie, takich jak wersja jądra, nazwa hosta, architektura sprzętowa oraz inne. Dzięki różnym przełącznikom możemy precyzyjnie wyświetlić tylko te informacje, które są nam w danym momencie potrzebne. Polecenie uname jest często wykorzystywane podczas rozwiązywania problemów, diagnozowania awarii czy konfiguracji oprogramowania. Mając świadomość wszystkich możliwości polecenia uname, będziesz mógł efektywniej korzystać z systemów Linux i lepiej zarządzać swoimi maszynami. Warto poświęcić czas na naukę tego polecenia, gdyż jest to jedno z podstawowych narzędzi, które każdy użytkownik systemu Linux powinien znać. 2. dmesg Polecenie dmesg (diagnostic message) w systemie Linux jest kluczowym narzędziem do analizy dzienników jądra, które ułatwia rozwiązywanie problemów i diagnozowanie potencjalnych zagrożeń. W tym artykule przyjrzymy się temu poleceniu w szczegółach, omówimy dostępne przełączniki oraz pokażemy różne przykłady użycia. Czym jest polecenie dmesg? Polecenie dmesg służy do wyświetlania i analizowania dzienników jądra systemu Linux. Jądro systemu operacyjnego generuje dzienniki, które zawierają informacje na temat działania sprzętu, sterowników, systemu plików oraz innych komponentów. Polecenie dmesg umożliwia dostęp do tych informacji, co pomaga administratorom i programistom w diagnozowaniu problemów i monitorowaniu działania systemu. Przełączniki polecenia dmesg Polecenie dmesg posiada wiele przełączników, które umożliwiają filtrowanie i formatowanie wyjścia, co pozwala na łatwiejsze analizowanie dzienników jądra. Oto lista najważniejszych przełączników oraz ich funkcje: -C lub --clear: Czyści bufor dzienników jądra. -c lub --read-clear: Wyświetla bufor dzienników jądra, a następnie czyści go. -D lub --console-off: Wyłącza kierowanie wiadomości jądra do konsoli. -d lub --show-delta: Wyświetla informacje o czasie trwania pomiędzy kolejnymi wiadomościami dzienników jądra. -E lub --console-on: Włącza kierowanie wiadomości jądra do konsoli. -F lub --file: Czyta dzienniki jądra z określonego pliku zamiast z bufora jądra. -H lub --human: Wyświetla wyjście w czytelnym dla człowieka formacie. -k lub --kernel: Wyświetla tylko wiadomości związane z jądrem systemu. -L lub --color=always: Używa kolorów do podkreślenia różnych poziomów ważności wiadomości. -n lub --console-level: Ustawia poziom ważności wiadomości, które mają być kierowane do konsoli. -P lub --nopager: Nie używa stronicowania wyjścia (np. less). -p lub --facility: Filtruje wiadomości według określonego poziomu ważności (facility). -r lub --raw: Wyświetla surowe dane dzienników jądra, bez dodatkowego formatowania. -S lub --syslog: Wyświetla tylko wiadomości związane z systemem. -T lub --ctime: Wyświetla czas wystąpienia wiadomości w czytelnym formacie. -t lub --notime: Nie wyświetla czasu wystąpienia wiadomości. -u lub --userspace: Wyświetla tylko wiadomości związane z przestrzenią użytkownika. -W lub --follow: Aktualizuje wyświetlane wiadomości na bieżąco, podobnie jak polecenie tail -f. -w lub --decode: Próbuje zdekodować wiadomości zawierające wartości szesnastkowe. -x lub --hex: Wyświetla dane w formacie szesnastkowym. -l lub --level: Filtruje wiadomości na podstawie poziomu ważności (level). Przykłady użycia polecenia dmesg Teraz, gdy znamy dostępne przełączniki, możemy przejść do omówienia różnych przykładów użycia polecenia dmesg. Wyświetlanie wszystkich wiadomości dzienników jądra: dmesg To polecenie wyświetli wszystkie wiadomości z bufora dzienników jądra. Wynik może być bardzo długi, dlatego warto użyć stronicowania, np.: dmesg | less Wyświetlanie tylko wiadomości związanych z jądrem systemu: dmesg -k To polecenie wyświetli tylko wiadomości związane z jądrem systemu, co pozwoli na łatwiejsze zidentyfikowanie problemów związanych z jądrem. Wyświetlanie wiadomości z ostatnich 10 sekund: dmesg --since "10 seconds ago" To polecenie pozwala na wyświetlenie wiadomości, które pojawiły się w ciągu ostatnich 10 sekund, co ułatwia monitorowanie bieżących zdarzeń w systemie. Wyszukiwanie konkretnych wiadomości: dmesg | grep "usb" To polecenie pozwala na wyszukanie wiadomości zawierających frazę "usb", co może być przydatne przy rozwiązywaniu problemów związanych z urządzeniami USB. Wyświetlanie wiadomości w czytelnym dla człowieka formacie: dmesg -H To polecenie ułatwia odczytanie wyjścia dzięki dodatkowemu formatowaniu i użyciu kolorów. Zastosowanie polecenia dmesg w praktyce W praktyce polecenie dmesg jest często używane do diagnozowania problemów sprzętowych i systemowych, zarówno przez administratorów systemów, jak i programistów. Na przykład, jeśli użytkownik napotka problem z dyskiem twardym, może użyć polecenia dmesg, aby zidentyfikować błędy związane z kontrolerem dysku lub samym dyskiem. Podobnie, jeśli wystąpią problemy z kartą sieciową, polecenie dmesg może dostarczyć informacji na temat błędów sterownika lub konfiguracji karty sieciowej. Dodatkowo, polecenie dmesg jest użyteczne podczas analizy zagrożeń bezpieczeństwa. Jeśli system jest narażony na atak, dmesg może zawierać informacje na temat prób dostępu do zasobów systemowych, błędów związanych z autoryzacją czy dziwnego zachowania jądra. Dzięki temu administratorzy mogą szybko zidentyfikować i zabezpieczyć system przed potencjalnymi zagrożeniami. Polecenie dmesg może być także wykorzystywane w automatyzacji i skryptach. Można na przykład stworzyć skrypt, który monitoruje bieżące wiadomości jądra i wysyła powiadomienia e-mail, gdy wystąpią określone zdarzenia lub błędy. W ten sposób administratorzy mogą być na bieżąco z sytuacją w systemie i szybko reagować na ewentualne problemy. Przykładowy skrypt Aby stworzyć skrypt analizujący logi z polecenia dmesg i wysyłający powiadomienia na kanał Slack, należy wykonać następujące kroki: Utwórz plik o nazwie disk_monitor.sh i nadaj mu uprawnienia do wykonywania: touch disk_monitor.sh chmod +x disk_monitor.sh Otwórz plik disk_monitor.sh w edytorze tekstowym, a następnie wklej poniższy kod: #!/bin/bash # Zmień wartość na swój webhook URL Slacka SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZ" # Definiujemy funkcję wysyłającą powiadomienia na Slackafunction send_to_slack() { local message="$1" curl -s -X POST --data-urlencode "payload={\"text\": \"${message}\"}" "${SLACK_WEBHOOK_URL}" } # Wyszukujemy niepokojące informacje w logach dmesg DMESG_OUTPUT=$(dmesg | grep -iE "I/O error|bad block|EXT4-fs error|device-mapper") if [ -n "$DMESG_OUTPUT" ]; then MESSAGE=":warning: Znaleziono niepokojące informacje dotyczące dysku:\n\`\`\`${DMESG_OUTPUT}\`\`\`" send_to_slack "${MESSAGE}" else echo "Wszystko w porządku, nie znaleziono niepokojących informacji." fi Zastąp wartość SLACK_WEBHOOK_URL swoim adresem webhooka dla kanału Slack. Aby utworzyć webhooka, postępuj zgodnie z instrukcjami Slacka. Uruchom skrypt, aby sprawdzić jego działanie: ./disk_monitor.sh Skrypt analizuje logi dmesg, szukając fraz takich jak "I/O error", "bad block", "EXT4-fs error" oraz "device-mapper", które mogą świadczyć o problemach z dyskiem. Jeśli skrypt znajdzie takie informacje, wyśle powiadomienie na kanał Slack z wykorzystaniem webhooka. Aby uruchamiać skrypt automatycznie, możesz dodać go do crontaba, co pozwoli na cykliczne wykonywanie skryptu w określonym interwale czasowym. Na przykład, jeśli chcesz uruchamiać skrypt co godzinę, dodaj następującą linię do crontaba (uruchom crontab -e): 0 * * * * /ścieżka/do/skryptu/disk_monitor.sh Pamiętaj, aby zastąpić /ścieżka/do/skryptu/ rzeczywistą ścieżką do pliku disk_monitor.sh. Teraz, gdy skrypt jest gotowy i zaplanowany do cyklicznego wykonywania, warto poznać inne funkcje, które możemy dodać lub zmodyfikować, aby jeszcze lepiej monitorować dyski w systemie. Monitorowanie wielu fraz: W aktualnym skrypcie wyszukujemy tylko kilka fraz, które mogą świadczyć o problemach z dyskiem. Jeśli chcesz monitorować więcej fraz, możesz dodać je do wyrażenia regularnego w funkcji grep: DMESG_OUTPUT=$(dmesg | grep -iE "I/O error|bad block|EXT4-fs error|device-mapper|nowa_fraza1|nowa_fraza2") Monitorowanie specyficznych dysków: Jeśli chcesz monitorować tylko konkretne dyski, możesz dodać nazwę dysku do wyrażenia regularnego: DMESG_OUTPUT=$(dmesg | grep -iE "sda.*(I/O error|bad block|EXT4-fs error|device-mapper)") W powyższym przykładzie skrypt będzie monitorował tylko dysk o nazwie "sda". Aby monitorować więcej dysków, dodaj ich nazwy do wyrażenia regularnego. Zwiększenie częstotliwości monitorowania: W przypadku gdy chcesz monitorować logi dmesg częściej niż co godzinę, możesz zmienić wpis w crontabie. Na przykład, jeśli chcesz uruchamiać skrypt co 15 minut, wprowadź następującą zmianę: */15 * * * * /ścieżka/do/skryptu/disk_monitor.sh Podsumowując, skrypt disk_monitor.sh jest prostym, lecz użytecznym narzędziem do monitorowania logów dmesg w celu wykrycia problemów z dyskami. Dzięki temu, że wysyła powiadomienia na kanał Slack, administratorzy mogą szybko reagować na potencjalne zagrożenia i awarie. Poprzez dalsze modyfikacje skryptu, możemy dostosować go do własnych potrzeb i monitorować różne aspekty działania dysków w systemie Linux. Polecenie dmesg w systemie Linux to potężne narzędzie służące do analizy dzienników jądra. Pozwala na szybkie zidentyfikowanie problemów sprzętowych, systemowych oraz potencjalnych zagrożeń. Dzięki wielu przełącznikom można dostosować wyjście polecenia do własnych potrzeb, co ułatwia analizę i monitorowanie systemu. Znajomość polecenia dmesg i jego zastosowań jest niezbędna dla każdego administratora systemu Linux, a także dla programistów i innych osób pracujących z systemami opartymi na jądrze Linux. Dlatego warto poświęcić czas na naukę tego polecenia i na praktykowanie różnych przypadków użycia, aby opanować jego możliwości i skutecznie zarządzać systemem Linux. 3. lsmod W świecie Linuksa, wiedza na temat poleceń terminala jest kluczowa dla efektywnego zarządzania systemem. Jednym z takich poleceń jest lsmod, które jest często używane przez administratorów systemów, programistów i pasjonatów Linuksa. W tym artykule przyjrzymy się bliżej poleceniu lsmod, jego przełącznikom oraz kilku praktycznym przykładom użycia tego narzędzia. Co to jest polecenie lsmod? Polecenie lsmod to narzędzie służące do wyświetlania informacji na temat załadowanych modułów jądra systemu Linux. Moduły te, znane również jako sterowniki, są odpowiedzialne za zarządzanie różnymi podzespołami sprzętowymi, jak karty graficzne, sieciowe, dźwiękowe itp. Dzięki modułom jądra system operacyjny może pracować z różnymi urządzeniami. Przełączniki polecenia lsmod Polecenie lsmod jest narzędziem o prostym interfejsie, bez dodatkowych przełączników. Wystarczy wpisać lsmod w terminalu i otrzymać listę załadowanych modułów. Oto składnia polecenia: lsmod Polecenie lsmod nie ma żadnych dodatkowych przełączników, ponieważ jego głównym celem jest prostota. Jeśli chcesz uzyskać więcej informacji o modułach, możesz skorzystać z innych poleceń, takich jak modinfo, które dostarczy szczegółowych informacji na temat danego modułu. Jak używać polecenia lsmod? Oto kilka praktycznych przykładów, jak możemy użyć polecenia lsmod w systemie Linux: a) Wyświetlanie listy załadowanych modułów Aby wyświetlić listę załadowanych modułów, wystarczy wpisać lsmod w terminalu: $ lsmod W wyniku otrzymasz listę załadowanych modułów jądra wraz z ich rozmiarami i liczbą zależności. b) Wyszukiwanie konkretnego modułu Jeśli chcesz sprawdzić, czy określony moduł jądra został załadowany, możesz użyć polecenia grep w połączeniu z lsmod: $ lsmod | grep nazwa_modulu Na przykład, aby sprawdzić, czy moduł snd_hda_intel jest załadowany, wpisz: $ lsmod | grep snd_hda_intel Jeśli moduł jest załadowany, polecenie zwróci informacje na jego temat. W przeciwnym razie nie otrzymasz żadnych wyników. c) Sortowanie listy modułów według rozmiaru Jeśli chcesz posortować załadowane moduły według rozmiaru, możesz skorzystać z poleceń sort i awk: $ lsmod | awk 'NR>1 {print $0}' | sort -k2 -n -r Wynik przedstawi listę modułów posortowaną malejąco według rozmiaru. Możesz również zmienić kolejność sortowania na rosnącą, usuwając -r z polecenia: $ lsmod | awk 'NR>1 {print $0}' | sort -k2 -n d) Wyświetlanie liczby załadowanych modułów Aby zobaczyć, ile modułów jest obecnie załadowanych, można połączyć polecenie lsmod z wc: $ lsmod | wc -l Pamiętaj, że wynik zawiera również nagłówek, więc aby uzyskać rzeczywistą liczbę załadowanych modułów, odejmij 1 od wyświetlonej wartości. Inne powiązane polecenia Jak wspomniano wcześniej, lsmod jest używane w połączeniu z innymi narzędziami, takimi jak modinfo, modprobe, insmod i rmmod, aby uzyskać więcej informacji i zarządzać modułami jądra. modinfo: wyświetla szczegółowe informacje na temat modułu jądra, takie jak autor, wersja, opis, parametry itp. Składnia to modinfo nazwa_modulu. modprobe: automatycznie ładuje i rozwiązuje zależności modułów jądra. Polecenie to jest używane do ładowania, usuwania i konfigurowania modułów. insmod: ładuje moduł jądra bezpośrednio, bez rozwiązywania zależności. Zazwyczaj modprobe jest preferowane, ale insmod może być używane w przypadku, gdy musisz załadować moduł, który nie ma zależności. rmmod: usuwa moduł jądra, o ile nie ma innych modułów, które go wymagają. Jeśli chcesz usunąć moduł z zależnościami, użyj modprobe -r. Mimo że lsmod nie ma dodatkowych przełączników, jego prostota sprawia, że jest niezwykle użytecznym narzędziem do monitorowania i diagnozowania modułów jądra w systemie Linux. Dzięki połączeniu z innymi powiązanymi narzędziami, takimi jak modinfo, modprobe, insmod i rmmod, można uzyskać pełną kontrolę nad modułami jądra oraz zarządzać nimi efektywnie. Pamiętaj, że praca z modułami jądra może wpływać na stabilność i wydajność systemu, dlatego zawsze zachowuj ostrożność i dokładnie sprawdzaj, co robisz, zwłaszcza gdy działasz jako użytkownik root. W przypadku wątpliwości warto skonsultować się z dokumentacją systemu lub poszukać pomocy wśród społeczności Linuksa. W praktyce, polecenie lsmod jest często używane przez administratorów systemów i programistów do rozwiązywania problemów związanych z kompatybilnością sprzętu, identyfikowania modułów powodujących problemy, a także do analizy wydajności systemu. Nawet jeśli nie jesteś ekspertem, znajomość tego narzędzia może być cenna w sytuacjach, gdy musisz rozwiązać problemy ze sterownikami lub konfiguracją sprzętu w systemie Linux. Miejmy nadzieję, że ten artykuł pomógł Ci zrozumieć, co to jest polecenie lsmod, jak z niego korzystać oraz jakie są jego praktyczne zastosowania. W miarę jak będziesz coraz bardziej zaznajamiać się z różnymi aspektami systemu Linux, z pewnością docenisz siłę i elastyczność, jaką oferują te narzędzia. Teraz, gdy znasz polecenie lsmod, jesteś gotowy, aby kontynuować swoją przygodę z systemem Linux i odkrywać kolejne potężne narzędzia i techniki. 4. modprobe W systemie operacyjnym Linux, moduły jądra są niezbędne do zarządzania sprzętem i funkcjami systemu. Moduły jądra pozwalają na dynamiczne dodawanie i usuwanie funkcjonalności jądra, co sprawia, że system staje się bardziej elastyczny i łatwiejszy w utrzymaniu. Polecenie modprobe jest jednym z narzędzi pozwalających zarządzać modułami jądra. W niniejszym artykule omówimy działanie polecenia modprobe, jego przełączniki oraz przykłady zastosowań. Co to jest modprobe? Polecenie modprobe służy do dodawania i usuwania modułów jądra oraz ich zależności w systemie Linux. modprobe może automatycznie rozwiązywać zależności między modułami, co oznacza, że podczas ładowania modułu, wszystkie wymagane inne moduły zostaną również załadowane. Główne przełączniki polecenia modprobe modprobe posiada wiele przełączników, które pozwalają na kontrolowanie jego działania. Oto niektóre z nich: -a, --all: ładowanie wielu modułów jednocześnie; -c, --showconfig: wyświetlanie konfiguracji modprobe; -d, --dirname: ustawianie katalogu z modułami; -f, --force: wymuszanie operacji na modułach pomimo błędów; -l, --list: wyświetlanie listy modułów; -r, --remove: usuwanie modułów; -v, --verbose: wyświetlanie szczegółowych informacji. Przykłady zastosowań modprobe a) Ładowanie modułu Aby załadować moduł jądra, wystarczy użyć polecenia modprobe z nazwą modułu jako argumentem. Na przykład, aby załadować moduł nf_conntrack, wpisz: sudo modprobe nf_conntrack modprobe automatycznie załaduje wszystkie wymagane zależności modułu. b) Usuwanie modułu Aby usunąć załadowany moduł, użyj przełącznika -r lub --remove. Na przykład, aby usunąć moduł nf_conntrack, wpisz: sudo modprobe -r nf_conntrack Jeśli moduł posiada zależności, będą one również usunięte, o ile nie są używane przez inne moduły. c) Wyświetlanie informacji o modułach Aby uzyskać listę dostępnych modułów jądra, użyj przełącznika -l lub --list. Na przykład: modprobe -l Aby wyświetlić informacje o konfiguracji modprobe, użyj przełącznika -c lub --showconfig. Na przykład: modprobe -c d) Wymuszanie operacji na modułach Czasami może być konieczne wymuszenie operacji na modułach, nawet jeśli wystąpią błędy lub konflikty. Aby to zrobić, użyj przełącznika -f lub --force. Przykładowo, aby wymusić załadowanie modułu nf_conntrack pomimo ewentualnych błędów, wpisz: sudo modprobe -f nf_conntrack Uwaga: Używanie przełącznika -f może prowadzić do niestabilności systemu. Używaj go ostrożnie i tylko wtedy, gdy jest to absolutnie konieczne. e) Ładowanie wielu modułów jednocześnie Aby załadować wiele modułów naraz, użyj przełącznika -a lub --all. Na przykład, aby załadować moduły nf_conntrack i nf_nat, wpisz: sudo modprobe -a nf_conntrack nf_nat Dodawanie modułów do autostartu W niektórych przypadkach może być konieczne, aby moduł był załadowany automatycznie podczas uruchamiania systemu. Aby to zrobić, dodaj nazwę modułu do pliku /etc/modules lub, w przypadku niektórych dystrybucji, /etc/modules-load.d. Na przykład, aby załadować moduł nf_conntrack podczas uruchamiania systemu, otwórz plik /etc/modules za pomocą dowolnego edytora tekstowego: sudo nano /etc/modules Dodaj nazwę modułu nf_conntrack do pliku i zapisz zmiany. Polecenie modprobe jest niezbędnym narzędziem do zarządzania modułami jądra w systemie Linux. Dzięki niemu możemy łatwo załadować, usunąć i wyświetlać informacje o modułach oraz ich zależności. W niniejszym artykule omówiliśmy podstawowe przełączniki i zastosowania polecenia modprobe, które pozwolą na efektywne zarządzanie modułami jądra w systemie Linux. 5. modinfo Systemy operacyjne z rodziny Linux są znane z szerokiej gamy poleceń, które ułatwiają zarządzanie systemem i jego komponentami. Jednym z takich poleceń jest modinfo, które pozwala na uzyskanie informacji na temat modułów jądra. W tym artykule przyjrzymy się poleceniu modinfo, jego przełącznikom oraz przykładom zastosowania tego polecenia. Czym jest modinfo? Polecenie modinfo jest narzędziem dostarczanym przez pakiet 'module-init-tools' w systemach Linux. Jego głównym zadaniem jest wyświetlanie informacji na temat modułów jądra systemu Linux, takich jak wersja, autor, opis, parametry oraz zależności między modułami. Modinfo jest szczególnie przydatne dla administratorów systemów oraz programistów, którzy pracują z modułami jądra. Składnia polecenia modinfo Polecenie modinfo ma następującą składnię: modinfo [opcje] moduł Gdzie 'opcje' to przełączniki polecenia, a 'moduł' to nazwa modułu, którego informacje chcemy wyświetlić. Przełączniki polecenia modinfo Polecenie modinfo posiada kilka przełączników, które pozwalają na zmianę jego zachowania oraz sposobu prezentacji informacji. Oto niektóre z nich: -a, --author: Wyświetla autora modułu. -d, --description: Wyświetla opis modułu. -F, --field: Wyświetla wartość określonego pola. -l, --list: Wyświetla listę modułów. -p, --parameters: Wyświetla parametry modułu. -V, --version: Wyświetla wersję polecenia modinfo. Przykłady zastosowania polecenia modinfo Wyświetlanie informacji o module: Aby wyświetlić informacje na temat konkretnego modułu, wystarczy podać jego nazwę jako argument polecenia modinfo. Na przykład, aby uzyskać informacje na temat modułu 'e1000', wykonaj następujące polecenie: modinfo e1000 W wyniku otrzymasz informacje na temat modułu, takie jak: ścieżkę, wersję, autora, opis, licencję, parametry, zależności i inne. Wyświetlanie autora modułu: Jeśli chcesz poznać tylko autora danego modułu, użyj przełącznika '-a' lub '--author'. Na przykład: modinfo -a e1000 Wyświetlanie opisu modułu: Aby wyświetlić opis modułu, użyj przełącznika '-d' lub '--description'. Na przykład: modinfo -d e1000 Wyświetlanie wartości określonego pola: Jeśli chcesz wyświetlić wartość określonego pola dla modułu, użyj przełącznika '-F' lub '--field'. Na przykład, aby wyświetlić licencję modułu 'e1000', wykonaj następujące polecenie: modinfo -F license e1000 Wyświetlanie parametrów modułu: Aby wyświetlić dostępne parametry dla modułu, użyj przełącznika '-p' lub '--parameters'. Na przykład: modinfo -p e1000 Wyświetlanie listy modułów: Aby wyświetlić listę wszystkich dostępnych modułów, użyj przełącznika '-l' lub '--list'. Ten przełącznik działa tylko w połączeniu z opcją '--all'. Na przykład: modinfo --all --list Wyświetlanie wersji polecenia modinfo: Aby sprawdzić wersję polecenia modinfo, użyj przełącznika '-V' lub '--version': modinfo --version Polecenie modinfo jest niezwykle przydatnym narzędziem w systemach Linux, które pozwala uzyskać informacje na temat modułów jądra. Jego różnorodne przełączniki umożliwiają dostosowanie wyjścia do potrzeb użytkownika oraz uzyskanie tylko tych informacji, które są faktycznie potrzebne. Modinfo jest niezbędnym narzędziem dla administratorów systemów oraz programistów pracujących z modułami jądra Linux. W tym artykule przedstawiliśmy polecenie modinfo, jego przełączniki oraz przykłady zastosowania tego polecenia. Dzięki tym informacjom powinieneś być teraz bardziej kompetentny w zarządzaniu modułami jądra w systemie Linux oraz lepiej zrozumieć ich funkcjonowanie. Polecenie modinfo to tylko jeden z wielu potężnych poleceń dostępnych w systemach Linux, które razem tworzą elastyczne i wydajne narzędzia zarządzania systemem. 6. sysctl Polecenie sysctl to potężne narzędzie, które pozwala administratorom systemów Linux kontrolować i konfigurować wiele parametrów jądra w czasie rzeczywistym. W tym artykule szczegółowo omówimy to polecenie, jego zastosowanie, wszystkie dostępne przełączniki oraz jak jest ono powiązane z jądrem systemu Linux. Czym jest polecenie sysctl i jakie ma zastosowania Czym jest polecenie sysctl Polecenie sysctl to narzędzie używane w systemach Linux, które pozwala na odczyt i modyfikację parametrów jądra na bieżąco. Obejmuje to zarówno wartości konfiguracyjne, jak i statystyki systemowe. Polecenie sysctl działa, komunikując się z jądrem za pomocą interfejsu sysctl, który jest dostępny w katalogu /proc/sys. W rzeczywistości sysctl to jedynie interfejs między użytkownikiem a plikami w /proc/sys. Zastosowania polecenia sysctl Polecenie sysctl ma wiele zastosowań. Oto niektóre z nich: Optymalizacja wydajności systemu: sysctl pozwala na dostosowanie wielu parametrów związanych z zarządzaniem pamięcią, buforowaniem, planistą procesów i innymi funkcjami systemu Linux. Dzięki temu administratorzy mogą dostosować system do swoich potrzeb, zmniejszając opóźnienia i zwiększając wydajność. Bezpieczeństwo systemu: sysctl może być używane do zabezpieczania systemu przed różnymi zagrożeniami, takimi jak ataki DDoS, ataki SYN flood czy usługi odmowy dostępu. Można to osiągnąć, regulując limity połączeń, parametry sieciowe i inne ustawienia. Diagnostyka i rozwiązywanie problemów: sysctl pozwala na monitorowanie różnych parametrów systemowych, co może być przydatne w przypadku diagnozowania i rozwiązywania problemów związanych z wydajnością, siecią czy innymi funkcjami systemu. Przełączniki polecenia sysctl i ich zastosowanie Przełączniki polecenia sysctl Polecenie sysctl oferuje wiele przełączników, które pozwalają na różnorodne operacje. Oto najważniejsze z nich: -a lub --all: Wyświetla wszystkie dostępne parametry jądra. -A lub --values: Wyświetla wszystkie dostępne parametry jądra wraz z ich wartościami. -e lub --ignore: Ignoruje błędy związane z nieistniejącymi parametrami jądra -f lub --load: Ładuje ustawienia z pliku konfiguracyjnego. -N lub --names: Wyświetla tylko nazwy parametrów jądra bez ich wartości. -n lub --values-only: Wyświetla tylko wartości parametrów jądra, bez ich nazw. -p lub --pattern: Wyszukuje parametry jądra, które pasują do podanego wzorca. -q lub --quiet: Wykonuje polecenie w trybie cichym, nie wyświetlając żadnych informacji. -w lub --write: Zapisuje zmiany do jądra. Przykłady zastosowania przełączników polecenia sysctl Oto kilka przykładów, jak można użyć przełączników polecenia sysctl w praktyce: Wyświetlanie wszystkich dostępnych parametrów jądra: sysctl -a Wyświetlanie parametrów jądra związanych z siecią: sysctl -a | grep net Zmiana wartości parametru jądra (np. liczby otwartych plików): sysctl -w fs.file-max=100000 Ładowanie ustawień z pliku konfiguracyjnego: sysctl -f /etc/sysctl.conf Wyszukiwanie parametrów jądra pasujących do wzorca (np. wszystkich związanych z IPv4): sysctl -a -p 'net.ipv4.*' Powiązanie polecenia sysctl z jądrem systemu Linux Jak polecenie sysctl komunikuje się z jądrem Polecenie sysctl komunikuje się z jądrem systemu Linux za pomocą interfejsu sysctl, który jest dostępny w katalogu /proc/sys. Ten katalog zawiera pliki tekstowe reprezentujące różne parametry jądra. Polecenie sysctl odczytuje lub zmienia wartości tych plików, co wpływa na bieżącą konfigurację jądra. Zmiany w czasie rzeczywistym Jedną z kluczowych cech polecenia sysctl jest możliwość wprowadzania zmian w parametrach jądra w czasie rzeczywistym, bez konieczności restartowania systemu. Dzięki temu administratorzy mogą szybko dostosować system do swoich potrzeb i reagować na zmieniające się warunki. Trwałe zmiany konfiguracji Aby wprowadzić trwałe zmiany w konfiguracji sysctl, należy je zapisać w pliku konfiguracyjnym, zwykle /etc/sysctl.conf lub innym pliku w katalogu /etc/sysctl.d. Wtedy, po restarcie systemu, polecenie sysctl wczyta te ustawienia i zastosuje je. Przedstawiliśmy różne zastosowania tego polecenia, takie jak optymalizacja wydajności systemu, zwiększenie bezpieczeństwa czy diagnozowanie i rozwiązywanie problemów. Przyjrzeliśmy się także dostępnym przełącznikom polecenia sysctl oraz omówiliśmy przykłady ich zastosowania. Następnie wyjaśniliśmy, jak polecenie sysctl jest powiązane z jądrem systemu Linux. Polecenie sysctl komunikuje się z jądrem za pomocą interfejsu sysctl dostępnego w katalogu /proc/sys. Dzięki temu poleceniu możliwe jest wprowadzanie zmian w parametrach jądra w czasie rzeczywistym, bez konieczności restartowania systemu. Wreszcie omówiliśmy, jak wprowadzać trwałe zmiany w konfiguracji sysctl za pomocą plików konfiguracyjnych. Mając te informacje, administratorzy systemów Linux będą mogli wykorzystać polecenie sysctl, aby zoptymalizować wydajność, zwiększyć bezpieczeństwo i lepiej diagnozować problemy w swoich systemach. Polecenie sysctl to niezbędne narzędzie dla każdego administratora systemu Linux, które pozwala na efektywną kontrolę i zarządzanie jądrem systemu. 7. lspci Polecenie lspci to potężne narzędzie dostępne w większości dystrybucji systemu Linux, służące do wyświetlania informacji o urządzeniach PCI podłączonych do systemu. PCI (Peripheral Component Interconnect) to standard komunikacji między urządzeniami wewnętrznymi komputera, takimi jak karty graficzne, kontrolery dźwięku czy karty sieciowe. W tym artykule przyjrzymy się bliżej poleceniu lspci, jak je używać, jakie przełączniki są dostępne oraz jak te przełączniki można wykorzystać w różnych przypadkach. Zapoznamy się również z kilkoma praktycznymi przykładami użycia lspci wraz z przełącznikami. Podstawowe użycie polecenia lspci Polecenie lspci może być używane bez żadnych przełączników, aby uzyskać podstawowe informacje na temat urządzeń PCI w systemie. Wystarczy wpisać lspci w terminalu i nacisnąć Enter: $ lspci Wynik polecenia zawiera listę urządzeń PCI, ich identyfikatory, nazwy oraz numery slotów. Na przykład: 00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI #1 (rev 21) Przełączniki polecenia lspci lspci oferuje wiele przełączników, które pozwalają na wyświetlanie dodatkowych informacji oraz filtrowanie wyników. Poniżej znajduje się lista najbardziej przydatnych przełączników: -n: Wyświetla identyfikatory numeryczne urządzeń i producentów zamiast nazw. -k: Pokazuje jądro sterownika używane dla każdego urządzenia. -t: Wyświetla wyniki w formie drzewa. -i: Ładuje informacje o urządzeniach z alternatywnego pliku (np. -i foo.txt). -v: Podaje szczegółowe informacje na temat urządzeń. -vv: Podaje jeszcze bardziej szczegółowe informacje na temat urządzeń. -vvv: Podaje najbardziej szczegółowe informacje na temat urządzeń. -s: Filtruje wyniki według slotu urządzenia (np. -s 00:02.0). -d: Filtruje wyniki według identyfikatora urządzenia (np. -d 8086:9d2f). Przykłady użycia polecenia lspci wraz z przełącznikami Aby lepiej zrozumieć, jak można wykorzystać różne przełączniki polecenia lspci, przyjrzyjmy się kilku praktycznym przykładom. Przykład 1: Wyświetlanie identyfikatorów numerycznych Aby wyświetlić identyfikatory numeryczne urządzeń i producentów zamiast nazw, użyj przełącznika -n: $ lspci -n Wynik może wyglądać tak: 00:00.0 0600: 8086:5914 (rev 07)00:02.0 0300: 8086:5917 (rev 07)00:14.0 0c03: 8086:9d2f (rev 21)00:16.0 0780: 8086:9d3a (rev 21) Przykład 2: Wyświetlanie sterowników jądra Aby sprawdzić, jakie sterowniki jądra są używane dla każdego urządzenia, użyj przełącznika -k: $ lspci -k Wynik może wyglądać tak: 00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)Subsystem: Lenovo Device 3801Kernel driver in use: skl_uncore00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)Subsystem: Lenovo Device 3801Kernel driver in use: i915Kernel modules: i915 Przykład 3: Wyświetlanie wyników w formie drzewa Aby wyświetlić wyniki w formie drzewa, użyj przełącznika -t: $ lspci -t Wynik może wyglądać tak: -[0000:00]-+-00.0 +-02.0 +-14.0 +-16.0 Przykład 4: Wyświetlanie szczegółowych informacji o urządzeniach Aby wyświetlić szczegółowe informacje na temat urządzeń, użyj przełącznika -v, -vv lub -vvv. Im więcej liter "v" użyjesz, tym więcej szczegółów uzyskasz: $ lspci -v Wynik może wyglądać tak: 00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)Subsystem: Lenovo Device 3801Flags: bus master, fast devsel, latency 0Capabilities: [e0] Vendor Specific Information: Len=10 Kernel driver in use: skl_uncore Przykład 5: Filtrowanie wyników według slot u urządzenia Aby wyświetlić informacje tylko o urządzeniu podłączonym do określonego slotu, użyj przełącznika -s: $ lspci -s 00:02.0 Wynik może wyglądać tak: makefileCopy code 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07) Przykład 6: Filtrowanie wyników według identyfikatora urządzenia Aby wyświetlić informacje tylko o urządzeniach z określonym identyfikatorem, użyj przełącznika -d: $ lspci -d 8086:9d2f Wynik może wyglądać tak: 00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21) Polecenie lspci jest niezwykle przydatnym narzędziem w środowisku Linux, które pozwala na szybkie i łatwe zdobycie informacji o urządzeniach PCI podłączonych do systemu. W artykule omówiliśmy podstawowe użycie lspci oraz różne przełączniki, które można wykorzystać do dostosowania wyników do potrzeb użytkownika. Dzięki tym przełącznikom, polecenie lspci umożliwia szybkie zidentyfikowanie urządzeń, sterowników jądra, a także szczegółowych informacji na temat każdego urządzenia. Zaprezentowane przykłady pokazują różnorodność zastosowań polecenia lspci i podkreślają jego przydatność dla administratorów systemów, programistów oraz użytkowników Linuxa. 8. lsusb Jednym z podstawowych narzędzi w systemie Linux, które pozwala na szybkie uzyskanie informacji o podłączonych urządzeniach USB, jest polecenie lsusb. Pozwala ono na wyświetlanie wszystkich urządzeń podłączonych do komputera za pośrednictwem portów USB. W tym artykule przedstawimy wszystkie przełączniki tego polecenia, a także pokażemy przykłady ich użycia. Podstawowe użycie lsusb: Polecenie lsusb bez żadnych przełączników wyświetla listę podłączonych urządzeń USB wraz z identyfikatorami producenta (vendor ID) i produktu (product ID). Przykład: $ lsusbBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching HubBus 001 Device 003: ID 046d:c534 Logitech, Inc. Unifying ReceiverBus 002 Device 003: ID 17ef:602e Lenovo ThinkPad Ultra Dock Przełącznik -v (verbose): Przełącznik -v pozwala na wyświetlenie szczegółowych informacji na temat każdego z podłączonych urządzeń USB. Przykład: rubyCopy code $ lsusb -v Przełącznik -s pozwala na wyświetlenie informacji tylko o wybranym urządzeniu. Przykład: $ lsusb -s 001:003Bus 001 Device 003: ID 046d:c534 Logitech, Inc. Unifying Receiver Przełącznik -d pozwala na wyświetlenie informacji o urządzeniach o określonym identyfikatorze producenta i produktu. Przykład: $ lsusb -d 046d:c534 Bus 001 Device 003: ID 046d:c534 Logitech, Inc. Unifying Receiver Przełącznik -t przedstawia strukturę drzewiastą urządzeń USB. Przykład: $ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M |__ Port 1: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M Przełącznik -D pozwala na wyświetlenie informacji o urządzeniu na podstawie pliku urządzenia. Przykład: $ lsusb -D /dev/bus/usb/001/003 Device: ID 046d:c534 Logitech, Inc. Unifying Receiver Przełącznik -V wyświetla wersję polecenia lsusb. Przykład: $ lsusb -V lsusb (usbutils) 012 Przełącznik -h wyświetla krótką informację o dostępnych przełącznikach i ich działaniu. Przykład: lessCopy code $ lsusb -hUsage: lsusb [options]... List USB devices-v, --verbose-s [[bus]:][devnum]-d vendor:[product]-t-D device-V, --version-h, --help Przykłady użycia: a) Wyświetlanie szczegółowych informacji o konkretnym urządzeniu: $ lsusb -v -s 001:003 b) Wyszukiwanie urządzeń USB od konkretnego producenta: $ lsusb -d 046d: c) Wyświetlanie informacji o urządzeniu z określonym identyfikatorem produktu: $ lsusb -d :c534 Polecenie lsusb jest niezwykle użytecznym narzędziem w systemie Linux, które pozwala na uzyskanie informacji o podłączonych urządzeniach USB. Dzięki licznym przełącznikom, można dostosować wyjście do własnych potrzeb, wybierając tylko te informacje, które są potrzebne. Warto zaznajomić się z tym poleceniem, aby szybko i skutecznie diagnozować problemy z urządzeniami USB oraz lepiej zrozumieć ich funkcjonowanie w systemie Linux. vmstat Systemy operacyjne Linux są szeroko stosowane na całym świecie jako serwery, systemy wbudowane i komputery osobiste. Jednym z kluczowych aspektów zarządzania takim systemem jest monitorowanie i analiza wydajności. W tym artykule omówimy narzędzie vmstat, które jest niezwykle przydatne w monitorowaniu wydajności systemu, a także wszystkie jego przełączniki wraz z przykładami użycia. Czym jest vmstat? Vmstat (skrót od Virtual Memory Statistics) to narzędzie dostarczane z pakietem procps w systemach Linux. Służy do monitorowania systemu w czasie rzeczywistym, pokazując statystyki dotyczące procesów, pamięci, bloków I/O, przełączania kontekstu, interwałów systemowych oraz innych informacji na temat pracy systemu. Składnia vmstat Podstawowa składnia polecenia vmstat wygląda następująco: vmstat [opcje] [opóźnienie] [liczba próbek] Opcje to przełączniki, które można wykorzystać, aby zmodyfikować wynik polecenia. Opóźnienie określa liczbę sekund między kolejnymi próbkami, a liczba próbek wskazuje, ile próbek chcesz uzyskać. Przełączniki vmstat Bez przełączników Uruchomienie polecenia vmstat bez żadnych przełączników wyświetli podstawowe statystyki systemu: vmstat Przykład wyniku: procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1022836 33624 524104 0 0 1 1 0 0 1 1 98 0 0 Przełącznik -a Przełącznik -a (aktywna pamięć) dodaje kolumny "inact" i "active" do wyjścia: vmstat -a Przełącznik -d Przełącznik -d (dysk) pokazuje statystyki dysków: vmstat -d Przełącznik -D Przełącznik -D (dysk) pokazuje statystyki dysków dla wszystkich dostępnych dysków: vmstat -D Przełącznik -f Przełącznik -f (fork) pokazuje łączną liczbę procesów utworzonych od ostatniego uruchomienia systemu: vmstat -f Przełącznik -h Przełącznik -h (ludzkie) wyświetla statystyki w formacie czytelnym dla człowieka, z jednostkami takimi jak K, M, G: vmstat -h Przełącznik -i Przełącznik -i (przerwania) pokazuje statystyki przerwań systemowych: vmstat -i Przełącznik -m Przełącznik -m (pamięć) pokazuje informacje o alokacji pamięci przez jądro: vmstat -m Przełącznik -n Przełącznik -n (bez zmiany) sprawia, że vmstat nie próbuje dostosować szerokości kolumn do szerokości ekranu: vmstat -n Przełącznik -p Przełącznik -p (partycja) pokazuje statystyki dla określonej partycji dysku: vmstat -p /dev/sda1 Przełącznik -s Przełącznik -s (podsumowanie) wyświetla podsumowanie statystyk: vmstat -s Przełącznik -S Przełącznik -S (rozmiar) pozwala wybrać jednostki dla wartości pamięci. Można użyć "k" (kilobajty), "K" (kibibajty), "m" (megabajty), "M" (mebibajty), "g" (gigabajty) lub "G" (gibibajty): vmstat -S M Przełącznik -t Przełącznik -t (czas) dodaje kolumnę z czasem do wyniku: vmstat -t Przełącznik -V Przełącznik -V (wersja) pokazuje informacje o wersji vmstat: vmstat -V Przełącznik -w Przełącznik -w (szeroko) wyświetla wynik w szerokim formacie, aby zmieścić wszystkie kolumny na ekranie: vmstat -w Przykłady użycia vmstat Monitorowanie systemu co 5 sekund Aby monitorować wydajność systemu co 5 sekund, można użyć polecenia: vmstat 5 Wyświetlanie 10 próbek statystyk systemu co 1 sekundę Aby wyświetlić 10 próbek statystyk systemu co 1 sekundę, można użyć polecenia: vmstat 1 10 Wyświetlanie statystyk partycji dysku Aby wyświetlić statystyki partycji dysku (np. /dev/sda1), można użyć polecenia: vmstat -p /dev/sda1 Monitorowanie przerwań systemowych Aby monitorować przerwania systemowe w czasie rzeczywistym, można użyć polecenia: vmstat -i Wyświetlanie statystyk alokacji pamięci Aby wyświetlić informacje o alokacji pamięci przez jądro systemu, można użyć polecenia: vmstat -m Podsumowanie statystyk Aby wyświetlić podsumowanie statystyk, można użyć polecenia: vmstat -s Wyświetlanie statystyk w formacie czytelnym dla człowieka Aby wyświetlić statystyki w formacie czytelnym dla człowieka, można użyć polecenia: vmstat -h Polecenie vmstat jest niezwykle przydatnym narzędziem do monitorowania wydajności systemu Linux. Umożliwia łatwy dostęp do ważnych statystyk, takich jak procesy, pamięć, I/O, przerwania systemowe i inne, co pozwala na szybkie zrozumienie stanu systemu i identyfikację ewentualnych problemów. Zapoznanie się z dostępnymi przełącznikami i ich użyciem pozwoli na efektywne korzystanie z tego narzędzia i utrzymanie zdrowego systemu. kexec System operacyjny Linux, będący jednym z najbardziej popularnych na świecie, oferuje szeroki wachlarz narzędzi i poleceń, które ułatwiają zarządzanie i kontrolowanie systemu. Jednym z takich poleceń jest kexec - narzędzie, które umożliwia szybkie przeładowanie jądra systemu operacyjnego bez konieczności pełnego uruchamiania systemu. W tym artykule przedstawimy dokładne działanie polecania kexec, omówimy jego przełączniki oraz pokażemy przykłady ich użycia. Czym jest kexec? Kexec (Kernel EXEC) to mechanizm dostępny w jądrze Linux, który pozwala na bezpośrednie uruchomienie nowego jądra z bieżącego jądra, pomijając BIOS/UEFI, bootloader oraz inicjalizację sprzętu. Kexec może być używany do szybkiego przeładowania systemu, testowania nowych konfiguracji jądra czy też jako narzędzie do odzyskiwania danych. Kexec może również przyspieszyć proces aktualizacji jądra Linux, gdyż nie wymaga pełnego restartu systemu. Przełączniki kexec Polecenie kexec oferuje różne przełączniki, które pozwalają na kontrolowanie jego działania. Poniżej przedstawiamy opis poszczególnych przełączników wraz z przykładami ich użycia: Przełącznik -l (lub --load) Przełącznik -l pozwala załadować nowe jądro do pamięci, przygotowując je do uruchomienia. Przykład użycia: sudo kexec -l /boot/vmlinuz-5.4.0-80-generic --initrd=/boot/initrd.img-5.4.0-80-generic --command-line="root=/dev/sda1 ro quiet splash" W powyższym przykładzie załadowane zostanie jądro o nazwie "vmlinuz-5.4.0-80-generic" z katalogu "/boot", wraz z obrazem initrd "initrd.img-5.4.0-80-generic". Dodatkowo, przekazane zostają parametry jądra za pomocą opcji --command-line. Przełącznik -e (lub --exec) Przełącznik -e służy do natychmiastowego uruchomienia wcześniej załadowanego jądra. Przykład użycia: sudo kexec -e Uruchomienie powyższego polecenia spowoduje natychmiastowe uruchomienie wcześniej załadowanego jądra za pomocą przełącznika -l. Przełącznik -u (lub --unload) Przełącznik -u pozwala na usunięcie wcześniej załadowanego jądra z pamięci, anulując tym samym planowane uruchomienie nowego jądra. Przykład użycia: sudo kexec -u W wyniku wykonania powyższego polecenia, wcześniej załadowane jądro zostanie usunięte z pamięci, a system będzie kontynuować działanie z aktualnym jądrem. Przełącznik -p (lub --load-preserve-context) Przełącznik -p pozwala załadować jądro do pamięci, zachowując jednocześnie bieżący kontekst systemu, co może być użyteczne podczas odzyskiwania danych lub diagnostyki systemu. Przykład użycia: sudo kexec -p /boot/vmlinuz-5.4.0-80-generic --initrd=/boot/initrd.img-5.4.0-80-generic --command-line="root=/dev/sda1 ro single" W powyższym przykładzie, załadowane zostanie jądro w trybie awaryjnym (single-user mode), zachowując bieżący kontekst systemu. W wyniku tego, użytkownik może uzyskać dostęp do systemu, nawet jeśli aktualne jądro nie działa poprawnie. Przełącznik -f (lub --force) Przełącznik -f wymusza wykonanie operacji, nawet jeśli wcześniej załadowane jądro nie jest kompatybilne z bieżącym systemem. Przykład użycia: sudo kexec -f -l /boot/vmlinuz-5.4.0-80-generic --initrd=/boot/initrd.img-5.4.0-80-generic --command-line="root=/dev/sda1 ro quiet splash" Przełącznik -f może być użyteczny podczas testowania nowych wersji jądra lub eksperymentowania z różnymi konfiguracjami systemu. Przełącznik -t (lub --type) Przełącznik -t pozwala określić typ obrazu jądra, który ma zostać załadowany. Dostępne typy to "bzImage", "multiboot", "multiboot2" i "elf". Przykład użycia: sudo kexec -t bzImage -l /boot/vmlinuz-5.4.0-80-generic --initrd=/boot/initrd.img-5.4.0-80-generic --command-line="root=/dev/sda1 ro quiet splash" W powyższym przykładzie, jądro zostanie załadowane jako obraz typu "bzImage". Opcja ta jest przydatna, gdy jądro nie jest domyślnie rozpoznawane przez kexec. Przełącznik -v (lub --version) Przełącznik -v wyświetla informacje o wersji programu kexec. Przykład użycia: kexec -v Po wykonaniu powyższego polecenia, zostanie wyświetlona informacja o wersji programu kexec, co pozwala na sprawdzenie, czy używana wersja jest aktualna. Przełącznik -h (lub --help) Przełącznik -h wyświetla krótki opis dostępnych przełączników oraz sposób ich użycia. Przykład użycia: kexec -h Po wykonaniu powyższego polecenia, zostanie wyświetlona pomoc zawierająca informacje o dostępnych przełącznikach i ich zastosowaniu. To przydatne narzędzie dla osób, które dopiero zaczynają korzystać z kexec lub potrzebują szybkiego przypomnienia. Przykładowy scenariusz użycia kexec Przedstawiamy poniżej przykład scenariusza, w którym kexec może okazać się przydatne. Załóżmy, że mamy system Linux zainstalowany na dysku "/dev/sda1" i chcemy przetestować nową wersję jądra. Postępujemy zgodnie z poniższymi krokami: Pobieramy i instalujemy nową wersję jądra (np. "vmlinuz-5.10.0-100-generic" oraz "initrd.img-5.10.0-100-generic"). Za pomocą przełącznika -l, ładujemy nową wersję jądra do pamięci: sudo kexec -l /boot/vmlinuz-5.10.0-100-generic --initrd=/boot/initrd.img-5.10.0-100-generic --command-line="root=/dev/sda1 ro quiet splash" Wykonujemy polecenie z przełącznikiem -e, aby uruchomić nowe jądro: sudo kexec -e Po uruchomieniu nowego jądra, sprawdzamy jego działanie oraz poprawność konfiguracji. Jeśli wszystko działa poprawnie, możemy zaktualizować konfigurację bootloadera, aby nowa wersja jądra była uruchamiana podczas kolejnych restartów systemu. Kexec to potężne narzędzie, które pozwala na szybkie przeładowanie jądra systemu operacyjnego, testowanie nowych konfiguracji oraz diagnozę i odzyskiwanie danych. Jego elastyczność i różnorodne możliwości sprawiają, że jest nieocenionym narzędziem dla administratorów systemów Linux. Podsumowanie Poleceń które współpracują lub operują w systemie linux z jądrem jest jeszcze kilkadziesiąt. Poznałeś tutaj w mojej ocenie najciekawsze oraz te najczęściej używane. Artykuł ten to nie koniec a jedynie początek naszej przygody z systemem linux. Pozdrawiam Poprzednie części: Część 1: Przydatne polecania dla każdego - Linux part 1 Część 2: Zarządzania pakietami apt, apt-get, apt-cache, aptitude, dpkg, rpm, yum, dnf, zypper - part 2 Część 3: Przydatne polecenia systemu Linux - part 3 (numactl, taskset, cgrups, schedtool)

  • All in one mówili...

    Czy warto wszystko umieszczać w jednym projekcie? Na to pewnie odpowie specyfika danego projektu i konfiguracji IaC... A oto mój przykład: Czy warto? czasowo... chyba nie... Oba kody robią to samo - tzn chcę dodać sieć i tu sam plan dla porównania czasy gdzie mamy inna konfiguracje która nie uczestniczy a musi być sprawdzona przez plan oraz bez dodatkowego cloud.

  • Dobrze że GitGuardian czuwa

    GitGuardian to narzędzie, które pomaga w ochronie prywatnych danych przed nieautoryzowanym dostępem w repozytoriach kodu. W Twoim przypadku, dzięki GitGuardianowi, udało Mi się uniknąć potencjalnego wycieku prywatnych informacji, w tym poufnych danych logowania do bazy danych PostgreSQL. GitGuardian jest w stanie wykrywać potencjalnie wrażliwe dane, takie jak hasła, tokeny lub klucze API, które mogą zostać umieszczone w repozytoriach kodu. Dzięki automatycznemu skanowaniu repozytoriów, GitGuardian potrafi zidentyfikować potencjalne problemy bezpośrednio w kodzie i powiadomić właścicieli repozytoriów o możliwym zagrożeniu. W Moim przypadku, GitGuardian wykrył, że umieściłeś w swoim publicznym repozytorium poufne dane logowania do bazy danych PostgreSQL. Dzięki temu powiadomieniu, byłem w stanie szybko podjąć działania i zmienić hasło, aby zapobiec potencjalnemu wyciekowi danych. Byłem przekonany, że to repo które utworzyłem jest prywatne - ile razy to słyszałem :P (byłem przekonany - ufaj ale sprawdzaj) Dodatkowo mój serwer PostgreSQL wpuszcza tylko zaufany adres IP Warto zaznaczyć, że niezabezpieczone dane w repozytoriach kodu to poważny problem, który może prowadzić do poważnych konsekwencji, w tym do utraty wrażliwych danych lub naruszenia prywatności. Dlatego ważne jest, aby zawsze dokładnie sprawdzać, co umieszczasz w repozytoriach kodu i korzystać z narzędzi, takich jak GitGuardian, aby zapewnić ochronę swoich danych. Oraz warto korzystać z secret managera HashiCorp Vault lub podobnego rozwiązania. Wnioski, które można wyciągnąć z Mojego doświadczenia, to konieczność ostrożności w zakresie zarządzania danymi w repozytoriach kodu oraz wykorzystanie narzędzi do automatycznego wykrywania potencjalnych problemów związanych z bezpieczeństwem. Dzięki tym praktykom będę w stanie zapewnić ochronę swoich danych i uniknąć potencjalnych zagrożeń związanych z wyciekiem poufnych informacji. Poniżej kilka poprzednich moich wpisów które, omawiają ten temat i narzędzia. https://www.technicznie-nietechniczne.pl/post/checkov-zastosowanie-narz%C4%99dzia-do-analizy-infrastruktury-jako-kodu https://www.technicznie-nietechniczne.pl/post/narz%C4%99dzie-do-analizy-statycznej-infrastruktury-jako-kodu-w-terraform https://www.technicznie-nietechniczne.pl/post/najlepsze-praktyki-w-zakresie-bezpiecze%C5%84stwa-terraform

  • Aktualizacja Google Chrome: 16 luk bezpieczeństwa zostało naprawionych w wersji 112

    Google Chrome doczekał się kolejnej ważnej aktualizacji, a użytkownicy przeglądarki powinni zwrócić uwagę na jak najszybsze zaktualizowanie oprogramowania. W najnowszej wersji Chrome 112 naprawiono aż 16 luk bezpieczeństwa, które mogły być wykorzystane przez potencjalnych atakujących. Mimo że przeglądarka zazwyczaj aktualizuje się automatycznie, ten proces może trwać nawet kilka dni, dlatego warto ręcznie sprawdzić dostępność aktualizacji. W oficjalnym wpisie na blogu Google, możemy dowiedzieć się o naprawionych problemach zabezpieczeń. Firma przyznała nagrody w ramach programu Bug Bounty, wynoszące od 1 do 5 tys. dolarów, za zgłoszenie 16 luk bezpieczeństwa. Dwie z nich, oznaczone jako CVE-2023-1810 i CVE-2023-1811, dotyczyły poważnych problemów związanych z przepełnieniem bufora oraz możliwością przeprowadzenia ataku typu "use after free". Ponadto, naprawiono także inne ważne luki, takie jak CVE-2023-1812, umożliwiająca dostęp do pamięci poza dozwolonym zakresem, CVE-2023-1813, związana z niewłaściwą implementacją rozszerzeń, czy CVE-2023-1816, dotycząca zabezpieczeń w trybie Picture-in-Picture. Aktualizacja Google Chrome pozwoli chronić komputery użytkowników przed ewentualnymi atakami wykorzystującymi te luki. Chociaż Google Chrome zwykle aktualizuje się w tle, proces ten może trwać dłużej niż oczekiwano. Aby przyspieszyć aktualizację, należy wejść w ustawienia przeglądarki, a następnie w sekcję informacji o wersji Chrome, gdzie można ręcznie sprawdzić dostępność aktualizacji. Jeżeli nowa wersja jest już dostępna, zostanie pobrana i zainstalowana. Po zakończeniu aktualizacji konieczne będzie jedynie ponowne uruchomienie Google Chrome. Źródło: https://chromereleases.googleblog.com/2023/04/stable-channel-update-for-desktop.html

  • KDE Plasma 5.27.4 ulepsza Plazmę Wayland

    Projekt KDE wydał dziś KDE Plasma 5.27.4 jako czwartą aktualizację serii środowiska pulpitu KDE Plasma 5.27 LTS, aby naprawić więcej błędów i awarii oraz usprawnić istniejące funkcje. KDE Plasma 5.27.4, wydana trzy tygodnie po KDE Plasma 5.27.3, wprowadza kolejne ulepszenia w sesji Plasma Wayland. Naprawiono awarię KWin, która występowała, gdy niektóre zewnętrzne ekrany wyłączały się same po wyłączeniu i ponownym włączeniu. Ulepszono także ustawienia prędkości przewijania i obsługę aplikacji GTK na konfiguracjach wielomonitorowych oraz podczas zmiany globalnych motywów. Wydanie KDE Plasma 5.27.4 naprawia także problem z zamykaniem się Plasmy, gdy aplikacja wysyła zbyt długi tytuł okna, oraz wprowadza ulepszenia w nagrywaniu ekranu i miniaturach Menedżera zadań dla użytkowników z kartami graficznymi NVIDIA, gdy używają zamkniętych sterowników NVIDIA. Aktualizacja wprowadza również ulepszenia jakości życia, takie jak wiarygodniejsze wykresy zużycia energii w aplikacji Info Center dla ciemnych motywów, lepsze wsparcie wielomonitorowe oraz obsługę aplikacji Flatpak w menedżerze pakietów Plasma Discover. Ponadto Plasma Discover działa teraz szybciej i bardziej responsywnie, gdy jest dużo aktualizacji systemowych, a okno Emoji Picker można teraz otworzyć za pomocą dedykowanego klawisza Emoji na klawiaturze. Ustawienie "Sortuj aplikacje alfabetycznie" w Kickerze usuwa ręcznie umieszczone linie separatorów między aplikacjami. Wiele błędów zostało naprawionych w KDE Plasma 5.27.4, w tym awarii ustawień systemowych, awarii kded5 podczas przełączania ekranów, problemów związanych ze schowkiem oraz zamarzania ekranu logowania SDDM przy użyciu motywu Breeze SDDM. KDE Plasma 5.27.4 wprowadza również poprawki dla wizualnie uszkodzonych dekoracji okien Aurorae, ulepsza wsparcie dla maksymalizowanych aplikacji GTK z paskami nagłówków przy użyciu motywu Breeze GTK oraz poprawia funkcję screencasting, eliminując zamianę czerwonych i niebieskich kolorów kursora. Wreszcie, aktualizacja KDE Plasma 5.27 LTS wprowadza ulepszenia w przełączaniu motywów ekranów rozruchowych Plymouth dla dystrybucji GNU/Linux korzystających z mkinitcpio, poprawia grubość niepływających paneli przy użyciu motywów Plasmy z zaokrąglonymi rogami o dużym promieniu oraz naprawia różne inne drobne problemy. Aby uzyskać więcej szczegółów, zapoznaj się z pełną listą zmian. Tymczasem, jeśli korzystasz z serii środowiska pulpitu KDE Plasma 5.27 LTS, śledź stabilne repozytoria oprogramowania swojej dystrybucji GNU/Linux, aby sprawdzić dostępność pakietów Plasma 5.27.4 i zaktualizować swoje instalacje tak szybko, jak to możliwe. Źródło: https://kde.org/announcements/changelogs/plasma/5/5.27.3-5.27.4/

  • Darmowe narzędzie do analizy zdarzeń w Microsoft Azure

    CISA wprowadza Untitled Goose Tool do wykrywania zagrożeń i analizy usług chmurowych w Microsoft Azure Cybersecurity and Infrastructure Security Agency (CISA) we współpracy z Sandia National Laboratories opracowała nowe narzędzie do cyberbezpieczeństwa o nazwie Untitled Goose Tool. Narzędzie ma na celu pomóc obrońcom sieci w wykrywaniu złośliwej aktywności w środowiskach Azure Active Directory (AAD) i Microsoft 365. Goose oferuje innowacyjne metody uwierzytelniania i zbierania danych, dzięki którym można lepiej wykryć zagrożenia i analizować usługi chmurowe w Microsoft Azure. Narzędzie jest szczególnie przydatne w dobie licznych luk w zabezpieczeniach w usługach Azure, takich jak niedawno ujawniona luka umożliwiająca fałszerstwo żądań po stronie serwera (SSRF). Andy Robbins, główny architekt produktu w firmie SpecterOps, zwraca uwagę na istotne problemy związane z atakami na tożsamość w środowiskach platformy Azure. Ścieżki ataków w Azure są trudniejsze do zabezpieczenia i zarządzania niż te w lokalnych sieciach, co wynika z większej złożoności tożsamości na platformie. Untitled Goose Tool może wykrywać przypadki wykorzystania luk w zabezpieczeniach, nieprawidłową konfigurację uprawnień oraz wspierać działania naprawcze. Narzędzie umożliwia również wyodrębnianie artefaktów chmury z powiązanych usług bez konieczności przeprowadzania dodatkowych analiz, gromadzenie danych w określonych ramach czasowych oraz korzystanie z funkcji ograniczania czasu. Aby korzystać z narzędzia, osoby z Blue Team muszą używać Pythona 3.7, 3.8 lub 3.9, a CISA zaleca uruchamianie Goose w środowisku wirtualnym. Przed rozpoczęciem korzystania z repozytorium GitHub, CISA wzywa obrońców sieci chmurowych do zapoznania się z arkuszem informacyjnym Untitled Goose Tool, aby zrozumieć jego funkcje i wymagania dotyczące uprawnień. Funkcje narzędzia obejmują m.in. eksportowanie i przeglądanie dzienników logowania, inspekcji usługi AAD, dzienników inspekcji M365 (UAL), dzienników aktywności platformy Azure, alertów usługi Microsoft Defender for IoT oraz danych usługi Microsoft Defender for Endpoint (MDE) pod kątem podejrzanej aktywności. Dodatkowo, umożliwia wykonywanie zapytań, eksportowanie i badanie konfiguracji AAD, M365 i Azure oraz wyodrębnianie artefaktów ze środowisk Microsoft AAD, Azure i M365 bez wykonywania dodatkowych analiz. Goose pozwala także na ograniczenie czasowe UAL, ekstrakcję danych w określonych ramach czasowych oraz zbieranie i przeglądanie danych z wykorzystaniem podobnych możliwości ograniczania czasu dla danych MDE. Untitled Goose Tool ma potencjał stać się istotnym narzędziem dla obrońców sieci, którzy starają się utrzymać bezpieczeństwo infrastruktury chmurowej w Azure. Jego elastyczność i innowacyjne podejście do uwierzytelniania i zbierania danych przyczynią się do lepszego wykrywania i reagowania na incydenty oraz pomogą w monitorowaniu i analizie potencjalnych zagrożeń. W miarę jak coraz więcej organizacji korzysta z chmury Microsoft Azure, narzędzie takie jak Untitled Goose Tool może okazać się kluczowe dla utrzymania bezpieczeństwa i ochrony prywatności użytkowników. Wspierając obrońców sieci w walce z atakami i zabezpieczając środowiska chmurowe, Goose przyczynia się do poprawy ogólnego poziomu cyberbezpieczeństwa w sektorze usług chmurowych. Źródło: https://github.com/cisagov/untitledgoosetool https://www.cisa.gov/news-events/alerts/2023/03/23/untitled-goose-tool-aids-hunt-and-incident-response-azure-azure-active-directory-and-microsoft-365

  • Przydatne polecenia systemu Linux - part 3 (numactl, taskset, cgrups, schedtool)

    Część trzecia artykułu o poleceniach linux poprzednio mieliśmy: Zarządzania pakietami apt, apt-get, apt-cache, aptitude, dpkg, rpm, yum, dnf, zypper - part 2 Przydatne polecania dla każdego - Linux part 1 A w tym odcinku porozmawiamy sobie jak z naszego systemu wyciągnąc wiecej :) numactl Polecenie numactl jest potężnym narzędziem dostępnym w systemach Linux, które pozwala na kontrolowanie alokacji pamięci i przydzielania procesów w architekturze Non-Uniform Memory Access (NUMA). W czasach rosnącej złożoności i rozbudowy wieloprocesorowych systemów komputerowych, narzędzie to stanowi kluczowe rozwiązanie dla administratorów systemów oraz programistów, którzy pragną zoptymalizować wydajność swoich aplikacji. Czym jest polecenie numactl i do czego służy? Polecenie numactl to narzędzie wykorzystywane w systemach Linux do kontroli alokacji pamięci i zarządzania procesami w architekturze NUMA. W skrócie, NUMA to architektura stosowana w wieloprocesorowych systemach komputerowych, w których czas dostępu do pamięci zależy od położenia procesora względem pamięci. Węzły NUMA zawierają procesor(y) oraz lokalną pamięć, a czas dostępu do pamięci w węźle jest krótszy niż do pamięci w innym węźle. Polecenie numactl pozwala na ustawienie polityki alokacji pamięci dla danego procesu oraz przydzielenie procesu do określonego węzła NUMA. Dzięki temu możliwe jest lepsze wykorzystanie dostępnych zasobów oraz minimalizacja opóźnień wynikających z przesyłania danych między węzłami. Historia polecenia numactl Wraz z rozwojem technologii komputerowych, zwłaszcza w dziedzinie wieloprocesorowych systemów, pojawiła się potrzeba lepszego zarządzania zasobami pamięci. Początkowo, systemy komputerowe stosowały architekturę Uniform Memory Access (UMA), gdzie czas dostępu do pamięci był taki sam dla wszystkich procesorów. W miarę zwiększania liczby procesorów w systemach, UMA zaczęło prowadzić do problemów z wydajnością i skalowalnością. W związku z tym, w latach 90. XX wieku powstała architektura Non-Uniform Memory Access (NUMA) jako odpowiedź na rosnące wyzwania związane z zarządzaniem pamięcią w wieloprocesorowych systemach. Początkowo, NUMA była stosowana głównie w superkomputerach oraz dużych systemach mainframe, jednak w miarę upływu czasu, coraz więcej serwerów i stacji roboczych zaczęło korzystać z tej architektury, aby poprawić swoją wydajność. W związku z tym, istniała potrzeba stworzenia narzędzi, które umożliwiłyby efektywne zarządzanie zasobami pamięci w systemach NUMA. Pierwsze wersje polecenia numactl pojawiły się na początku lat 2000. W kolejnych latach narzędzie było rozwijane, dopracowywane i dostosowywane do różnych dystrybucji Linuxa. Przełączniki polecenia Wraz z rozwojem narzędzia numactl, programiści wprowadzili różne opcje pozwalające na bardziej precyzyjne zarządzanie węzłami NUMA. Niektóre z tych opcji obejmują: --cpunodebind=: Ta opcja pozwala na przydzielenie procesu do określonego węzła (lub węzłów) NUMA. Proces będzie miał dostęp jedynie do CPU związanych z tymi węzłami. Wartość może być pojedynczym węzłem (np. --cpunodebind=0) lub listą węzłów (np. --cpunodebind=0,1,2). --membind=: Za pomocą tej opcji można określić, z których węzłów NUMA proces będzie mógł alokować pamięć. Wartość może być pojedynczym węzłem (np. --membind=0) lub listą węzłów (np. --membind=0,1,2). --preferred=: Opcja ta pozwala na ustawienie preferowanego węzła NUMA dla alokacji pamięci. System stara się alokować pamięć z tego węzła, ale może korzystać z innych węzłów, jeśli to konieczne. Wartość powinna być pojedynczym węzłem (np. --preferred=0). --interleave=: Ta opcja rozkłada alokacje pamięci równomiernie na wskazanych węzłach NUMA. Może to poprawić wydajność w niektórych przypadkach, gdy równomierne rozłożenie pamięci jest korzystne. Wartość może być pojedynczym węzłem (np. --interleave=0) lub listą węzłów (np. --interleave=0,1,2). --localalloc: Domyślna polityka alokacji pamięci, która polega na próbie alokowania pamięci lokalnie dla danego procesu. Jeśli lokalna pamięć jest niewystarczająca, system może korzystać z pamięci zdalnych węzłów. --physcpubind=: Ta opcja pozwala na przydzielenie procesu do określonego procesora (lub procesorów) fizycznego. Wartość może być pojedynczym procesorem (np. --physcpubind=0) lub listą procesorów (np. --physcpubind=0,1,2). --show: Wyświetla aktualne ustawienia NUMA dla danego procesu. --hardware: Wyświetla informacje o sprzęcie NUMA, takie jak liczba węzłów, ich rozmiary oraz topologia połączeń między nimi. --length=: Opcja stosowana w połączeniu z --dump lub --dump-nodes, aby określić rozmiar obszaru pamięci, który ma zostać zrzutowany. Wartość powinna być podana w bajtach, kilobajtach (z dopiskiem K), megabajtach (z dopiskiem M) lub gigabajtach (z dopiskiem G). Na przykład, --length=1G oznacza, że rozmiar obszaru pamięci do zrzucenia wynosi 1 gigabajt. --offset=: Opcja stosowana w połączeniu z --dump lub --dump-nodes, aby określić przesunięcie początkowe obszaru pamięci, który ma zostać zrzutowany. Wartość powinna być podana w bajtach, kilobajtach (z dopiskiem K), megabajtach (z dopiskiem M) lub gigabajtach (z dopiskiem G). --dump i --dump-nodes=: Te opcje pozwalają na zrzut obszaru pamięci na standardowe wyjście. Opcja --dump zrzuci całą pamięć, podczas gdy --dump-nodes zrzuci pamięć tylko z określonych węzłów NUMA. Wartość może być pojedynczym węzłem (np. --dump-nodes=0) lub listą węzłów (np. --dump-nodes=0,1,2). --touch i --touch-nodes=: Opcje te powodują "dotknięcie" (inicjalizację) obszaru pamięci przed jego użyciem przez proces. Opcja --touch dotyka całej pamięci, natomiast --touch-nodes dotyka tylko pamięci z określonych węzłów NUMA. Wartość może być pojedynczym węzłem (np. --touch-nodes=0) lub listą węzłów (np. --touch-nodes=0,1,2). --huge i --huge=: Opcje te pozwalają na alokowanie dużych stron pamięci (ang. huge pages) dla procesu. Opcja --huge alokuje domyślny rozmiar dużych stron pamięci, natomiast --huge= pozwala na określenie rozmiaru dużych stron. Wartość powinna być podana w megabajtach (z dopiskiem M) lub gigabajtach (z dopiskiem G). --shm= i --shm=:: Opcje te alokują obszar pamięci współdzielonej (ang. shared memory) związany z określonym kluczem . Opcja --shm= alokuje domyślny rozmiar pamięci współdzielonej, natomiast --shm=: pozwala na określenie rozmiaru pamięci współdzielonej. Wartość powinna być podana w bajtach, kilobajtach (z dopiskiem K), megabajtach (z dopiskiem M) lub gigabajtach (z dopiskiem G). --file= i --file=:: Opcje te alokują obszar pamięci oparty na pliku o określonej ścieżce . Opcja --file= alokuje domyślny rozmiar pamięci na podstawie pliku, natomiast --file=: pozwala na określenie rozmiaru pamięci. Wartość powinna być podana w bajtach, kilobajtach (z dopiskiem K), megabajtach (z dopiskiem M) lub gigabajtach (z dopiskiem G). --roundrobin: Opcja ta pozwala na równomierne rozłożenie alokacji pamięci na wszystkich dostępnych węzłach NUMA. Jest to równoznaczne z użyciem opcji --interleave=all. --strict: Ta opcja sprawia, że numactl zakończy działanie z błędem, jeśli nie można zastosować żądanej polityki alokacji pamięci. Domyślnie, numactl może korzystać z innych polityk alokacji, jeśli żądana polityka nie może być zastosowana. --singleversion: Opcja ta sprawia, że numactl używa tylko jednej wersji biblioteki libnuma, nawet jeśli dostępne są różne wersje. Jest to przydatne w przypadku, gdy zachodzi potrzeba kontroli nad wersją biblioteki używaną przez numactl. --all i --all=: Opcje te alokują pamięć na wszystkich dostępnych węzłach NUMA. Opcja --all alokuje domyślny rozmiar pamięci na każdym węźle, natomiast --all= pozwala na określenie rozmiaru pamięci. Wartość powinna być podana w bajtach, kilobajtach (z dopiskiem K), megabajtach (z dopiskiem M) lub gigabajtach (z dopiskiem G). Te opcje można łączyć w celu uzyskania bardziej zaawansowanego zarządzania pamięcią i procesami w systemach NUMA. Pamiętaj, że niektóre opcje mogą być niekompatybilne ze sobą, więc warto zwrócić uwagę na to, które opcje są używane jednocześnie. Przed rozpoczęciem pracy z poleceniem numactl, warto zapoznać się z jego dokładną dokumentacją oraz przemyśleć strategię optymalizacji zasobów w systemie NUMA. Zastosowanie polecenia numactl w praktyce Polecenie numactl jest często używane przez administratorów systemów, programistów oraz inżynierów ds. wydajności, którzy pragną zoptymalizować wydajność swoich aplikacji w systemach NUMA. Narzędzie to pozwala na kontrolowanie, w jaki sposób procesy są przydzielane do poszczególnych węzłów NUMA, co pozwala lepiej wykorzystać zasoby pamięci. Przykład użycia polecenia numactl może wyglądać następująco: W powyższym przykładzie, polecenie numactl uruchamia program my_program, przydzielając go do węzła NUMA 0 oraz alokując pamięć tylko z tego węzła. Innym przykładem może być równomierne rozkładanie alokacji pamięci na dwóch węzłach NUMA: Warto zauważyć, że korzystanie z polecenia numactl może przynieść istotne korzyści wydajnościowe, ale wymaga także doświadczenia i zrozumienia działania systemów NUMA. Niewłaściwe użycie narzędzia może prowadzić do nieoptymalnego przydzielania zasobów, co skutkować będzie spadkiem wydajności. Współczesne systemy operacyjne, takie jak Linux, starają się automatycznie optymalizować alokację procesów i zasobów w systemach NUMA. Mimo to, w niektórych przypadkach, ręczna interwencja z wykorzystaniem polecenia numactl może być konieczna w celu uzyskania najlepszej możliwej wydajności. Korzystanie z NUMA może wpłynąć na wydajność systemu, szczególnie w przypadku dysków twardych i interfejsów sieciowych. Przyjrzymy się także, kiedy przypisanie danego programu zapisującego lub wysyłającego dane przez konkretne urządzenie przypięte do danego węzła NUMA może być korzystne. Redukcja opóźnień: Przydzielenie procesów do węzłów NUMA, do których są bezpośrednio podłączone urządzenia, takie jak dyski twarde lub interfejsy sieciowe, może zmniejszyć opóźnienia. Dzięki temu procesy mają szybszy dostęp do zasobów, co przekłada się na lepszą wydajność. Zwiększenie przepustowości: Przydzielenie procesów do węzłów NUMA zgodnie z lokalizacją urządzeń może również zwiększyć przepustowość. Poprawia to prędkość transferu danych między procesami a urządzeniami, co przekłada się na szybsze działanie systemu. Lepsze wykorzystanie zasobów: Optymalna alokacja NUMA umożliwia lepsze wykorzystanie zasobów sprzętowych. Dzięki temu system może obsługiwać więcej zadań jednocześnie, co zwiększa wydajność. Dyski twarde: Alokowanie NUMA w przypadku dysków twardych może poprawić wydajność operacji wejścia/wyjścia. Przydzielenie procesu do węzła NUMA, który zarządza dyskiem twardym, może zmniejszyć opóźnienia i zwiększyć prędkość transferu danych. Na przykład, jeśli proces zapisuje dane na dysku twardym podłączonym do węzła NUMA 0, alokacja procesu do tego samego węzła NUMA może przyspieszyć operacje zapisu i odczytu. Interfejsy sieciowe: Podobnie jak w przypadku dysków twardych, alokowanie NUMA w przypadku interfejsów sieciowych może również wpłynąć na wydajność systemu. Przydzielenie procesu do węzła NUMA zarządzającego interfejsem sieciowym może poprawić przepustowość sieci i zmniejszyć opóźnienia. Na przykład, jeśli proces wysyła dane przez interfejs sieciowy podłączony do węzła NUMA 1, przypisanie procesu do tego samego węzła NUMA może przyspieszyć operacje wysyłania i odbierania danych. Kiedy przypisać program do urządzenia przypiętego do danego węzła NUMA? Przypisanie programu do urządzenia przypiętego do danego węzła NUMA może być korzystne w następujących sytuacjach: Gdy program intensywnie korzysta z zasobów, takich jak dyski twarde lub interfejsy sieciowe. Przypisanie programu do węzła NUMA zarządzającego tymi urządzeniami może poprawić jego wydajność. W przypadku programów, które wymagają szybkiego przesyłania danych między procesami a urządzeniami, przypisanie ich do odpowiedniego węzła NUMA może zmniejszyć opóźnienia i zwiększyć przepustowość. Gdy system ma nierównomiernie rozłożone obciążenie między węzłami NUMA, przypisanie programów do węzłów zgodnie z lokalizacją urządzeń może pomóc zrównoważyć obciążenie i poprawić wydajność systemu. W systemie Linux istnieje wiele narzędzi, które pozwalają kontrolować na którym wątku procesora uruchamiany jest program, mamy jeszcze: taskset Polecenie taskset to narzędzie dostępne w systemach Linux, które pozwala zarządzać afiliacją procesów i wątków do rdzeni procesora. Dzięki temu narzędziu można kontrolować, na których rdzeniach procesora uruchamiane są programy, co pozwala na lepsze zarządzanie zasobami systemu i optymalizację wydajności. Przełączniki taskset -c, --cpu-list: Lista rdzeni, na których ma być uruchomiony proces. Przyjmuje listę oddzieloną przecinkami, zakresy oddzielone myślnikami, lub kombinacje tych dwóch. -p, --pid: Zamiast uruchamiać nowy proces, taskset zostanie użyty do zmiany afiliacji rdzenia istniejącego procesu o podanym numerze PID. -a, --all-tasks: Przeskalowanie afiliacji rdzenia dla wszystkich wątków istniejącego procesu o podanym numerze PID. -h, --help: Wyświetla pomoc dotyczącą użycia polecenia taskset. Przykłady użycia polecenia taskset Uruchamianie programu na konkretnych rdzeniach Jeśli chcesz uruchomić program na określonych rdzeniach procesora, użyj przełącznika -c: W powyższym przykładzie program zostanie uruchomiony na rdzeniach 0 i 1. Uruchamianie programu na zakresie rdzeni Możesz także podać zakres rdzeni za pomocą myślnika: W powyższym przykładzie program zostanie uruchomiony na rdzeniach 2 i 3. Zmiana afiliacji rdzenia dla istniejącego procesu Jeśli chcesz zmienić afiliację rdzenia dla istniejącego procesu o określonym numerze PID, użyj przełącznika -p: W powyższym przykładzie afiliacja rdzenia dla procesu o numerze PID 12345 zostanie zmieniona na rdzenie 0 i 2. Wyświetlanie afiliacji rdzenia dla istniejącego procesu Aby sprawdzić, na których rdzeniach działa istniejący proces, użyj przełącznika -p bez podawania listy rdzeni: W powyższym przykładzie zostanie wyświetlona afiliacja rdzenia dla procesu o numerze PID 12345. Zmiana afiliacji rdzenia dla wszystkich wątków istniejącego procesu Jeśli chcesz zmienić afiliację rdzenia dla wszystkich wątków istniejącego procesu, użyj przełącznika -a: W powyższym przykładzie afiliacja rdzenia dla wszystkich wątków procesu o numerze PID 12345 zostanie zmieniona na rdzenie 0 i 2. Uruchamianie programu na kombinacji rdzeni Możesz także podać kombinację listy i zakresu rdzeni: W powyższym przykładzie program zostanie uruchomiony na rdzeniach 3, 4 i 6. Podsumowując, polecenie taskset pozwala na kontrolowanie afiliacji rdzeni procesora dla nowo uruchamianych i istniejących procesów. Może to być użyteczne w przypadku optymalizacji wydajności, szczególnie w środowiskach, w których równoczesne wykonywanie wielu zadań wymaga zarządzania zasobami procesora. Dzięki temu narzędziu można ręcznie kontrolować wykorzystanie rdzeni procesora, dostosowując je do indywidualnych potrzeb i celów. Warto też spojrzeć na polecenia cgroups i schedtool na których można uzyskać podobny efekt cgroups Cgroups (control groups) to mechanizm jądra Linux, który pozwala na ograniczenie i izolowanie zasobów systemowych dla procesów. Przykład 1: Utworzenie grupy kontrolnej "myGroup". Przykład 2: Przypisanie rdzenia 0 do grupy kontrolnej "myGroup". Przykład 3: Dodanie bieżącego procesu do grupy kontrolnej "myGroup". Przykład 4: Uruchomienie programu w grupie kontrolnej "myGroup" Przykład 5: Usuwanie grupy kontrolnej "myGroup". schedtool Polecenie schedtool pozwala zarządzać harmonogramem i afiliacją rdzeni dla procesów. Przykład 1: Uruchomienie programu na rdzeniach 0 i 1 (maska bitowa: 0b11 = 0x3). Przykład 2: Uruchomienie programu na rdzeniach 0 i 2 (maska bitowa: 0b101 = 0x5). Przykład 3: Przypisanie istniejącego procesu o PID 12345 do rdzeni 0 i 1. Przykład 4: Wyświetlanie aktualnej afiliacji rdzeni dla procesu o PID 12345. Przykład 5: Uruchomienie programu na rdzeniach 0 i 3 (maska bitowa: 0b1001 = 0x9).

  • Zarządzania pakietami apt, apt-get, apt-cache, aptitude, dpkg, rpm, yum, dnf, zypper

    Hej w poprzednim wpisie rozmawialiśmy sobie o komendach w systemie Linux które warto znać. Dzisiaj w tym wpisie porozmawiamy o komendach, które w Twojej ulubionej dystrybucji pomagają instalować oprogramowanie. Zapraszam W świecie systemów Linux istnieje wiele narzędzi do zarządzania pakietami, które pozwalają na instalowanie, aktualizowanie, usuwanie i zarządzanie oprogramowaniem. W tym artykule przyjrzymy się kilku z nich: apt, apt-get, apt-cache, aptitude, dpkg, rpm, yum, dnf i zypper. Każde z tych narzędzi ma swoje unikalne cechy, a także wspólne przełączniki i funkcje. Historia i ewolucja narzędzi do zarządzania pakietami Historia narzędzi do zarządzania pakietami sięga lat 90. XX wieku, kiedy to powstały pierwsze dystrybucje systemów Linux. Wówczas różne projekty zaczęły opracowywać własne narzędzia, które miały na celu ułatwić zarządzanie oprogramowaniem na tych systemach. Jednym z pierwszych narzędzi do zarządzania pakietami był dpkg, wprowadzony w systemie Debian w 1994 roku. W 1998 roku powstał Red Hat Package Manager (RPM), który stał się podstawą dla wielu dystrybucji opartych na Red Hat. W międzyczasie, w 1999 roku, w systemie Debian wprowadzono narzędzie apt-get, które było wygodniejsze w użyciu niż dpkg, gdyż pozwalało na automatyczne rozwiązywanie zależności między pakietami. Z biegiem lat powstało wiele innych narzędzi do zarządzania pakietami, które miały za zadanie ułatwić i usprawnić proces instalacji oprogramowania na różnych dystrybucjach systemów Linux. Wprowadzono narzędzia takie jak aptitude (2000), yum (2003), dnf (2012) czy zypper (2006), które stanowią kolejne generacje i ewolucje narzędzi do zarządzania pakietami. apt (Advanced Package Tool) Apt to zaawansowane narzędzie do zarządzania pakietami, które jest używane w dystrybucjach opartych na Debianie, takich jak Ubuntu. Apt pozwala na instalowanie, usuwanie, aktualizowanie pakietów oraz wykonywanie innych zadań związanych z zarządzaniem oprogramowaniem. Najważniejsze przełączniki: update: Aktualizuje listę pakietów dostępnych w repozytoriach upgrade: Aktualizuje zainstalowane pakiety do najnowszych wersji install: Instaluje podany pakiet remove: Usuwa podany pakiet autoremove: Usuwa nieużywane pakiety apt-get Apt-get to starsze narzędzie do zarządzania pakietami w dystrybucjach opartych na Debianie. Wiele z jego funkcji zostało zastąpionych przez apt, ale nadal jest używane w niektórych przypadkach. Zalecany wręcz przy budowaniu i używaniu składni dockerfile. Najważniejsze przełączniki: update: Aktualizuje listę pakietów dostępnych w repozytoriach upgrade: Aktualizuje zainstalowane pakiety do najnowszych wersji install: Instaluje podany pakiet remove: Usuwa podany pakiet autoremove: Usuwa nieużywane pakiety apt-cache Apt-cache to narzędzie do wyszukiwania informacji o pakietach w dystrybucjach opartych na Debianie. Możemy nim wyszukiwać pakiety, sprawdzać ich wersje, zależności, opisy i inne informacje. Najważniejsze przełączniki: search: Wyszukuje pakiety zawierające podane słowo kluczowe show: Wyświetla szczegółowe informacje o podanym pakiecie policy: Pokazuje priorytet i źródło podanego pakietu aptitude Aptitude to alternatywne narzędzie do zarządzania pakietami w dystrybucjach opartych na Debianie. Ma wiele funkcji podobnych do apt, ale oferuje również zaawansowane wyszukiwanie pakietów i interfejs tekstowy. Najważniejsze przełączniki: update: Aktualizuje listę pakietów dostępnych w repozytoriach upgrade: Aktualizuje zainstalowane pakiety do najnowszych wersji install: Instaluje podany pakiet remove: Usuwa podany pakiet search: Wyszukuje pakiety zawierające podane słowo kluczowe dpkg (Debian Package) Dpkg to niskopoziomowe narzędzie do zarządzania pakietami w dystrybucjach opartych na Debianie. Umożliwia instalację, usuwanie, aktualizację i konfigurację pakietów bezpośrednio z plików .deb, ale nie obsługuje automatycznego rozwiązywania zależności. Najważniejsze przełączniki: -i: Instaluje podany pakiet z pliku .deb -r: Usuwa podany pakiet -l: Wyświetla listę zainstalowanych pakietów -L: Wyświetla pliki zainstalowane przez podany pakiet -s: Pokazuje status podanego pakietu rpm (Red Hat Package Manager) Rpm to narzędzie do zarządzania pakietami w dystrybucjach opartych na Red Hat, takich jak Fedora, CentOS czy RHEL. Umożliwia instalację, usuwanie, aktualizację i konfigurację pakietów bezpośrednio z plików .rpm, obsługuje automatycznego rozwiązywania zależności. Najważniejsze przełączniki: -i: Instaluje podany pakiet z pliku .rpm -e: Usuwa podany pakiet -qa: Wyświetla listę zainstalowanych pakietów -ql: Wyświetla pliki zainstalowane przez podany pakiet -qf: Pokazuje, do którego pakietu należy dany plik yum (Yellowdog Updater, Modified) Yum to narzędzie do zarządzania pakietami w starszych wersjach dystrybucji opartych na Red Hat, takich jak CentOS 6 i RHEL 6. Umożliwia instalację, usuwanie i aktualizację pakietów, a także automatyczne rozwiązywanie zależności. Najważniejsze przełączniki: update: Aktualizuje zainstalowane pakiety do najnowszych wersji install: Instaluje podany pakiet remove: Usuwa podany pakiet search: Wyszukuje pakiety zawierające podane słowo kluczowe info: Wyświetla informacje o podanym pakiecie dnf (Dandified Yum) Dnf to następca yum, używany w nowszych wersjach dystrybucji opartych na Red Hat, takich jak Fedora, CentOS 8 i RHEL 8. Oferuje większość funkcji yum, ale z usprawnieniami, takimi jak lepsze rozwiązywanie zależności i szybsze pobieranie pakietów. Najważniejsze przełączniki: update: Aktualizuje zainstalowane pakiety do najnowszych wersji install: Instaluje podany pakiet remove: Usuwa podany pakiet search: Wyszukuje pakiety zawierające podane słowo kluczowe info: Wyświetla informacje o podanym pakiecie zypper Zypper to narzędzie do zarządzania pakietami w dystrybucjach opartych na openSUSE i SUSE Linux Enterprise. Umożliwia instalację, usuwanie, aktualizację pakietów oraz automatyczne rozwiązywanie zależności. Najważniejsze przełączniki: refresh: Odświeża listę pakietów dostępnych w repozytoriach update: Aktualizuje zainstalowane pakiety do najnowszych wersji install: Instaluje podany pakiet remove: Usuwa podany pakiet search: Wyszukuje pakiety zawierające podane słowo kluczowe pacman Pacman to narzędzie do zarządzania pakietami w dystrybucji Arch Linux. Umożliwia instalację, usuwanie i aktualizację pakietów z repozytoriów systemu Arch. Podobnie jak inne narzędzia, pacman pozwala na automatyczne rozwiązywanie zależności między pakietami. Portage Portage to narzędzie do zarządzania pakietami w dystrybucji Gentoo Linux. Jest to zaawansowane narzędzie, które pozwala na kompilację oprogramowania ze źródeł i dostosowywanie parametrów instalacji. Portage obsługuje także automatyczne rozwiązywanie zależności. pkg (Package Management Tool) pkg to narzędzie do zarządzania pakietami w dystrybucji FreeBSD oraz innych systemach z rodziny BSD. Umożliwia instalację, usuwanie i aktualizację pakietów binarnych oraz automatyczne rozwiązywanie zależności. Podsumowanie Choć omówione narzędzia mają wiele wspólnych funkcji, różnią się również pod względem wydajności, sposobu obsługi zależności czy interfejsu użytkownika. Ważne jest zrozumienie ich różnic, aby móc wybrać odpowiednie narzędzie do zarządzania pakietami na danej dystrybucji. apt, apt-get, apt-cache i aptitude są używane głównie w dystrybucjach opartych na Debianie, takich jak Ubuntu. Aptitude oferuje interfejs tekstowy, który ułatwia wyszukiwanie i zarządzanie pakietami. dpkg i rpm to niskopoziomowe narzędzia, które pozwalają na instalację pakietów bezpośrednio z plików .deb i .rpm, ale nie obsługują automatycznego rozwiązywania zależności. yum, dnf i zypper są używane w dystrybucjach opartych na Red Hat (Fedora, CentOS, RHEL) oraz openSUSE. Dnf, jako następca yum, wprowadza usprawnienia w rozwiązywaniu zależności i szybkości pobierania pakietów. Wybór odpowiedniego narzędzia do zarządzania pakietami zależy od dystrybucji systemu Linux, którego używasz, oraz od Twoich potrzeb i preferencji. Oto kilka wskazówek, które mogą pomóc w podjęciu decyzji: Sprawdź, jakie narzędzia są dostępne w Twojej dystrybucji: W niektórych dystrybucjach, takich jak Ubuntu, dostępne są różne narzędzia do zarządzania pakietami. Możesz wybrać apt, apt-get, apt-cache lub aptitude, w zależności od swoich preferencji. W innych dystrybucjach, takich jak Arch Linux, dostępne jest jedno główne narzędzie – pacman. Zdecyduj, czy potrzebujesz zaawansowanych funkcji: Niektóre narzędzia, takie jak Portage w Gentoo Linux, oferują zaawansowane funkcje, takie jak kompilacja oprogramowania ze źródeł czy dostosowywanie parametrów instalacji. Jeśli potrzebujesz takich funkcji, warto wybrać dystrybucję i narzędzie, które je oferują. Uwzględnij wydajność i łatwość obsługi: Niektóre narzędzia, takie jak dnf, są szybsze i lepiej radzą sobie z rozwiązywaniem zależności niż ich poprzednicy (np. yum). Jeśli zależy Ci na wydajności, warto wybrać nowsze narzędzie do zarządzania pakietami. Weź pod uwagę wsparcie społeczności: Popularne narzędzia do zarządzania pakietami mają większą społeczność użytkowników i deweloperów, co może ułatwić rozwiązywanie problemów i znalezienie pomocy w razie potrzeby. Przy wyborze narzędzia warto sprawdzić, jak aktywna jest jego społeczność. W artykule omówiliśmy kilka różnych narzędzi do zarządzania pakietami w systemach Linux, ich historię i ewolucję, a także mniej popularne narzędzia. Przedstawiliśmy podstawowe przełączniki i funkcje każdego narzędzia oraz podaliśmy przykłady użycia. Kiedy wykorzystujesz system Linux, kluczowe jest zrozumienie, jakie narzędzie do zarządzania pakietami jest używane w Twojej dystrybucji. W ten sposób będziesz mógł efektywnie zarządzać oprogramowaniem i utrzymywać swój system w aktualnym i bezpiecznym stanie.

  • Checkov - zastosowanie narzędzia do analizy infrastruktury jako kodu

    W dzisiejszych czasach, kiedy rośnie znaczenie infrastruktury jako kodu (IaC - Infrastructure as Code) w praktykach DevOps, kluczowe jest, aby utrzymać wysoki poziom bezpieczeństwa i jakości kodu. W odpowiedzi na te potrzeby powstało narzędzie o nazwie Checkov, które od swojego powstania zyskało szerokie uznanie w środowisku deweloperskim. W niniejszym artykule przyjrzymy się historii tego narzędzia oraz zastosowaniom, do których jest wykorzystywane. Checkov został stworzony przez firmę Bridgecrew, startup założony w 2019 roku, który specjalizuje się w tworzeniu narzędzi do automatyzacji bezpieczeństwa i zarządzania infrastrukturą jako kodem. Bridgecrew zauważył, że wiele narzędzi do analizy statycznej kodu źródłowego (SAST) nie radziło sobie z wykrywaniem potencjalnych zagrożeń bezpieczeństwa w kodzie IaC. W odpowiedzi na te niedostatki powstał Checkov, który miał za zadanie zaspokoić rosnące potrzeby deweloperów w zakresie analizy bezpieczeństwa kodu IaC. Checkov został oficjalnie opublikowany w grudniu 2019 roku jako narzędzie open-source dostępne na licencji Apache 2.0. Od tego czasu zyskał ogromne uznanie w społeczności deweloperskiej, a liczba jego użytkowników stale rośnie. Główne zastosowania Checkov Checkov jest narzędziem do analizy statycznej kodu źródłowego, które sprawdza konfigurację IaC pod kątem (nie)zgodności z najlepszymi praktykami w zakresie bezpieczeństwa, zgodności i wydajności. Narzędzie to obsługuje wiele popularnych formatów IaC, takich jak Terraform, CloudFormation, Kubernetes, Serverless Framework, AWS CDK i inne. Bezpieczeństwo Checkov pozwala deweloperom na wykrywanie potencjalnych zagrożeń bezpieczeństwa w ich konfiguracjach IaC. Narzędzie porównuje konfiguracje z zasadami zdefiniowanymi w ramach polityk bezpieczeństwa. Jeśli Checkov znajdzie jakiekolwiek niezgodności, generuje raport wskazujący problematyczne miejsca, co umożliwia szybką identyfikację i naprawę potencjalnych zagrożeń. Polityki są oparte na wytycznych CIS (Center for Internet Security) i innych standardach branżowych, co zapewnia wykrywanie aktualnych zagrożeń. Zgodność Wraz z rosnącą liczbą przepisów dotyczących ochrony danych, takich jak GDPR, HIPAA czy CCPA, przedsiębiorstwa muszą dbać o zgodność swojej infrastruktury z obowiązującymi regulacjami. Checkov sprawdza, czy konfiguracje IaC są zgodne z wymogami zgodności, co pomaga w utrzymaniu wysokich standardów i minimalizacji ryzyka naruszenia przepisów. Wydajność Oprócz sprawdzania zgodności z politykami bezpieczeństwa i zgodności, Checkov pozwala na optymalizację infrastruktury pod kątem wydajności. W rezultacie można znacznie zmniejszyć koszty operacyjne, przyspieszyć wdrażanie aplikacji oraz ułatwić zarządzanie infrastrukturą. Integracja z narzędziami CI/CD Checkov może być zintegrowany z różnymi narzędziami ciągłej integracji i dostarczania (CI/CD), takimi jak Jenkins, GitLab, GitHub Actions czy CircleCI. Integracja z narzędziami CI/CD pozwala na automatyczne sprawdzanie konfiguracji IaC podczas procesu wdrażania, co zapewnia bieżącą kontrolę jakości i bezpieczeństwa. Własne polityki Deweloperzy mogą tworzyć własne polityki sprawdzające, które są dostosowane do ich specyficznych potrzeb. Dzięki temu możliwe jest zapewnienie, że konfiguracje IaC są zgodne z wewnętrznymi wymogami przedsiębiorstwa. Przełączniki polecenia Checkov -d, --directory: Określa katalog, w którym Checkov przeprowadzi analizę. Można go użyć, gdy chcesz przetestować tylko część swojej infrastruktury. Przykład: checkov -d my_terraform_module/ -f, --file: Określa pojedynczy plik do analizy. Przydatne, gdy chcesz przetestować tylko konkretny plik IaC. Przykład: checkov -f my_terraform_file.tf -c, --check: Wykonuje tylko wybrane sprawdzenia. Przydatne, gdy chcesz skupić się na konkretnych zagadnieniach bezpieczeństwa lub zgodności. Przykład: checkov -c CKV_AWS_20,CKV_AWS_23 --skip-check: Pomija wybrane sprawdzenia. Można go użyć, gdy chcesz zignorować konkretne zasady, które uważasz za nieistotne dla swojego projektu. Przykład: checkov --skip-check CKV_AWS_20,CKV_AWS_23 --output: Określa format raportu wynikowego. Domyślnie wyniki są wyświetlane jako tekst konsoli, ale Checkov obsługuje również inne formaty, takie jak JSON, JUnit XML, CSV, GitHub Markdown i SARIF. Przykład: checkov --output json --output-file: Zapisuje raport wynikowy do pliku. Przydatne, gdy chcesz zachować wyniki analizy dla dalszego przetwarzania lub przeglądania. Przykład: checkov --output-file checkov_report.json --quiet: Ukrywa wyniki analizy w konsoli, pokazując jedynie informacje o powodzeniu lub niepowodzeniu. Przydatne, gdy chcesz skupić się tylko na ogólnym wyniku analizy. Przykład: checkov --quiet --external-checks-dir: Określa katalog z dodatkowymi zasadami sprawdzania. Można go użyć, gdy chcesz dodać własne, niestandardowe zasady do analizy Checkov. Przykład: checkov --external-checks-dir my_custom_checks/ --framework: Określa ramy, na których ma się skupić Checkov. Przydatne, gdy chcesz ograniczyć analizę do konkretnego języka IaC lub platformy. Przykład: checkov --framework terraform --download-external-modules: Pobiera zewnętrzne moduły Terraform przed wykonaniem analizy. Niezbędne, gdy analizowany kod Terraform korzysta z modułów zewnętrznych. Przykład: checkov --download-external-modules --repo-root-for-plan-enforcement: Określa ścieżkę do głównego katalogu repozytorium. Używane wraz z --download-external-modules, umożliwia analizę kodu Terraform, który zawiera odwołania do zewnętrznych modułów, stosując do nich lokalne zasady. Przykład: checkov --repo-root-for-plan-enforcement . --download-external-modules --soft-fail: Pozwala zakończyć analizę Checkov kodem wyjścia 0, nawet jeśli niektóre sprawdzenia nie powiodły się. Przydatne, gdy chcesz uniknąć przerwania procesu CI/CD z powodu niepowodzenia sprawdzeń Checkov. Przykład: checkov --soft-fail Zapraszam na kurs - po więcej Zastosowanie przełączników polecenia Checkov Przełączniki polecenia Checkov umożliwiają elastyczność w zakresie konfiguracji analizy infrastruktury jako kodu. Można je stosować w różnych scenariuszach, takich jak: Skupienie się na konkretnych zagadnieniach bezpieczeństwa lub zgodności, ograniczając analizę do wybranych zasad. Ignorowanie nieistotnych sprawdzeń lub tych, które zostały już zaakceptowane jako wyjątki. Zapisywanie wyników analizy w formacie JSON, CSV lub innych, umożliwiając ich dalsze przetwarzanie przez inne narzędzia lub przeglądanie przez zespół. Rozszerzenie zestawu zasad sprawdzania o własne, niestandardowe zasady, które są istotne dla projektu. Checkov to potężne narzędzie do statycznej analizy infrastruktury jako kodu, które oferuje szeroką gamę przełączników polecenia, umożliwiających elastyczną konfigurację analizy. Przełączniki te pozwalają na dostosowanie Checkov do indywidualnych potrzeb projektu i zespołu, zwiększając efektywność analizy i łatwość zarządzania infrastrukturą. Wykorzystanie przełączników polecenia Checkov pozwala na lepsze wykorzystanie możliwości narzędzia i osiągnięcie szybszego rozwoju oraz wyższego poziomu bezpieczeństwa w projektach opartych na infrastrukturze jako kodzie. W praktyce przełączniki polecenia Checkov są często używane w procesach CI/CD, gdzie różne zespoły mogą wymagać różnych konfiguracji sprawdzeń. Integracja Checkov z narzędziami takimi jak Jenkins, GitHub Actions czy GitLab CI pozwala na automatyczne uruchamianie analizy zgodności i bezpieczeństwa w trakcie procesu wdrażania. Wprowadzenie przełączników polecenia Checkov do procesu CI/CD pozwala na wykrywanie potencjalnych problemów związanych z bezpieczeństwem, zgodnością i wydajnością na wczesnym etapie procesu wdrażania. Dzięki temu zespoły mogą szybko reagować na wykryte problemy i zminimalizować ryzyko wprowadzenia błędów do środowiska produkcyjnego. Ponadto, stosowanie przełączników Checkov umożliwia dostosowanie analizy do indywidualnych potrzeb zespołu oraz lepsze zarządzanie wyjątkami i niestandardowymi zasadami. Wykorzystując te przełączniki, zespoły deweloperskie mogą uzyskać większą kontrolę nad analizą infrastruktury jako kodu, lepiej dostosowując narzędzie do swoich potrzeb i wymagań. W efekcie, Checkov staje się jeszcze bardziej wartościowym narzędziem w arsenale praktyk DevOps, pomagając zespołom w osiągnięciu wyższego poziomu jakości i bezpieczeństwa w ich projektach. Checkov - troche praktycznie W erze DevOps, automatyzacja procesów związanych z jakością i bezpieczeństwem kodu jest kluczowa dla sukcesu każdego projektu. Zobaczymy, jak zintegrować narzędzie Checkov z popularnym systemem ciągłej integracji Jenkins, aby automatycznie sprawdzać konfigurację infrastruktury jako kodu (IaC) podczas procesu budowy i wdrażania. Przygotowaliśmy również przykłady konfiguracji, które pomogą wdrożyć tę integrację w praktyce. Integracja Checkov z Jenkins Aby zintegrować Checkov z Jenkins, należy wykonać następujące kroki Instalacja Checkov Zainstaluj Checkov na maszynie, na której działa Jenkins, korzystając z jednej z dostępnych metod instalacji. Możesz użyć pip (Python Package Manager) lub innego menedżera pakietów, takiego jak Docker. Poniżej znajduje się przykład instalacji Checkov za pomocą pip: Konfiguracja Jenkins Po zainstalowaniu Checkov na maszynie z Jenkins, przystąp do konfiguracji Jenkins, aby uruchamiać Checkov podczas budowy projektu. Aby to zrobić, wykonaj następujące kroki: Utwórz nowy projekt w Jenkins lub edytuj istniejący, do którego chcesz dodać Checkov. W sekcji "Build" (Budowa) projektu, dodaj nowe zadanie "Execute shell" (Wykonaj polecenia powłoki) lub "Execute Windows batch command" (Wykonaj polecenia wsadowe Windows) w zależności od używanego systemu operacyjnego. W polu "Command" (Polecenie) dla nowo dodanego zadania, wprowadź polecenie, które uruchomi Checkov dla Twojego projektu. Poniżej znajduje się przykład dla projektu Terraform: Zastąp <ścieżka_do_katalogu_z_kodem> rzeczywistą ścieżką do katalogu zawierającego pliki konfiguracyjne IaC. Jeśli chcesz, aby wynik analizy Checkov był dostępny jako artefakt budowy, dodaj następujący kod do polecenia: Ten fragment spowoduje zapisanie wyników analizy Checkov do pliku o nazwie checkov_report.json. W sekcji "Post-build Actions" (Działania po budowie) projektu, dodaj nową akcję "Archive the artifacts" (Archiwizuj artefakty), a następnie wprowadź nazwę pliku z wynikami analizy (w tym przypadku checkov_report.json) w polu " Files to archive" (Pliki do archiwizacji). Dzięki temu plik z wynikami analizy Checkov zostanie zarchiwizowany jako artefakt po zakończeniu budowy. Uruchomienie i monitorowanie wyników Po zakończeniu konfiguracji Jenkins, uruchom budowę projektu. Jenkins automatycznie uruchomi Checkov wraz z innymi zadaniami, a wynik analizy Checkov będzie dostępny jako artefakt budowy. Możesz monitorować postęp budowy i sprawdzić wynik analizy Checkov w zakładce "Console Output" (Wyjście konsoli) dla danej budowy. W przypadku wykrycia niezgodności z zasadami bezpieczeństwa, zgodności lub wydajności, Checkov zwróci błąd i budowa zostanie oznaczona jako nieudana. Dzięki temu zespół deweloperski może szybko zidentyfikować i naprawić problemy, zanim zostaną wprowadzone do środowiska produkcyjnego. Przykład: Integracja Checkov z Jenkins dla projektu Terraform Poniżej znajduje się przykład konfiguracji zadania Jenkins dla projektu Terraform z użyciem Checkov: W powyższym przykładzie, Checkov analizuje pliki konfiguracyjne Terraform w katalogu ./terraform i zapisuje wynik analizy do pliku checkov_report.json. Terraform i IaC Automatyzacja procesu wdrażania infrastruktury jest kluczowa dla osiągnięcia szybkości i niezawodności w praktykach DevOps. Zobaczymy, jak zintegrować Terraform z Jenkins, aby automatycznie wdrażać maszyny wirtualne w chmurze DigitalOcean. Przedstawimy sposób konfiguracji trzech połączonych ze sobą zadań Jenkins, które odpowiednio wykonają polecenia terraform validate, terraform plan oraz terraform apply. Przygotowanie środowiska Upewnij się, że masz zainstalowany Terraform oraz Jenkins na swojej maszynie. Skonfiguruj dostęp do swojego konta DigitalOcean, tworząc token API i przechowując go jako zmienną środowiskową DIGITALOCEAN_TOKEN na maszynie, na której działa Jenkins. Utwórz prosty projekt Terraform, który tworzy maszynę wirtualną w DigitalOcean. Przykładowy plik main.tf może wyglądać tak: Utwórz plik variables.tf z definicją zmiennej do_token: Konfiguracja Jenkins Job 1: Terraform Validate Utwórz nowy zadanie typu "Pipeline" o nazwie "terraform-validate". W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod: Job 2: Terraform Plan Utwórz kolejne zadanie typu "Pipeline" o nazwie "terraform-plan". W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod: Job 3: Terraform Apply Utwórz ostatnie zadanie typu "Pipeline" o nazwie "terraform-apply". W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod: Uruchomienie procesu Po skonfigurowaniu wszystkich zadań Jenkins, uruchom zadanie "terraform-validate". Jeśli walidacja kodu Terraform przebiegnie pomyślnie, automatycznie zostaną uruchomione zadania "terraform-plan" i "terraform-apply", które odpowiednio zapiszą plan działania Terraform do pliku tfplan oraz zastosują plan/apply w celu utworzenia maszyny wirtualnej w DigitalOcean. Dodanie checkov do konfiguracji Job: Checkov Analysis a. Utwórz nowe zadanie typu "Pipeline" o nazwie "checkov-analysis". b. W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod: Aktualizacja pozostałych zadań Jenkins a. Edytuj zadanie "terraform-validate" i dodaj sekcję triggers, która wygląda następująco: Wykonaj podobne zmiany w zadaniach "terraform-plan" i "terraform-apply", dodając sekcję triggers z odpowiednimi wartościami upstreamProjects (odpowiednio "terraform-validate" i "terraform-plan"). Po skonfigurowaniu wszystkich zadań Jenkins, uruchom zadanie "checkov-analysis". Jeśli analiza Checkov zakończy się powodzeniem, kolejno zostaną uruchomione zadania "terraform-validate", "terraform-plan" i "terraform-apply", które odpowiednio zwalidują, zaplanują i wdrożą infrastrukturę za pomocą Terraform. W przypadku wykrycia niezgodności z zasadami bezpieczeństwa, zgodności lub wydajności przez Checkov, zadanie "checkov-analysis" zakończy się niepowodzeniem, a raport z wynikami analizy zostanie zarchiwizowany jako artefakt. Pozostałe zadania Terraform nie zostaną uruchomione, dopóki nie zostaną naprawione wykryte problemy. Podsumowanie W niniejszym artykułu przedstawiliśmy, Checkov oraz jak dodać analizę Checkov do procesu automatyzacji wdrażania maszyn wirtualnych w chmurze DigitalOcean za pomocą Terraform i Jenkins. Integracja Checkov z Jenkins umożliwia automatyczne sprawdzanie konfiguracji infrastruktury jako kodu podczas procesu budowy i wdrażania, co zwiększa efektywność, niezawodność oraz bezpieczeństwo. Dzięki dodaniu warstwy walidacji bezpieczeństwa i zgodności za pomocą Checkov, zespoły deweloperskie mogą utrzymać wysoką jakość i bezpieczeństwo kodu, jednocześnie skracając czas potrzebny na identyfikację i naprawę problemów. Ponadto integracja Checkov z Terraform i Jenkins pozwala na łatwe zarządzanie i monitorowanie procesu automatyzacji, co przyczynia się do poprawy jakości i bezpieczeństwa wdrażanej infrastruktury. Całkowity proces automatyzacji, obejmujący analizę Checkov oraz walidację, planowanie i wdrażanie infrastruktury za pomocą Terraform, umożliwia zespołom deweloperskim pełne wykorzystanie zalet infrastruktury jako kodu i praktyk DevOps, jednocześnie redukując ryzyko wprowadzenia błędów do środowiska produkcyjnego. Oczywiscie więcej takich przykładów w kursie terraform na platformie Szkolenia.Cloud

  • Przydatne polecania dla każdego - Linux part 1

    Polecenie top top pozwala nam podejrzeć aktualną zajętość systemu poprzez procesy, wykorzystanie pamięci wirtualnej oraz CPU. Możemy sprawdzić takie wartości jak dostępna pamięć RAM, który użytkownik generuje obciążenie maszyny, lub jaki proces zabiera najwięcej zasobów. Doświadczeni użytkownicy lub obeznani wiedzą że polecenie to zwraca więcej informacji z sudo lub na użytkowniku root, musisz pamiętać że, to co widzisz często ogranicza cię z punktu widzenia użytkownika. Procesy danego użytkownika można podejrzeć przez wariacje polecania z argumentem -u i wartością w postaci nazwy użytkownika. top -u Kolumny wyświetlają odpowiednio: PID: Pokazuje unikalny identyfikator procesu zadania. PR: Priorytet procesu. Im niższy numer, tym wyższy priorytet. VIRT: Całkowita pamięć wirtualna używana przez zadanie. USER: Nazwa użytkownika właściciela zadania. %CPU: Reprezentuje użycie procesora. TIME+: Czas procesora, taki sam jak „TIME”, ale odzwierciedlający większą szczegółowość do setnych części sekundy. SHR: Reprezentuje rozmiar pamięci współdzielonej (kb) używanej przez zadanie. NI: Reprezentuje wartość nice zadania. Ujemna wartość Nice oznacza wyższy priorytet, a dodatnia wartość Nice oznacza niższy priorytet. %MEM: Pokazuje wykorzystanie pamięci przez zadanie. RES: Ile fizycznej pamięci RAM zużywa proces, mierzone w kilobajtach. COMMAND: Nazwa polecenia, które rozpoczęło proces. Oczywiście do zgłębiania wszystkich opcji można skorzystać z man top lub top -h Polecenie ls Systemy operacyjne Linux są szeroko stosowane zarówno w środowiskach domowych, jak i korporacyjnych. Jednym z najbardziej podstawowych, lecz niezwykle użytecznych poleceń w systemach Linux jest polecenie 'ls', które pozwala na wyświetlanie zawartości katalogów. W tym artykule przyjrzymy się poleceniu 'ls' wraz z opisem poszczególnych atrybutów (przełączników) i przykładami ich zastosowania. Podstawy polecenia 'ls' Polecenie 'ls' jest używane do wyświetlania informacji na temat plików i katalogów w bieżącym katalogu. Bez żadnych argumentów, 'ls' wyświetla zawartość bieżącego katalogu, posortowaną alfabetycznie: $ ls Przełączniki i atrybuty polecenia 'ls' Przełączniki (atrybuty) pozwalają na modyfikację zachowania polecenia 'ls'. Oto niektóre z najczęściej używanych: '-a' lub '--all': Wyświetla wszystkie pliki, w tym ukryte pliki (rozpoczynające się od kropki) $ ls -a '-l': Wyświetla szczegółowe informacje na temat plików, w tym prawa dostępu, ilość dowiązań, właściciela, grupę, rozmiar, datę modyfikacji i nazwę $ ls -l '-h' lub '--human-readable': Wyświetla rozmiary plików w formacie łatwym do odczytania (KB, MB, GB) $ ls -lh '-r' lub '--reverse': Odwraca kolejność sortowania $ ls -lr '-S': Sortuje pliki według rozmiaru $ ls -lS '-t': Sortuje pliki według czasu modyfikacji $ ls -lt '-R' lub '--recursive': Wyświetla zawartość katalogów rekurencyjnie $ ls -R '-d' lub '--directory': Wyświetla informacje na temat samych katalogów, a nie ich zawartości $ ls -ld '-1': Wyświetla jeden plik na wiersz $ ls -1 Przykłady użycia polecenia 'ls' Poniżej znajdują się przykłady łączenia różnych atrybutów polecenia 'ls': Wyświetlanie szczegółowych informacji o plikach w formacie łatwym do odczytania: $ ls -lh Wyświetlanie wszystkich plików, w tym ukrytych, z posortowanymi według rozmiaru: $ ls -laS Wyświetlanie plików posortowanych według czasu modyfikacji, z odwróconą kolejnością i w formacie łatwym do odczytania: $ ls -lhtr Wyświetlanie zawartości katalogów rekurencyjnie, z jednym plikiem na wiersz: $ ls -R1 Wyświetlanie informacji na temat katalogu '/etc', zamiast jego zawartości: $ ls -ld /etc Filtrowanie wyników polecenia 'ls' Można również łączyć polecenie 'ls' z innymi poleceniami, aby filtrować wyniki. Oto kilka przykładów: Wyszukiwanie plików z rozszerzeniem '.txt': $ ls -l *.txt Wyszukiwanie plików zaczynających się od 'config': $ ls -l config* Wyświetlanie plików zawierających słowo 'sample', korzystając z polecenia 'grep': $ ls -l | grep 'sample' Zmiana kolorów wyjścia polecenia 'ls' Polecenie 'ls' można skonfigurować, aby wyświetlać wyniki w różnych kolorach, co może pomóc w szybszym zrozumieniu struktury katalogów. Aby to zrobić, można ustawić zmienną środowiskową 'LS_COLORS'. Na przykład: $ export LS_COLORS="di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:" Polecenie 'ls' jest jednym z najbardziej podstawowych i użytecznych poleceń w systemach Linux. Pozwala na szybkie przeglądanie zawartości katalogów, a różne atrybuty (przełączniki) umożliwiają precyzyjne dostosowanie wyjścia do potrzeb użytkownika. Dzięki łączeniu polecenia 'ls' z innymi poleceniami, takimi jak 'grep', można filtrować wyniki i wyszukiwać określone pliki. Omówiliśmy podstawowe funkcje polecenia 'ls', różne atrybuty (przełączniki) dostępne dla tego polecenia, przykłady ich zastosowania, a także sposoby na filtrowanie wyników i dostosowywanie kolorów wyjścia. Znajomość polecenia 'ls' i jego atrybutów jest niezbędna dla każdego użytkownika systemu Linux, zarówno początkujących, jak i zaawansowanych. Mając na uwadze, że polecenie 'ls' jest powszechnie stosowane w codziennych czynnościach związanych z zarządzaniem plikami i katalogami, warto poświęcić czas na naukę różnych przełączników i technik, które można zastosować, aby uczynić korzystanie z terminala bardziej efektywnym i wydajnym. Tar: Archiwizacja i kompresja plików w Linuksie Tar, czyli "tape archive", to popularne narzędzie linuksowe służące do archiwizowania i kompresji plików. Choć początkowo było używane do zapisywania danych na taśmach magnetycznych, dziś stało się niezastąpionym narzędziem dla administratorów systemów, programistów i użytkowników domowych. W tym artykule przyjrzymy się funkcjom polecenia tar oraz różnym przełącznikom, które można zastosować, aby uprościć i przyspieszyć proces archiwizacji i kompresji plików. Podstawowe użycie polecenia tar Podstawowe użycie polecenia tar polega na utworzeniu archiwum z wybranych plików lub katalogów. Składnia polecenia jest następująca: tar [opcje] [nazwa_archiwum.tar] [pliki_do_archiwizacji] Oto kilka przykładów użycia tar: Archiwizacja pojedynczego pliku: tar -cvf archiwum.tar plik.txt W tym przypadku, -c oznacza "create" (utwórz), -v to "verbose" (tryb szczegółowy) oraz -f to "file" (plik). Utworzyliśmy archiwum o nazwie "archiwum.tar" zawierające plik "plik.txt". Archiwizacja wielu plików: tar -cvf archiwum.tar plik1.txt plik2.txt plik3.txt Analogicznie, tworzymy archiwum "archiwum.tar", które będzie zawierać pliki "plik1.txt", "plik2.txt" oraz "plik3.txt". Archiwizacja katalogu: tar -cvf archiwum.tar katalog/ W tym przypadku archiwizujemy cały katalog "katalog/" do pliku "archiwum.tar". Kompresja plików z użyciem tar Tar pozwala na kompresję plików w trakcie archiwizacji. Dostępne są dwa popularne formaty kompresji: gzip (z rozszerzeniem .tar.gz) i bzip2 (z rozszerzeniem .tar.bz2). Oto jak skorzystać z tych formatów: Kompresja gzip: tar -czvf archiwum.tar.gz katalog/ Dodaliśmy przełącznik -z oznaczający kompresję gzip. Utworzony plik będzie miał rozszerzenie ".tar.gz". Kompresja bzip2: tar -cjvf archiwum.tar.bz2 katalog/ W tym przypadku używamy przełącznika -j dla kompresji bzip2. Utworzony plik będzie miał rozszerzenie ".tar.bz2". Wypakowywanie archiwów tar Aby wypakować archiwum tar, możemy użyć następujących przełączników: Wypakowywanie archiwum tar: tar -xvf archiwum.tar Przełącznik -x oznacza "extract" (wypakuj). Wypakujemy zawartość archiwum "archiwum.tar" do bieżącego katalogu. Wypakowywanie archiwum tar.gz: tar -xzvf archiwum.tar.gz Dodajemy przełącznik -z dla obsługi kompresji gzip. Wypakujemy zawartość archiwum "archiwum.tar.gz" do bieżącego katalogu. Wypakowywanie archiwum tar.bz2: tar -xjvf archiwum.tar.bz2 Używamy przełącznika -j dla obsługi kompresji bzip2. Wypakowujemy zawartość archiwum "archiwum.tar.bz2" do bieżącego katalogu. Wypakowywanie archiwów do określonego katalogu Jeśli chcemy wypakować archiwum do innego katalogu niż bieżący, możemy użyć przełącznika -C: tar -xvf archiwum.tar -C /ścieżka/do/katalogu/ Wypakowujemy zawartość archiwum "archiwum.tar" do katalogu "/ścieżka/do/katalogu/". Podobnie, dla archiwów tar.gz i tar.bz2, dodajemy odpowiednio przełączniki -z i -j. Wyświetlanie zawartości archiwum bez wypakowywania Aby wyświetlić zawartość archiwum tar bez wypakowywania, używamy przełącznika -t: tar -tvf archiwum.tar Dla archiwów tar.gz i tar.bz2, dodajemy odpowiednio przełączniki -z i -j. Dodawanie plików do istniejącego archiwum Jeśli chcemy dodać pliki do istniejącego archiwum, używamy przełącznika -r: tar -rvf archiwum.tar nowy_plik.txt Należy pamiętać, że opcja -r nie działa z archiwami skompresowanymi (tar.gz i tar.bz2). Usuwanie plików z archiwum Aby usunąć pliki z archiwum, możemy skorzystać z narzędzia tar w połączeniu z grep i xargs: tar -tvf archiwum.tar | grep -v 'plik_do_usunięcia' | tar -czvf nowe_archiwum.tar.gz -T - Powyższe polecenie utworzy nowe skompresowane archiwum "nowe_archiwum.tar.gz" bez pliku "plik_do_usunięcia". Polecenie tar jest niezwykle wszechstronnym narzędziem pozwalającym na archiwizację, kompresję oraz zarządzanie plikami i katalogami w systemach Linux. Umożliwia tworzenie archiwów tar, tar.gz i tar.bz2, a także ich wypakowywanie, przeglądanie i modyfikowanie. Omówiliśmy podstawowe opcje polecenia tar, takie jak tworzenie archiwów, kompresowanie plików, wypakowywanie archiwów, wyświetlanie zawartości archiwów, dodawanie i usuwanie plików z archiwów oraz wypakowywanie archiwów do określonego katalogu. Zastosowanie tych opcji pozwala na efektywne zarządzanie plikami i katalogami w codziennej pracy z systemami Linux. Warto jednak pamiętać, że polecenie tar posiada wiele innych przełączników, które mogą być przydatne w różnych sytuacjach. W razie potrzeby warto zapoznać się z dokumentacją polecenia tar, aby odkryć jeszcze więcej funkcji tego niezastąpionego narzędzia. Aby uzyskać więcej informacji na temat polecenia tar oraz jego opcji, można skorzystać z oficjalnej dokumentacji, wpisując w terminalu: man tar Lub odwiedzając stronę internetową projektu tar, dostępną pod adresem: https://www.gnu.org/software/tar/ cd, mkdir, chmod, chown, rm i zarządzanie uprawnieniami Systemy operacyjne oparte na Linuksie, takie jak Ubuntu, Debian, Fedora czy Arch, są szeroko wykorzystywane zarówno przez programistów, jak i administratorów systemów. Język poleceń linuksowych jest niezwykle potężnym narzędziem, które pozwala na kontrolowanie i zarządzanie systemem z poziomu terminala. Omówimy podstawowe polecenia linuksowe: cd, mkdir, chmod, chown, rm oraz przełączniki, które można z nimi używać. Dodatkowo, omówimy uprawnienia w systemie Linux oraz ich konstrukcję, wyjaśniając pojęcia takie jak użytkownik (user), grupa (group) i inne (other), a także rwx i zapis liczbowy, np. 777. Polecenie cd Polecenie "cd" (change directory) służy do zmiany bieżącego katalogu roboczego. Jest to podstawowe polecenie, które musisz znać, aby poruszać się po strukturze katalogów w systemie Linux. Oto kilka przykładów użycia polecenia cd: cd nazwa_katalogu: przechodzi do podanego katalogu. cd .. : przechodzi do katalogu nadrzędnego (rodzica). cd: przechodzi do katalogu domowego użytkownika. cd -: przechodzi do poprzedniego katalogu roboczego. Polecenie mkdir Polecenie "mkdir" (make directory) służy do tworzenia nowych katalogów. Aby utworzyć nowy katalog, po prostu wpisz "mkdir" oraz nazwę katalogu, który chcesz utworzyć. Oto kilka przykładów użycia polecenia mkdir: mkdir nazwa_katalogu: tworzy nowy katalog o podanej nazwie. mkdir -p sciezka/do/katalogu: tworzy katalog wraz z całą strukturą katalogów, jeśli nie istnieją. mkdir -m 755 nazwa_katalogu: tworzy katalog z określonymi uprawnieniami (w tym przypadku 755). Polecenie chmod Polecenie "chmod" (change mode) służy do zmiany uprawnień plików i katalogów. W systemach Linux uprawnienia są zdefiniowane dla trzech kategorii: użytkowników (user), grup (group) i innych (other). Każdej z tych kategorii można przydzielić trzy rodzaje uprawnień: odczyt (r), zapis (w) i wykonanie (x). Uprawnienia te są zapisywane za pomocą trzech cyfr, gdzie każda cyfra reprezentuje uprawnienia dla jednej z kategorii (użytkownik, grupa, inne). Aby zmienić uprawnienia pliku lub katalogu, użyj polecenia chmod, podając upania oraz ścieżkę do pliku lub katalogu. Oto kilka przykładów użycia polecenia chmod: chmod 755 nazwa_pliku: zmienia uprawnienia pliku na 755 (użytkownik: rwx, grupa: r-x, inne: r-x). chmod u+x nazwa_pliku: dodaje uprawnienia do wykonania (x) dla właściciela pliku. chmod g-w nazwa_pliku: usuwa uprawnienia do zapisu (w) dla grupy pliku. chmod o=r nazwa_pliku: ustawia uprawnienia dla innych (other) na tylko do odczytu (r). Polecenie chown Polecenie "chown" (change owner) pozwala na zmianę właściciela pliku lub katalogu oraz grupy, do której należy plik lub katalog. Aby zmienić właściciela lub grupę, użyj polecenia chown, podając nowego właściciela, nową grupę oraz ścieżkę do pliku lub katalogu. Oto kilka przykładów użycia polecenia chown: chown nowy_wlasciciel nazwa_pliku: zmienia właściciela pliku na nowego właściciela. chown :nowa_grupa nazwa_pliku: zmienia grupę pliku na nową grupę. chown nowy_wlasciciel:nowa_grupa nazwa_pliku: zmienia zarówno właściciela, jak i grupę pliku na podane wartości. chown -R nowy_wlasciciel:nowa_grupa katalog: zmienia właściciela i grupę dla katalogu oraz wszystkich jego zawartości rekurencyjnie. Polecenie rm Polecenie "rm" (remove) służy do usuwania plików i katalogów. Aby usunąć plik lub katalog, użyj polecenia rm, podając ścieżkę do pliku lub katalogu. Oto kilka przykładów użycia polecenia rm: rm nazwa_pliku: usuwa plik o podanej nazwie. rm -f nazwa_pliku: usuwa plik o podanej nazwie bez pytania o potwierdzenie. rm -r katalog: usuwa katalog oraz jego zawartość rekurencyjnie. rm -rf katalog: usuwa katalog oraz jego zawartość rekurencyjnie i bez pytania o potwierdzenie. Uprawnienia w systemie Linux Jak wcześniej wspomniano, uprawnienia w systemie Linux są zdefiniowane dla trzech kategorii: użytkowników (user), grup (group) i innych (other). Każdej z tych kategorii można przydzielić trzy rodzaje uprawnień: odczyt (r), zapis (w) i wykonanie (x). Uprawnienia te są zapisywane za pomocą trzech cyfr, gdzie każda cyfra reprezentuje uprawnienia dla jednej z kategorii (użytkownik, grupa, inne). Użytkownik (user): osoba, która jest właścicielem pliku lub katalogu. Właściciel ma największą kontrolę nad plikiem lub katalogiem i może zmieniać jego uprawnienia oraz właściciela i grupę. Grupa (group): zbiór użytkowników, którzy mają wspólne uprawnienia do plików i katalogów. Członkowie grupy mogą mieć dostęp do plików i katalogów na podstawie uprawnień przydzielonych grupie. Inne (other): wszyscy pozostali użytkownicy, którzy nie są właścicielami pliku ani nie należą do grupy, do której należy plik lub katalog. Uprawnienia dla innych określają, co mogą robić z plikiem lub katalogiem pozostali użytkownicy systemu. Każda z trzech cyfr uprawnień jest reprezentowana przez wartość liczbową w przedziale od 0 do 7, gdzie każda cyfra oznacza sumę wartości dla odczytu (r), zapisu (w) i wykonania (x) dla danej kategorii: Odczyt (r): wartość 4 Zapis (w): wartość 2 Wykonanie (x): wartość 1 W związku z tym uprawnienia można przedstawić jako trzy cyfry, gdzie każda cyfra jest sumą wartości dla odczytu, zapisu i wykonania. Na przykład, uprawnienia "rwxr-xr-x" można zapisać jako "755", gdzie pierwsza cyfra (7) oznacza pełne uprawnienia dla właściciela (4+2+1), druga cyfra (5) oznacza uprawnienia do odczytu i wykonania dla grupy (4+0+1), a trzecia cyfra (5) oznacza uprawnienia do odczytu i wykonania dla innych (4+0+1). Podstawowe polecenia linuksowe, takie jak cd, mkdir, chmod, chown, rm, oraz ich przełączniki. Przykłady zastosowania tych poleceń pomogą w lepszym zrozumieniu i sprawnej pracy z systemem Linux. Dodatkowo, przedstawiliśmy koncepcje uprawnień w systemie Linux oraz ich konstrukcję, wyjaśniając pojęcia użytkownik (user), grupa (group), inne (other) oraz rwx i zapis liczbowy, np. 777. Zrozumienie tych koncepcji oraz umiejętne korzystanie z poleceń pozwoli na efektywne zarządzanie systemem Linux oraz kontrolowanie dostępu do plików i katalogów. cp i mv Linux, jako system operacyjny oparty na Unixie, oferuje bogaty zestaw poleceń dostępnych z linii komend. Wśród tych poleceń, dwa z nich, cp i mv, są niezbędne do codziennego zarządzania plikami i katalogami. W tym artykule przedstawimy podstawy tych poleceń, ich przełączniki i praktyczne przykłady użycia. Polecenie cp Polecenie cp jest używane do kopiowania plików i katalogów. Składnia tego polecenia jest następująca: cp [OPCJE] ŹRÓDŁO... CEL Przełączniki polecenia cp Oto niektóre przydatne przełączniki dla polecenia cp: -r lub --recursive: Kopiuje katalogi rekursywnie. -i lub --interactive: Wypytuje użytkownika przed nadpisaniem istniejących plików. -n lub --no-clobber: Nie nadpisuje istniejących plików. -u lub --update: Kopiuje tylko, gdy plik źródłowy jest nowszy niż plik docelowy lub gdy plik docelowy nie istnieje. -v lub --verbose: Wyświetla informacje o kopiowanych plikach. Przykłady użycia polecenia cp Kopiowanie pojedynczego pliku do innego katalogu: cp plik.txt /katalog/docelowy Kopiowanie wielu plików do innego katalogu: cp plik1.txt plik2.txt /katalog/docelowy Kopiowanie katalogu rekursywnie: cp -r /katalog/źródłowy /katalog/docelowy Kopiowanie pliku z potwierdzeniem przed nadpisaniem: cp -i plik.txt /katalog/docelowy Aktualizacja plików w katalogu docelowym tylko wtedy, gdy plik źródłowy jest nowszy: cp -u plik.txt /katalog/docelowy Polecenie mv Polecenie mv służy do przenoszenia lub zmiany nazwy plików i katalogów. Składnia tego polecenia wygląda następująco: mv [OPCJE] ŹRÓDŁO... CEL Przełączniki polecenia mv Oto niektóre przydatne przełączniki dla polecenia mv: -i lub --interactive: Wypytuje użytkownika przed nadpisaniem istniejących plików. -n lub --no-clobber: Nie nadpisuje istniejących plików. -u lub --update: Przenosi tylko, gdy plik źródłowy jest nowszy niż plik docelowy lub gdy plik docelowy nie istnieje. -v lub --verbose: Wyświetla informacje o przenoszonych plikach. Przykłady użycia polecenia mv Zmiana nazwy pliku: mv stary_plik.txt nowy_plik.txt Przenoszenie pojedynczego pliku do innego katalogu: mv plik.txt /katalog/docelowy Przenoszenie wielu plików do innego katalogu: mv plik1.txt plik2.txt /katalog/docelowy Przenoszenie katalogu do innego katalogu: mv /katalog/źródłowy /katalog/docelowy Przenoszenie pliku z potwierdzeniem przed nadpisaniem: mv -i plik.txt /katalog/docelowy Aktualizacja plików w katalogu docelowym tylko wtedy, gdy plik źródłowy jest nowszy: mv -u plik.txt /katalog/docelowy Polecenia cp i mv są kluczowymi narzędziami dla każdego użytkownika systemu Linux. Pozwala na kopiowanie, przenoszenie i zmianę nazwy plików i katalogów z łatwością. W tym artykule przedstawiliśmy podstawy tych poleceń, ich przełączniki oraz praktyczne przykłady użycia. Pamiętaj, że zarówno polecenie cp, jak i mv mają jeszcze więcej opcji i przełączników, które można sprawdzić w oficjalnej dokumentacji. Zachęcamy do eksperymentowania z różnymi opcjami, aby znaleźć najlepsze rozwiązania dla swoich potrzeb. W miarę jak zdobędziesz doświadczenie z tymi poleceniami, zaczniesz doceniać ich elastyczność i potęgę, które pozwalają na zarządzanie plikami i katalogami w systemie Linux. ps Polecenie ps (process status) jest jednym z najważniejszych poleceń dostępnych w systemach Linux i Unix. Pozwala ono na monitorowanie aktywnych procesów, zarówno własnych, jak i innych użytkowników. W tym artykule omówimy podstawowe zastosowania polecenia ps, a także różne przełączniki i opcje, które możemy wykorzystać, aby uzyskać więcej informacji o działających procesach. Podstawowe użycie Najprostszym sposobem użycia polecenia ps jest wpisanie go bez żadnych dodatkowych argumentów. W ten sposób otrzymamy informacje o procesach, które są uruchomione w bieżącej sesji terminala. ps Wynik polecenia może wyglądać następująco: PID TTY TIME CMD 1932 pts/1 00:00:00 bash 1996 pts/1 00:00:00 ps Wynik przedstawia cztery kolumny: PID (Process ID) – identyfikator procesu. TTY – terminal, z którego uruchomiono proces. TIME – łączny czas procesora, który został zużyty przez proces. CMD – nazwa polecenia użytego do uruchomienia procesu. Przełączniki i opcje Polecenie ps posiada różne przełączniki i opcje, które można zastosować w celu uzyskania dodatkowych informacji o procesach. Przełączniki mogą być używane w kombinacji, co pozwala na bardziej szczegółowy przegląd działających procesów. ps -e: Wyświetla wszystkie procesy systemu. ps -e ps -u nazwa_użytkownika: Wyświetla procesy dla określonego użytkownika. ps -u root ps -f: Wyświetla pełne informacje o procesach (włączając rodzica, identyfikator grupy procesów, terminal itp.). ps -f ps -l: Wyświetla długą listę informacji o procesach (włączając priorytet, stan procesu, itp.). ps -l ps -x: Wyświetla procesy bez przypisanego terminala (tzw. "daemon processes"). ps -x ps -t nazwa_terminala: Wyświetla procesy uruchomione w określonym terminalu. ps -t pts/1 ps --sort nazwa_pola: Sortuje procesy według określonego pola (np. czasu procesora, zużycia pamięci, identyfikatora procesu itp.). ps --sort pid ps -C nazwa_procesu: Wyświetla procesy o określonej nazwie. ps -C bash ps -p PID: Wyświetla informacje o procesie o określonym identyfikatorze (PID). ps -p 1932 ps -o lista_pól: Wyświetla wybrane pola dla każdego procesu. Można podać listę pól oddzieloną przecinkami. ps -o pid,comm,user ps -axjf: Wyświetla drzewo procesów, pokazując związki między procesami oraz ich rodzicami. ps -axjf Przykłady użycia Wyświetlanie procesów, które zużywają najwięcej pamięci: ps -eo pid,comm,%mem --sort -%mem Wynik przedstawia trzy kolumny: identyfikator procesu (PID), nazwę procesu (comm) oraz procent zużywanej pamięci (%mem), posortowane malejąco według zużycia pamięci. Wyświetlanie procesów, które zużywają najwięcej czasu procesora: ps -eo pid,comm,%cpu --sort -%cpu Podobnie jak w poprzednim przykładzie, wynik przedstawia trzy kolumny: identyfikator procesu (PID), nazwę procesu (comm) oraz procent zużytego czasu procesora (%cpu), posortowane malejąco według zużycia czasu procesora. Wyszukanie procesów, które zawierają określone słowo kluczowe: ps -ef | grep "kluczowe_slowo" Ten przykład łączy polecenie ps z poleceniem grep, które wyszukuje procesy, które zawierają podane słowo kluczowe. Zabicie procesu o określonym identyfikatorze (PID): ps -p 1932 | awk 'NR > 1 {print $1}' | xargs kill W tym przypadku używamy kombinacji poleceń ps, awk oraz xargs do wyszukania i zakończenia procesu o określonym identyfikatorze (PID). Polecenie ps jest niezwykle użyteczne w zarządzaniu i monitorowaniu procesów w systemach Linux i Unix. Omówiliśmy podstawowe zastosowania polecenia ps, różne przełączniki, które pozwalają na uzyskanie dodatkowych informacji o procesach, oraz przykłady użycia. Dzięki różnym przełącznikom i opcjom, polecenie ps pozwala na analizowanie działających procesów, co jest niezbędne w diagnostyce problemów związanych z wydajnością i zarządzaniem systemem. Warto jednak pamiętać, że polecenie ps jest jedynie narzędziem do wyświetlania informacji o procesach i, aby wpłynąć na ich działanie, należy użyć innych poleceń, takich jak kill, renice, pkill czy killall. Znajomość poleceń związanych z zarządzaniem procesami jest kluczowa dla administratorów systemów Linux, a także dla programistów i użytkowników, którzy chcą monitorować swoje aplikacje i usługi. Praktykowanie i eksperymentowanie z poleceniem ps oraz jego przełącznikami pozwoli na lepsze zrozumienie procesów systemowych i ułatwi rozwiązywanie problemów związanych z działaniem systemu. W miarę jak będziesz zdobywać doświadczenie w pracy z poleceń ps, odkryjesz kolejne sposoby jego wykorzystania oraz będziesz w stanie tworzyć coraz bardziej zaawansowane zapytania. Warto również zaznaczyć, że istnieją inne narzędzia dostępne w systemach Linux i Unix, które mogą pomóc w zarządzaniu procesami, takie jak top, htop, pgrep, pstree czy lsof. Każde z nich ma swoje specyficzne funkcje, które uzupełniają możliwości polecenia ps. Warto więc zgłębić ich działanie i zapoznać się z ich funkcjonalnościami, aby poszerzyć swoją wiedzę na temat zarządzania procesami w systemie Linux. touch, tee, nano, vim Unix i Linux oferują różnorodne narzędzia, które umożliwiają edytowanie plików tekstowych. W tym artykule omówimy cztery z nich: touch, tee, nano i vim. Przedstawimy przykłady ich użycia oraz atrybuty dodatkowe, które mogą znacznie ułatwić pracę. Polecenie Touch Polecenie Touch pozwala tworzyć puste pliki lub aktualizować datę modyfikacji istniejących już plików. Jest to bardzo przydatne narzędzie, gdy chcemy szybko utworzyć plik lub zmienić datę modyfikacji pliku. Aby utworzyć nowy plik, wystarczy wpisać: touch nowy_plik.txt Jeśli plik już istnieje, Touch zmieni datę modyfikacji na aktualną. Na przykład: touch stary_plik.txt spowoduje, że data modyfikacji pliku stary_plik.txt zostanie zaktualizowana do bieżącej daty i czasu. Atrybuty dodatkowe, które można użyć z Touch, obejmują między innymi: -a: zmienia tylko datę dostępu do pliku, a nie datę modyfikacji; -c: nie tworzy nowego pliku, jeśli nie istnieje; -m: zmienia tylko datę modyfikacji, a nie datę dostępu. Polecenie Tee Polecenie Tee umożliwia wyjście z jednego strumienia danych do wielu plików jednocześnie. Jest to przydatne, gdy chcemy zapisać dane w kilku plikach jednocześnie lub przekierować je do innego procesu. Aby użyć Tee, wpisz: ls | tee plik1.txt plik2.txt W tym przykładzie wyjście z polecenia "ls" zostanie przekierowane do plików plik1.txt i plik2.txt. Można też użyć Tee, aby zapisywać dane w trybie dopisywania. W tym celu należy dodać atrybut -a. Na przykład: echo "Nowa linia" | tee -a plik1.txt plik2.txt Atrybuty dodatkowe, które można użyć z Tee, obejmują między innymi: -i: nadpisuje pliki bez potwierdzania; -p: zachowuje kolejność zapisywania danych z jednego strumienia do kilku plików; -q: w trybie cichym nie wyświetla informacji o zapisywaniu danych do plików. Polecenie Nano Nano jest edytorem tekstu wiersza poleceń, który jest łatwy w użyciu i przejrzysty. Może być stosowany zarówno przez początkujących, jak i zaawansowanych użytkowników. Po uruchomieniu Nano, można zacząć edycję pliku, wpisując: nano nazwa_pliku.txt Aby zapisać zmianę w pliku, należy użyć kombinacji klawiszy Ctrl + O. Aby wyjść z edytora Nano, należy użyć kombinacji klawiszy Ctrl + X. Atrybuty dodatkowe, które można użyć z Nano, obejmują między innymi: -c: włącza kolory dla składni; -i: włącza inteligentne automatyczne wcięcia; -v: włącza tryb uruchamiania edytora z kontrolą wersji. Polecenie Vim Vim jest jednym z najpopularniejszych edytorów tekstu na linuksie i oferuje wiele funkcji, które umożliwiają szybką i efektywną edycję plików tekstowych. Aby uruchomić Vim, wpisz: vim nazwa_pliku.txt Po uruchomieniu Vim, można zacząć edycję pliku. Aby zapisać zmiany, należy wpisać :w, a następnie nacisnąć Enter. Aby wyjść z Vim, należy wpisać :q, a następnie nacisnąć Enter. Jeśli chcemy zapisać zmiany i wyjść z Vim, należy wpisać :wq. Atrybuty dodatkowe, które można użyć z Vim, obejmują między innymi: -c: wykonuje polecenie po uruchomieniu Vim; -R: uruchamia Vim w trybie tylko do odczytu; -n: wyłącza zapisywanie pliku przed wyjściem z Vim. Omówiliśmy cztery narzędzia edycji tekstu dla systemów Unix i Linux: Touch, Tee, Nano i Vim. Każde z tych narzędzi oferuje różne funkcje i atrybuty dodatkowe, które umożliwiają efektywną edycję plików tekstowych. Znajomość tych narzędzi jest niezbędna dla osób pracujących z systemami Unix i Linux, zwłaszcza dla programistów i administratorów systemów. cat, tail, less, head, more W systemach Linux i Unix, istnieje wiele poleceń, które pozwalają na efektywne zarządzanie i analizowanie plików tekstowych. W tym artykule, omówimy pięć popularnych poleceń, tj. cat, tail, less, head i more. Przedstawimy ich zastosowanie wraz z przykładami oraz dodatkowymi atrybutami, które mogą przydać się podczas pracy z plikami tekstowymi. cat Polecenie cat jest używane do wyświetlania zawartości plików tekstowych, konkatenacji plików oraz przekierowywania wyjścia do innych plików. Oto kilka przykładów: Wyświetlanie zawartości pliku: cat plik.txt Łączenie kilku plików w jeden: cat plik1.txt plik2.txt > plik_polaczony.txt Dodawanie numerów linii do wyjścia: cat -n plik.txt Wyświetlanie plików z zakończeniem każdej linii znakiem $: cat -E plik.txt tail Polecenie tail umożliwia wyświetlanie ostatnich linii pliku tekstowego. Jest szczególnie przydatne, gdy chcemy monitorować logi systemowe lub aplikacji. Przykłady użycia: Wyświetlanie ostatnich 10 linii pliku (domyślnie): tail plik.txt Wyświetlanie ostatnich 20 linii pliku: tail -n 20 plik.txt Monitorowanie pliku w czasie rzeczywistym (dynamiczne wyświetlanie zawartości): tail -f plik.txt less Polecenie less umożliwia przeglądanie zawartości plików tekstowych w trybie stronicowania. Jest szczególnie przydatne, gdy pracujemy z dużymi plikami. Przykłady użycia: Otwieranie pliku z możliwością nawigacji: less plik.txt Wyszukiwanie ciągu znaków w pliku (po otwarciu pliku): /wyszukiwany_tekst Przechodzenie do następnego wystąpienia ciągu znaków: n Przechodzenie do poprzedniego wystąpienia ciągu znaków: N head Polecenie head służy do wyświetlania pierwszych linii pliku tekstowego. Przykłady użycia: Wyświetlanie pierwszych 10 linii pliku (domyślnie): head plik.txt Wyświetlanie pierwszych 20 linii pliku: head -n 20 plik.txt Wyświetlanie pierwszych 5 linii kilku plików: head -n 5 plik1.txt plik2.txt more Polecenie more pozwala przeglądać zawartość plików tekstowych w trybie stronicowania podobnie jak less, ale z mniejszą liczbą funkcji. Przykłady użycia: Otwieranie pliku z możliwością nawigacji: more plik.txt Przewijanie o jedną linię w dół: Enter Przewijanie o jedną stronę w dół: Spacja Wyszukiwanie ciągu znaków w pliku: /wyszukiwany_tekst Omówiliśmy pięć przydatnych poleceń do zarządzania i przeglądania plików tekstowych w systemach Linux i Unix: cat, tail, less, head i more. Każde z nich ma swoje unikalne cechy i zastosowania, które sprawiają, że są niezastąpione podczas pracy z plikami tekstowymi. Znajomość tych poleceń oraz ich dodatkowych atrybutów pozwala na efektywną i wygodną pracę z plikami tekstowymi w środowisku Linux/Unix. Zachęcamy do eksplorowania manuali (man pages) dla każdego z tych poleceń, aby poznać jeszcze więcej opcji i możliwości, które mogą znacząco ułatwić codzienną pracę z plikami tekstowymi. Aby uzyskać dostęp do manuala dla dowolnego polecenia, wystarczy wpisać man przed nazwą polecenia, np.: man cat find, locate, which Linux to elastyczny i potężny system operacyjny, który oferuje użytkownikom szeroki wachlarz narzędzi do zarządzania plikami i folderami. Trzy z nich to: find, locate oraz which. W tym artykule przyjrzymy się tym poleceniom, omówimy ich zastosowania oraz pokażemy konkretne przykłady użycia. Polecenie find Polecenie find to potężne narzędzie, które pozwala wyszukiwać pliki i katalogi w systemie Linux. Find może wyszukiwać pliki na podstawie różnych kryteriów, takich jak nazwa, typ, właściciel, grupa, rozmiar, data modyfikacji i wiele innych. Składnia polecenia find: find [ścieżka] [wyrażenie] Przykład 1: Wyszukiwanie plików o nazwie "test.txt" w bieżącym katalogu: find . -name "test.txt" Przykład 2: Wyszukiwanie plików o rozmiarze większym niż 10 MB w katalogu /home/user: find /home/user -type f -size +10M Przykład 3: Wyszukiwanie wszystkich plików należących do użytkownika "user" w katalogu /var: find /var -user user Polecenie locate Polecenie locate to szybkie narzędzie do wyszukiwania plików, które bazuje na indeksie lokalizacji plików. Locate sprawdza swój indeks (aktualizowany przez polecenie updatedb) zamiast przeszukiwać cały system plików, co pozwala na szybsze wyszukiwanie. Składnia polecenia locate: locate [opcje] wzorzec Przykład 1: Wyszukiwanie plików o nazwie "example.txt": locate example.txt Przykład 2: Wyszukiwanie plików o nazwie "example.txt" z limitowaną ilością wyników (maks. 5): locate -n 5 example.txt Przykład 3: Wyszukiwanie plików zgodnych z wyrażeniem regularnym: locate -r "example.*\.txt" Polecenie which Polecenie which służy do lokalizowania plików wykonywalnych w systemie Linux. Which szuka plików wykonywalnych w katalogach wymienionych w zmiennej środowiskowej PATH. Jest to przydatne narzędzie, gdy chcemy dowiedzieć się, która wersja programu jest używana, jeśli istnieje wiele wersji zainstalowanych na systemie. Składnia polecenia which: which [opcje] program Przykład 1: Znalezienie ścieżki do pliku wykonywalnego "python": which python Przykład 2: Znalezienie wszystkich plików wykonywalnych o nazwie "java": which -a java Przykład 3: Znalezienie ścieżki do pliku wykonywalnego "gcc" i wyświetlenie informacji o wersji: which gcc && gcc --version Podsumowanie W tym Artykule to już koniec. Przedstawiłem kilka poleceń które w linux powinien znać każdy kto zmaierza zaczynać na poważnie swoja przygodę z linux. Oczywiście to nie wszystkie polecenia które warto znać i je używać. W następnym wpisie poruszę kolejne polecenia systemu linux, a teraz juz dziękuję za uwagę.

  • Narzędzie do analizy statycznej infrastruktury jako kodu w Terraform

    TFlint (Terraform Lint) to narzędzie do analizy statycznej infrastruktury jako kodu (IaC) w Terraform. Umożliwia sprawdzenie poprawności składni, struktury i zgodności z wytycznymi w plikach konfiguracyjnych Terraform. Jest to szczególnie użyteczne w przypadku zespołów pracujących na dużych projektach infrastruktury, gdzie błędy mogą być kosztowne i trudne do wykrycia. W tym artykule przedstawimy przykłady użycia polecenia TFlint, omówimy zalety jego stosowania, a także pokażemy, jak można go zintegrować z procesem wdrażania infrastruktury. Instalacja TFlint TFlint jest dostępny na różnych platformach, takich jak Linux, macOS i Windows. Można go zainstalować za pomocą menedżera pakietów lub pobrać binarkę bezpośrednio z GitHub. Przykład instalacji na macOS Przykład instalacji na Linux Przykład instalacji na Windows Pobierz plik .zip z GitHub i wypakuj go do katalogu, który jest zawarty w zmiennej środowiskowej PATH. Konfiguracja TFlint Aby dostosować TFlint do swoich potrzeb, można utworzyć plik konfiguracyjny o nazwie .tflint.hcl. Plik ten powinien być umieszczony w głównym katalogu projektu Terraform. Przykładowy plik konfiguracyjny: Podstawowe użycie TFlint Aby uruchomić TFlint, należy wpisać polecenie tflint w konsoli, będąc w katalogu z plikami konfiguracyjnymi Terraform. TFlint sprawdzi wszystkie pliki o rozszerzeniu .tf. Przykład użycia: Można również sprawdzić pojedynczy plik .tf podając jego nazwę jako argument: Zalety stosowania TFlint Wykrywanie błędów składniowych i strukturalnych: TFlint analizuje pliki konfiguracyjne Terraform, aby wykryć wszelkie błędy składniowe, strukturalne i inne niezgodności z dokumentacją. Dzięki temu można uniknąć błędów, które mogą prowadzić do nieprawidłowego działania infrastruktury. Właściwe stosowanie zasobów AWS: TFlint sprawdza zgodność z wytycznymi AWS, takimi jak poprawne typy instancji EC2 czy poprawne odniesienia do zasobów IAM. To pomaga uniknąć błędów związanych z nieprawidłowym użytkowaniem usług AWS. Automatyzacja sprawdzania jakości kodu: TFlint może być zintegrowany z narzędziami CI/CD (Continuous Integration/Continuous Deployment) w celu automatycznego sprawdzania jakości kodu przed wdrożeniem. Dzięki temu, można utrzymać wysoką jakość kodu infrastruktury jako kodu (IaC) i uniknąć wprowadzania błędów do środowiska produkcyjnego. Dopasowywanie reguł do potrzeb projektu: TFlint pozwala na konfigurację własnych reguł sprawdzania, dzięki czemu można dostosować narzędzie do potrzeb konkretnego projektu. Daje to większą elastyczność i umożliwia lepsze zarządzanie jakością kodu. Szybka identyfikacja problemów: TFlint pozwala szybko zidentyfikować potencjalne problemy, co przekłada się na mniejsze ryzyko wprowadzania błędów do infrastruktury. Ułatwia również prace programistom, którzy mogą szybko zidentyfikować źródło problemu i go naprawić. Przykłady użycia TFlint z różnymi flagami TFlint oferuje wiele flag, które pozwalają na dostosowanie działania narzędzia do konkretnych potrzeb. Sprawdzanie modułów Terraform: Aby sprawdzić również moduły używane w projekcie, można użyć flagi --module. Ignorowanie błędów dla określonych reguł: Jeśli chcesz zignorować błędy dla określonych reguł, możesz użyć flagi --ignore-rule. Zgłaszanie tylko błędów o określonym poziomie: Aby wyświetlić tylko błędy o określonym poziomie, można użyć flagi --severity. Sprawdzanie plików Terraform tylko w określonym katalogu: Aby sprawdzić tylko pliki w określonym katalogu, można użyć flagi --chdir. Integracja TFlint z narzędziami CI/CD Współpracując z innymi programistami i zarządzając projektami infrastruktury, warto zintegrować TFlint z narzędziami CI/CD (Continuous Integration/Continuous Deployment), takimi jak Jenkins, GitLab CI, GitHub Actions czy CircleCI. Integracja pozwala na automatyczne sprawdzanie jakości kodu Terraform przed zatwierdzeniem zmian i wdrożeniem ich na środowisko produkcyjne. Przykład integracji TFlint z GitHub Actions: W powyższym przykładzie, GitHub Actions uruchamia TFlint na wirtualnej maszynie z systemem Ubuntu. Przed uruchomieniem TFlint, kod źródłowy zostaje pobrany, a następnie instalowany jest TFlint w wersji 0.31.0. Na koniec, TFlint jest uruchamiany na plikach konfiguracyjnych Terraform. Wnioski TFlint to potężne narzędzie do analizy statycznej kodu infrastruktury jako kodu (IaC) w Terraform. Pomaga wykryć błędy, utrzymać wysoką jakość kodu i uniknąć wprowadzania problemów do środowiska produkcyjnego. Dzięki integracji z narzędziami CI/CD, TFlint może automatycznie sprawdzać jakość kodu podczas procesu wdrażania. Użycie TFlint przynosi wiele korzyści dla zespołów deweloperskich, zwłaszcza tych pracujących nad dużymi projektami infrastruktury. Warto zatem włączyć TFlint do swojego procesu wdrażania infrastruktury jako kodu, aby osiągnąć jeszcze lepsze rezultaty. Teraz, gdy znasz podstawy TFlint, jego zalety i przykłady użycia, spróbuj wdrożyć to narzędzie w swoim projekcie i przekonaj się o jego wartości. Pamiętaj, że konfiguracja TFlint pozwala na dostosowanie narzędzia do indywidualnych potrzeb projektu, co jeszcze bardziej zwiększa jego użyteczność.

  • Najlepsze praktyki w zakresie bezpieczeństwa Terraform

    Terraform jest de facto narzędziem, niezależnym od dostawcy zasobów, a Twoja organizacja może pracować ze wszystkimi jednocześnie. Niekwestionowanym aspektem jest bezpieczeństwo Terraform, ponieważ każdy błąd w konfiguracji może mieć wpływ na całą infrastrukturę. W tym artykule chcę wyjaśnić korzyści płynące z korzystania z Terraform i przedstawić wskazówki dotyczące korzystania z Terraform w bezpieczny sposób, odwołując się do niektórych najlepszych praktyk w zakresie bezpieczeństwa. Audyt konfiguracji Terraform pod kątem luk w zabezpieczeniach i wdrażanie kontroli bezpieczeństwa. Zarządzanie poświadczeniami dostępu w zabezpieczeniach Terraform. Najlepsze praktyki bezpieczeństwa w korzystaniu z modułów Terraform. DIY moduły Terraform. Co to jest Terraform? Terraform to narzędzie typu open source jako narzędzie do tworzenia kodu, które umożliwia bezpieczne i przewidywalne tworzenie, zmienianie i niszczenie infrastruktury (IaC). Pisałem o tym już we wcześniejszym artykule. Aby zobaczyć prosty przykład, spójrzmy na kod - przykład z oficjalnej strony, który wdraża kontener nginx. Zainicjować projekt za pomocą terraform init, udostępniając kontener serwera nginx za pomocą terraform apply i zniszczyć serwer sieciowy nginx za pomocą terraform destroy. Terraform komunikując się z chmurą publiczną AWS, Azure, GCP czy DigitalOcean polega na kluczach dostępu i tajnych kluczach do uwierzytelniania od dostawców chmury. W tym przykładzie uwierzytelnianie nie było wymagane, ale większość dostawców wymaga poświadczeń w taki czy inny sposób. Przechowywanie poświadczeń w sposób niezabezpieczony może prowadzić do powstania luk w zabezpieczeniach, takich jak nieautoryzowany dostęp i naruszenia bezpieczeństwa danych. Jednym z miejsc, na które należy zwrócić uwagę, jest przechowywanie poświadczeń w plikach stanu Terraform. Pliki stanu Terraform to pliki, których Terraform używa do śledzenia zasobów utworzonych w określonej infrastrukturze. Plik stanu jest zwykle przechowywane lokalnie na komputerze, na którym działa Terraform, chociaż można je również przechowywać zdalnie w zapleczu (backend), takim jak Terraform Cloud lub S3 (zalecany zdalny backend jak współpracujesz z zespołem lub dla zachowania dobrych praktyk). Plik stanu zawiera migawkę infrastruktury w określonym momencie, w tym wszystkie zasoby utworzone lub zmodyfikowane przez Terraform. Obejmuje to szczegóły, takie jak identyfikatory zasobów, ich bieżący stan i wszelkie inne metadane, których Terraform potrzebuje do zarządzania zasobami. Jeśli chcesz dowiedzieć się więcej o Terraform, zapoznaj się z moim kursem Terraform Podstawy. Zapraszam (wystarczy kliknąć w obrazek) Audyt plików manifestu Terraform Terraform używa pliku stanu do określania bieżącego stanu infrastruktury i planowania zmian w tej infrastrukturze. Kiedy wprowadzasz zmiany w konfiguracji Terraform i stosujesz te zmiany, Terraform porównuje nową konfigurację z istniejącym plikiem stanu i określa, jakie zmiany należy wprowadzić w infrastrukturze, aby dostosować ją do nowej konfiguracji. Korzyści ze skanowania plików manifestu Terraform są znaczące, jeśli chodzi o wykrywanie i łagodzenie potencjalnych zagrożeń bezpieczeństwa w infrastrukturze chmurowej. Jeśli możesz zrobić tylko jedną rzecz, upewnij się, że dokładnie przeskanowałeś pliki Terraform. Ponieważ plik stanu jest ważny dla działania Terraform, ważne jest, aby obchodzić się z nim ostrożnie. Zawsze powinieneś wykonać kopię zapasową pliku stanu i upewnić się, że jest bezpiecznie przechowywany, zwłaszcza jeśli używasz zdalnego zaplecza. Należy również uważać, aby nie modyfikować pliku stanu ręcznie, ponieważ może to spowodować niespójności między plikiem stanu a rzeczywistą infrastrukturą. W przypadku "SCARLETEEL" - skanowanie manifestów Terraform mogło pomóc w wykryciu ujawnionych kluczy dostępu i sekretów w zasobnikach S3. Dzięki wczesnemu wykryciu incydentów można było zapobiec lub przynajmniej go powstrzymać, zanim atakujący miał szansę uzyskać dostęp do drugiego konta AWS – jak przedstawiono na poniższym diagramie. Identyfikacja informacji wrażliwych Skanowanie plików Terraform może pomóc zidentyfikować wszelkie poufne informacje , takie jak klucze dostępu, sekrety, hasła lub tokeny, które mogą zostać przypadkowo ujawnione w plikach stanu. Jak widać w incydencie SCARLETEEL, osoby atakujące mogą wykorzystać te informacje do uzyskania nieautoryzowanego dostępu do infrastruktury chmury i przemieszczania się między organizacjami. Błędne konfiguracje sieci Tak jak konfigurujemy dostęp do naszej chmury, konfigurując VPC lub AWS Security Groups, też musimy wziąć pod uwagę poprawną konfigurację plików Terraform, aby maksymalnie zmniejszyć powierzchnię ataku ograniczając dostęp tam gdzie jest to możliwe do zaufanych adresów IP,, a porty nie potrzebne nie otwieramy. Widoczność zmian w pliku stanu Pliki manifestu Terraform zawierają historię zmian wprowadzonych w Twojej infrastrukturze, w tym informacje o utworzeniu, zaktualizowaniu lub zniszczeniu zasobów. Skanowanie plików stanu może pomóc w śledzeniu zmian, identyfikowaniu anomalii i szybkim reagowaniu na wszelkie incydenty związane z bezpieczeństwem. Zgodność i zarządzanie Skanowanie plików `.tf` może pomóc upewnić się, że infrastruktura chmury jest zgodna z wymaganiami prawnymi i zarządczymi, takimi jak PCI DSS , HIPAA lub SOC 2 . Wykrywając potencjalne zagrożenia bezpieczeństwa, możesz podejmować działania naprawcze i zapobiegać naruszeniom zgodności. Wykrywanie luk w automatyzacji Skanowanie plików Terraform można zautomatyzować, co pozwala wykrywać i ograniczać zagrożenia bezpieczeństwa w czasie rzeczywistym. Możesz zintegrować skanowanie z potokiem DevOps, co pozwala wykryć luki w zabezpieczeniach na wczesnym etapie cyklu programowania i uniemożliwić im dotarcie do środowiska produkcyjnego. Ogólnie rzecz biorąc, skanowanie plików definicji Terraform jest podstawową praktyką bezpieczeństwa dla każdej organizacji używającej Terraform do zarządzania infrastrukturą chmurową. Może pomóc w identyfikacji i ograniczeniu potencjalnych zagrożeń dla bezpieczeństwa, zapewniając bezpieczeństwo i zgodność środowiska chmurowego. Narzędzia do skanowania Terraform Narzędzia do skanowania Terraform mogą pomóc w znalezieniu błędnych konfiguracji, problemów z bezpieczeństwem i luk w kodzie Terraform. Te narzędzia mają na celu pomóc użytkownikom w identyfikowaniu i rozwiązywaniu problemów przed ich wdrożeniem w środowiskach produkcyjnych. Oto kilka popularnych narzędzi do skanowania Terraform: Terrascan – Terrascan to narzędzie do analizy statycznej typu open source, które skanuje kod Terraform pod kątem problemów z bezpieczeństwem. Zapewnia użytkownikom funkcje polityki jako kodu i obsługuje wielu dostawców usług w chmurze. Checkov – Checkov to narzędzie typu open source, które skanuje kod Terraform pod kątem problemów z bezpieczeństwem i naruszeń najlepszych praktyk. Posiada obszerną bibliotekę wbudowanych zasad i jest wysoce konfigurowalny. KICS – Keeping Infrastructure as Code Secure (KICS) to narzędzie typu open source, które skanuje kod Terraform pod kątem problemów z bezpieczeństwem, naruszeń zgodności i błędnych konfiguracji infrastruktury. Obsługuje wielu dostawców chmury i jest wysoce konfigurowalny. tfsec - Narzędzie open source tflint - Narzedzie open source Na potrzeby tego bloga omówimy, w jaki sposób Terrascan jest używany do skanowania problemów związanych z bezpieczeństwem w Terraform. Zachęcam też do przetestowania innych narzędzi z wymienionej listy. Oczywiście jak chcesz zobaczyc je w akcji zapraszam do kursu dostępnego na stronie Szkolenia Cloud Terrascan wykorzystuje statyczną analizę kodu do skanowania kodu Terraform i konfiguracji pod kątem problemów z bezpieczeństwem i luk w zabezpieczeniach. Terrascan może być używany jako samodzielne narzędzie lub zintegrowany z potokiem CI/CD w celu automatycznego skanowania kodu Terraform w ramach procesu kompilacji. Teraz pokaże, w jaki sposób Terrascan jest używany do wyszukiwania luk w zabezpieczeniach. Przykład z Terrascan Zeskanuj swój kod Terraform za pomocą Terrascan. Po zainicjowaniu pliku konfiguracyjnego Terrascan możesz przeskanować kod Terraform pod kątem problemów z bezpieczeństwem za pomocą polecenia terrascan scan. Przejrzyj wyniki skanowania Terrascan. Po zakończeniu skanowania Terrascan powinien wyświetlić listę wszelkich problemów z bezpieczeństwem wykrytych w kodzie Terraform. Każdy problem będzie zawierał opis problemu, lokalizację w kodzie Terraform, w której wykryto problem, oraz ocenę istotności. Oto przykład wyniku skanowania Terrascan: W tym przykładzie Terrascan wykrył poważny problem bezpieczeństwa w pliku main.tf kodu Terraform. Problem jest związany z zakodowanymi na stałe sekretami w konfiguracjach Terraform, co może stanowić poważne zagrożenie bezpieczeństwa. Korzystanie z narzędzi do skanowania Terraform może pomóc poprawić bezpieczeństwo, identyfikując potencjalne problemy i luki w zabezpieczeniach, zanim zostaną one wdrożone w środowiskach produkcyjnych. Może to pomóc w zapobieganiu naruszeniom bezpieczeństwa i zapewnieniu, że infrastruktura jest skonfigurowana w bezpieczny i zgodny sposób. Ponadto narzędzia te mogą pomóc w egzekwowaniu zasad bezpieczeństwa i najlepszych praktyk w organizacjach oraz zmniejszać ryzyko błędu ludzkiego. Poniżej przykład uruchomienia wymienionych wyżej narzędzi na tym samym kodzie: Jak można zauważyć różne narzędzia zwracają różne wyniki, więc czasami warto stosować więcej niż jedno narządzie w szczególności kiedy mamy różne chmury, lub dobrać takie które działa najlepiej z naszą chmurą. Zarządzanie poświadczeniami dostępu w Terraform Security Terraform umożliwia łatwą konfigurację zasobów w chmurze, ale wymaga uwierzytelnienia u dostawców usług w chmurze. Sposób zarządzania tymi poświadczeniami ma kluczowe znaczenie dla bezpieczeństwa Twojej infrastruktury. Jedną z najlepszych praktyk jest używanie bezpiecznego systemu zarządzania poświadczeniami do przechowywania poświadczeń. Istotne jest, aby unikać przechowywania poświadczeń w postaci zwykłego tekstu ani zapisywania ich na stałe w kodzie Terraform. Nie przechowuj sekretów w stanie Terraform Pliki stanu Terraform nie powinny zawierać żadnych tajemnic, takich jak hasła czy klucze API . Zamiast tego użyj zmiennych wejściowych Terraform lub zewnętrznych źródeł danych, aby przekazać poufne informacje do modułu. Pomoże to zapewnić, że twoje sekrety nie zostaną ujawnione w pliku stanu. Na przykład tutaj jest plik stanu Terraform, który nie zawiera żadnych tajemnic: Plik definiuje pojedynczą instancję AWS EC2 i używa typu zasobu aws_instance do jej utworzenia. Blok dostawcy określa region AWS, który ma być używany, a blok wyjściowy definiuje zmienną wyjściową , która wyświetla publiczny adres IP instancji. Gdyby wymagana była jakakolwiek poufna informacja, taka jak klucz dostępu AWS lub klucz tajny, byłaby przekazywana do modułu za pomocą zmiennych wejściowych lub zewnętrznych źródeł danych, zamiast być przechowywana w pliku stanu. Nie przechowuj tajemnic w postaci zwykłego tekstu Nigdy nie przechowuj tajemnic w postaci zwykłego tekstu w swoich manifestach Terraform . Jak wspomnieliśmy wcześniej, możesz użyć zmiennych środowiskowych lub zmiennych wejściowych, aby przekazać sekrety do modułu Terraform. Oto na przykład skrypt, który używa zmiennych środowiskowych do przekazywania tajemnic do Terraform: Zamiast przechowywać db_password w postaci zwykłego tekstu w manifeście Terraform, możemy przekazać je jako zmienną środowiskową, gdy uruchamiamy polecenie Terraform: Po przekazaniu zmiennej środowiskowej możemy po prostu uruchomić skrypt Terraform - terraform apply Zmienna db_password zostanie wypełniona wartością zmiennej środowiskowej TF_VAR_db_password , która jest przekazywana do zasobu aws_db_instance. Hasło nie będzie przechowywane w postaci zwykłego tekstu w manifeście Terraform, dzięki czemu będzie bezpieczniejsze. Alternatywnie moglibyśmy użyć zmiennych wejściowych do przekazania sekretów do modułu Terraform. Oto przykład wykorzystania zmiennych wejściowych do przekazywania sekretów do modułu Terraform: Następnie możemy przekazać zmienną db_password do modułu Terraform, gdy uruchamiamy polecenie terraform apply. terraform apply -var "db_password=supersecret" Takie podejście pozwala nam przekazywać sekrety do modułu Terraform bez przechowywania ich w postaci zwykłego tekstu w manifeście Terraform. Lepszym podejściem jest użycie bezpiecznego systemu zarządzania danymi uwierzytelniającymi, takiego jak HashiCorp Vault lub AWS Secrets Manager . Narzędzia te oferują bezpieczny sposób przechowywania poufnych informacji i zarządzania nimi, zapewniając kontrolę dostępu, szyfrowanie i dzienniki audytu. Najlepszym miejscem do rozpoczęcia jest utworzenie Hashicorp Vault Secrets Engine . Powyższy kod tworzy montowanie silnika sekretów KV i ogólny klucz tajny, który przechowuje poświadczenia AWS. Zastąp var.aws_access_key i var.aws_secret_key odpowiednimi zmiennymi środowiskowymi lub użyj innej metody bezpiecznego przekazania tych wartości do Terraform. Po skonfigurowaniu mechanizmu sekretów możemy bezpiecznie pobrać dane uwierzytelniające AWS z Hashicorp Vault za pomocą poniższych zasad: Powyższy kod pobiera poświadczenia AWS z HashiCorp Vault i ustawia je jako konfigurację dostawcy dla dostawcy „ aws ” skonfigurowanego w pierwszym skrypcie. Teraz możesz używać Terraform do konfigurowania zasobów AWS bez kodowania na stałe lub przechowywania poświadczeń AWS w postaci zwykłego tekstu. To jest tylko przykładowy skrypt. Powinieneś go zmodyfikować w oparciu o swoje specyficzne wymagania i używany system zarządzania poświadczeniami. Ponadto należy skonfigurować kontrolę dostępu i dzienniki inspekcji dla systemu zarządzania poświadczeniami, aby zapewnić ochronę i monitorowanie tajemnic. Często wymieniaj poświadczenia Po wdrożeniu bezpiecznego systemu zarządzania danymi uwierzytelniającymi kluczowa jest częsta rotacja kluczy . Rotacja kluczy oznacza okresowe generowanie nowych kluczy dostępu i unieważnianie starych. Ta praktyka gwarantuje, że jeśli jeden z twoich kluczy zostanie naruszony, nie będzie ważny. Możesz ponownie użyć narzędzi takich jak Hashicorp Vault lub AWS Secrets Manager, aby zautomatyzować proces rotacji kluczy. Zautomatyzowanie tego procesu może pomóc uniknąć błędów ludzkich, które są jedną z głównych przyczyn naruszeń bezpieczeństwa. Ponieważ pracowaliśmy już z Hashicorp Vault, utworzymy następujący przykład zasad Vault , który powinien zapewnić częstą rotację naszych kluczy Terraform w celu utrzymania bezpieczeństwa systemu. Ta polityka zawiera trzy oświadczenia, które zapewniają minimalne wymagane uprawnienia do zarządzania kluczami Terraform: Pierwsza instrukcja umożliwia użytkownikom odczytywanie, tworzenie, aktualizowanie, usuwanie i wyświetlanie wpisów tajnych w ścieżce secret/data/terraform/* . Ta ścieżka powinna zawierać klucze używane przez Terraform do uzyskiwania dostępu do innych zasobów. Parametr max_versions ogranicza liczbę wersji klucza, które mogą być przechowywane, podczas gdy parametr force zapewnia wygenerowanie nowego klucza, nawet jeśli maksymalna liczba wersji została już osiągnięta. Druga instrukcja umożliwia użytkownikom odnawianie dzierżawy tajemnic. Jest to ważne dla zapewnienia częstej rotacji klawiszy. Trzecia instrukcja umożliwia użytkownikom odwołanie dzierżawy tajemnic. Jest to przydatne, jeśli klucz jest zagrożony i musi zostać natychmiast odwołany. to tylko przykładowe zasady; należy go zmodyfikować w oparciu o określone wymagania i zasoby, którymi zarządzasz w Terraform. Ponadto należy skonfigurować Vault do automatycznej rotacji kluczy na podstawie zasad bezpieczeństwa organizacji. Zasady dostępu do najniższych uprawnień Wreszcie, podczas konfigurowania infrastruktury Terraform kluczowe znaczenie ma wdrożenie zasady najmniejszych uprawnień . Zasada najmniejszych uprawnień oznacza, że ​​należy przyznać minimalny poziom dostępu wymagany do prawidłowego działania określonego zasobu. Takie podejście minimalizuje potencjalne szkody, które osoba atakująca może wyrządzić, jeśli uzyska dostęp do Twojej infrastruktury. Dzięki Terraform możesz wdrożyć zasady dostępu z najniższymi uprawnieniami, definiując odpowiednie role, zasady i uprawnienia IAM, redukując błędne konfiguracje IAM . Możesz także użyć modułów Terraform, które zostały zaprojektowane z myślą o najlepszych praktykach w zakresie bezpieczeństwa. Na przykład poniższa zasada zapewnia dostęp z najniższymi uprawnieniami do zasobów Terraform dla określonego użytkownika lub grupy. Powyższa polityka zawiera trzy stwierdzenia, które zapewniają minimalne niezbędne uprawnienia do zarządzania zasobami Terraform: Pierwsza instrukcja umożliwia określonemu użytkownikowi lub grupie wykonanie działań terraform:plan , terraform:apply i terraform:destroy na zasobach w określonym obszarze roboczym Terraform. Musisz zastąpić nazwami zasobów Amazon (ARN) swojego obszaru roboczego Terraform. Druga instrukcja umożliwia określonemu użytkownikowi lub grupie wykonanie akcji terraform:state-push i terraform:state-pull na określonym zasobniku stanu Terraform. Ponownie musisz zastąpić ARN swojego zasobnika stanu Terraform. Trzecia instrukcja umożliwia określonemu użytkownikowi lub grupie wykonanie akcji terraform:state-list na wszystkich zasobach w określonym obszarze roboczym Terraform. Jak zawsze, pamiętaj, aby zastąpić ARN swojego obszaru roboczego Terraform. to tylko przykładowe zasady; powinieneś zmodyfikować ARN, aby pasowały do ​​​​konkretnego środowiska i przypadku użycia. Ponadto powinieneś przejrzeć i dostosować zasady w oparciu o swoje specyficzne wymagania i zasoby, którymi zarządzasz w Terraform. Korzystanie z modułów Terraform Moduły Terraform to skuteczny sposób organizowania i ponownego wykorzystywania kodu infrastruktury. Jednak, podobnie jak w przypadku każdego kodu, moduły mogą stanowić zagrożenie dla bezpieczeństwa łańcucha dostaw, jeśli nie są właściwie używane. W tej sekcji omówimy bezpieczeństwo Terraform z niektórymi najlepszymi praktykami korzystania z modułów Terraform w celu zapewnienia bezpiecznej infrastruktury jako kodu. Nie ufaj im ślepo; dokładnie sprawdź tworzoną infrastrukturę, grupy bezpieczeństwa itp. i zawsze najpierw „planuj”. Moduły Terraform mogą zaoszczędzić wiele czasu i wysiłku, ale nie należy im ślepo ufać. Zawsze przeglądaj kod i plan przed zastosowaniem jakichkolwiek zmian w infrastrukturze. Obejmuje to skanowanie Terraform w poszukiwaniu błędnej konfiguracji lub luk w zabezpieczeniach oraz przeglądanie grup zabezpieczeń i innych tworzonych zasobów, aby upewnić się, że spełniają one Twoje wymagania dotyczące bezpieczeństwa. Użyj polecenia „ plan ” programu Terraform, aby przejrzeć zmiany przed ich zastosowaniem. Polecenie „ plan” służy do generowania planu wykonania, który pokazuje, co zrobi Terraform po zastosowaniu Twojej konfiguracji. Dzięki temu możesz przejrzeć zmiany i upewnić się, że spełniają one Twoje oczekiwania, zanim faktycznie je zastosujesz. Najprostszym poleceniem do wygenerowania planu jest: terraform plan Więcej o samym terraform znajdziesz w kursie dostępnym na Szkolenia Cloud Terraform przeanalizuje Twoje pliki konfiguracyjne i wygeneruje plan, co zrobi, gdy zastosujesz zmiany. Dane wyjściowe będą wyglądać mniej więcej tak: W każdym przypadku przejrzyj dane wyjściowe, aby upewnić się, że zmiany są zgodne z oczekiwaniami. W tym przykładzie Terraform utworzy nową grupę zabezpieczeń i nową instancję EC2 oraz zniszczy istniejącą instancję EC2. Jeśli jesteś zadowolony z planu, możesz zastosować zmiany za pomocą polecenia Apply: terraform apply Przeglądając plan przed zastosowaniem zmian, możesz wykryć wszelkie nieoczekiwane zmiany lub błędy i uniknąć potencjalnych problemów z infrastrukturą. Jak wspomnieliśmy na początku tej sekcji, nie ufaj ślepo infrastrukturze. Plany zapewniają, że możemy zastosować dokładne specyfikacje bezpieczeństwa. Aktualizuj moduły Moduły powinny być na bieżąco aktualizowane o najnowsze poprawki bezpieczeństwa i najlepsze praktyki. Zawsze sprawdzaj dostępność aktualizacji i stosuj je w razie potrzeby. Pomoże to zapewnić, że Twoja infrastruktura jest bezpieczna i aktualna zgodnie z najnowszymi standardami bezpieczeństwa. Chociaż w Terraform nie ma wbudowanych poleceń służących do aktualizowania modułów o najnowsze poprawki zabezpieczeń i najlepsze praktyki Terraform, istnieją jednak narzędzia innych firm, które mogą pomóc w zarządzaniu modułami i kontroli wersji. Jednym z takich narzędzi jest własny oficjalny rejestr modułów Terraform, który jest wyselekcjonowanym zbiorem gotowych modułów dla typowych potrzeb infrastrukturalnych. Moduły w rejestrze są utrzymywane przez społeczność Terraform i są regularnie aktualizowane, aby zapewnić aktualność z najnowszymi poprawkami bezpieczeństwa i najlepszymi praktykami. Aby użyć modułu z rejestru, możesz dołączyć jego źródłowy adres URL do pliku konfiguracyjnego Terraform. Na przykład: Aby zaktualizować moduł do najnowszej wersji dostępnej w rejestrze, możesz użyć polecenia terraform get z flagą -update : terraform get -update Powyższe polecenie „terraform get -update” zaktualizuje wszystkie moduły w konfiguracji Terraform do najnowszych wersji dostępnych w rejestrze. Oprócz rejestru modułów dostępne są również narzędzia innych firm, takie jak Terraform Cloud i Atlantis , które zapewniają bardziej zaawansowane funkcje zarządzania modułami i kontroli wersji, takie jak: Automatyczne aktualizacje Blokowanie wersji Narzędzia współpracy Narzędzia te mogą pomóc w aktualizowaniu modułów i zapewnieniu, że infrastruktura jest bezpieczna i zgodna z najnowszymi standardami bezpieczeństwa. Nie przechowuj pliku stanu lokalnie; zapisz go w postaci zaszyfrowanej w innym miejscu, które można później pobrać Pliki stanu Terraform zawierają poufne informacje o Twojej infrastrukturze, takie jak identyfikatory zasobów i klucze tajne. Nie przechowuj ich lokalnie ani publicznie w systemach kontroli wersji. Zamiast tego zapisz je w bezpiecznym miejscu, które można później wyciągnąć w razie potrzeby. Należy również zaszyfrować plik stanu, aby zabezpieczyć go przed nieautoryzowanym dostępem. Na przykład stworzyliśmy poniższy skrypt Terraform, który wykorzystuje zdalne przechowywanie stanu w zasobniku S3, aby uniknąć przechowywania tych plików stanu lokalnie lub w systemie kontroli wersji: W tym przykładzie blok terraform na początku pliku określa, że ​​plik stanu powinien być przechowywany w zasobniku S3 o nazwie my-terraform-state-bucket z kluczem my-terraform-state.tfstate . Parametr region określa region AWS, w którym znajduje się zasobnik S3. Parametr dynamodb_table określa nazwę tabeli DynamoDB używanej do blokowania. Parametr encrypt mówi Terraformowi, aby zaszyfrował plik stanu przed zapisaniem go w S3. Blok zasobów aws_instance określa zasoby infrastruktury do utworzenia, ale nie zawiera żadnych poufnych informacji. Gdy uruchomisz terraform apply , Terraform utworzy zasoby i zapisze plik stanu w zasobniku S3. Po uruchomieniu kolejnych poleceń terraform Terraform użyje pliku stanu zdalnego w zasobniku S3 zamiast pliku lokalnego. Przechowując plik stanu w bezpiecznej lokalizacji, takiej jak zasobnik S3, możesz mieć pewność, że nie będzie on przechowywany lokalnie ani w systemach kontroli wersji. Szyfrując plik stanu, możesz chronić go przed nieautoryzowanym dostępem. Nie modyfikuj stanu Terraform ręcznie Ręczne modyfikacje pliku stanu Terraform mogą powodować problemy i wprowadzać zagrożenia bezpieczeństwa. Zawsze używaj poleceń Terraform do zarządzania plikiem stanu. Jeśli musisz wprowadzić zmiany w pliku stanu, użyj polecenia import Terraform, aby zaimportować zasoby do stanu. Zapewni to, że plik stanu pozostanie spójny z rzeczywistą infrastrukturą. Załóżmy, że masz instancję EC2 działającą na AWS i chcesz zacząć nią zarządzać przez Terraform. Najpierw musisz utworzyć nowy plik konfiguracyjny Terraform opisujący istniejący zasób. Oto prosty przykład: Następnie możesz uruchomić polecenie terraform import, a następnie typ zasobu, unikalny identyfikator zasobu i nazwę zasobu w pliku konfiguracyjnym Terraform. terraform import aws_instance.example i-0123456789abcdefg W powyższym przykładzie i-0123456789abcdefg to unikalny identyfikator instancji EC2 w AWS, a aws_instance.example to nazwa zasobu w pliku konfiguracyjnym Terraform. Po uruchomieniu polecenia terraform import Terraform utworzy teraz nowy plik stanu i zaimportuje do niego istniejące zasoby. Następnie użylibyśmy normalnych poleceń Terraform, takich jak terraform plan i terraform apply , aby zarządzać zasobami w przyszłości. Jeśli chcesz dowiedzieć się więcej o bezpieczeństwie EC2, nie zapomnij sprawdzić Zabezpieczanie SSH na EC2 i Jak zabezpieczyć Amazon EC2 w dokumentacji AWS. Tworzenie modułów Terraform Moduły Terraform zapewniają sposób organizowania i ponownego wykorzystywania kodu infrastruktury. Podczas tworzenia modułów Terraform ważne jest, aby postępować zgodnie z najlepszymi praktykami bezpieczeństwa Terraform, aby zapewnić bezpieczną infrastrukturę jako kod. W tej sekcji omówimy kilka najlepszych praktyk tworzenia modułów Terraform. Użyj git do przechowywania manifestów Terraform Przechowuj manifesty Terraform w systemach kontroli wersji, takich jak Git. Ułatwia to śledzenie zmian, cofanie zmian i współpracę z innymi osobami. Zawsze używaj kontroli wersji dla swoich modułów Terraform, aby mieć pewność, że zmiany są śledzone i możliwe do audytu. Zainicjujmy Git w naszym bieżącym katalogu, aby zrozumieć, jak przechowywać manifesty Terraform: git init Musisz utworzyć nowy plik konfiguracyjny Terraform, taki jak main.tf, i dodać do niego trochę zasobów. Następnie możesz dodać plik do Git i zatwierdzić zmiany: git add main.tfgit commit -m "Initial commit" Wprowadź zmiany w pliku konfiguracyjnym Terraform, dodaj je i zatwierdź w Git: git add main.tfgit commit -m "Added new resource" Jeśli chcesz wrócić do poprzedniej wersji pliku konfiguracyjnego Terraform, możesz użyć Git, aby sprawdzić poprzednie zatwierdzenie: git checkout HEAD~1 main.tf To polecenie sprawdzi wersję pliku main.tf z poprzedniego zatwierdzenia. Możesz także używać Git do współpracy z innymi osobami nad projektem Terraform. Na przykład możesz przekazać swoje zmiany do zdalnego repozytorium Git, które inni mogą klonować i nad którym mogą pracować: git remote add origin git push -u origin master Korzystając z Gita, możesz: Śledź zmiany w swoich manifestach Terraform , na przykład kto zmienił określony zasób lub kiedy ostatnio coś zostało zmodyfikowane. Cofnij zmiany w przypadku awarii możesz wrócić do poprzedniej znanej działającej wersji. Łatwiej współpracuj z innymi za pomocą pull requestów w celu omówienia zmian. Podpisywanie Terraforma Podpisywanie Terraform byłoby fajną funkcją, która pozwala użytkownikom podpisywać swoje manifesty Terraform za pomocą klucza prywatnego. To znacznie poprawiłoby bezpieczeństwo Terraform, ponieważ mogłoby pomóc użytkownikom upewnić się, że ich manifesty Terraform nie zostały naruszone. Niestety Terraform nie ma wbudowanej funkcji podpisywania manifestów Terraform kluczem prywatnym. Możesz jednak użyć zewnętrznych narzędzi, takich jak GPG lub narzędzie do podpisywania wtyczek Hashicorp , aby podpisać manifesty Terraform i zweryfikować ich integralność. Oto na przykład skrypt, który może podpisywać manifesty Terraform za pomocą GPG i weryfikować ich integralność: Jak zawsze, będziesz musiał wykonać powyższy skrypt i podpisać manifest Terraform za pomocą GPG przy użyciu klucza prywatnego, zweryfikować integralność podpisanego manifestu i wyodrębnić podpisany manifest do dalszego wykorzystania. Podpisując swoje manifesty Terraform za pomocą GPG i weryfikując ich integralność, możesz upewnić się, że Twoje manifesty Terraform nie zostały naruszone i że są takie same, jak w momencie ich pierwotnego podpisania. Pomaga to poprawić bezpieczeństwo kodu infrastruktury i zmniejszyć ryzyko nieautoryzowanych zmian. Zautomatyzuj cały proces Zautomatyzuj cały proces tworzenia, testowania i wdrażania modułów Terraform. Użyj narzędzi takich jak GitLab CI/CD lub Jenkins, aby zautomatyzować ten proces, ułatwiając zarządzanie kodem infrastruktury i zapewniając jej bezpieczeństwo. Na przykład w dużej firmie świadczącej usługi finansowe zespół ds. infrastruktury dysponował wieloma modułami Terraform, które służyły do ​​zarządzania infrastrukturą chmurową. Napotkali jednak wyzwania związane z ręcznym zarządzaniem i wdrażaniem tych modułów, co prowadziło do błędów i niespójności. Aby temu zaradzić, zespół zdecydował się na wdrożenie GitLab CI/CD w celu zautomatyzowania procesu tworzenia, testowania i wdrażania modułów Terraform. Oto przykład struktury potoku GitLab CI/CD: W tym przykładzie potok składa się z trzech etapów: kompilacja, testowanie i wdrażanie. Na etapie kompilacji kod Terraform jest kompilowany i pakowany, a następnie generowany jest plan. Na etapie testów przeprowadzane są zautomatyzowane testy kodu Terraform, w tym walidacja kodu, poprawne formatowanie i zastosowanie planu w środowisku testowym. Wreszcie, na etapie wdrażania, kod Terraform jest stosowany w środowisku docelowym, zapewniając, że infrastruktura jest skonfigurowana zgodnie z kodem. Z punktu widzenia bezpieczeństwa, automatyzując proces tworzenia, testowania i wdrażania modułów Terraform za pomocą GitLab CI/CD, możesz poprawić bezpieczeństwo kodu swojej infrastruktury i zmniejszyć ryzyko nieautoryzowanych zmian. Nie nadużywaj danych wyjściowych Nie nadużywaj zmiennych wyjściowych do przechowywania poufnych informacji, takich jak Sekrety. Użyj narzędzia do zarządzania sekretami, takiego jak Vault lub AWS Secrets Manager, aby przechowywać poufne informacje. W poniższym skrypcie użyjemy Hashicorp Vault do przechowywania i pobierania sekretów do wykorzystania w Terraform: W takim przypadku możesz użyć zasobu vault_generic_secret do przechowywania swoich kluczy tajnych w Vault, a następnie pobrać te klucze tajne za pomocą źródła danych data.vault_generic_secret i użyć ich w naszym kodzie Terraform. Używając narzędzia do zarządzania tajemnicami, takiego jak Hashicorp Vault lub AWS Secrets Manager do przechowywania poufnych informacji, można łatwo uniknąć konieczności przechowywania tajemnic w zmiennych wyjściowych lub innych częściach naszego kodu Terraform, zmniejszając w ten sposób ryzyko nieautoryzowanego dostępu lub ujawnienia tych wrażliwe dane uwierzytelniające/tajne. Zamierzamy użyć metody zapobiegania-zniszczenia, aby zapobiec przypadkowemu usunięciu zasobu „nigel_instance” . Ustawienie parametru Prevent_destroy na true spowoduję, że Terraform zapobiegnie usunięciu zasobu za pomocą polecenia terraform destroy lub internetowego interfejsu użytkownika Terraform. Stosując zapobieganie zniszczeniu, podkreślamy krytyczność tego środowiska laboratoryjnego/przejściowego, ale także zapewniamy, że nawet jeśli nie jest to środowisko produkcyjne, powinno pozostać stabilne i spójne. Dlatego zmniejszamy ryzyko przypadkowego usunięcia przez współpracownika, które w przeciwnym razie doprowadziłoby do potencjalnego przestoju. Podczas korzystania z Terraform do tworzenia infrastruktury kluczowe jest zapewnienie bezpieczeństwa infrastruktury. Wniosek Terraform to potężne narzędzie, które udostępnia infrastrukturę jako kod, ale podczas korzystania z niego kluczowe znaczenie ma nadanie priorytetu bezpieczeństwu. Postępując zgodnie z najlepszymi praktykami bezpieczeństwa Terraform, które przedstawiliśmy w tym przewodniku, możesz zminimalizować ryzyko naruszenia bezpieczeństwa i zapewnić bezpieczeństwo swojej infrastruktury. Podsumowując: Skanuj pliki Terraform, aby wykryć błędne konfiguracje lub luki w zabezpieczeniach. Korzystaj z bezpiecznego systemu zarządzania danymi uwierzytelniającymi i nigdy nie przechowuj tajemnic w plikach Terraform. Implementuj zasady dostępu z najmniejszymi uprawnieniami. Zastosuj te same praktyki bezpieczeństwa do dostawców usług w chmurze. Niezależnie od tego, czy jesteś inżynierem DevOps, analitykiem zabezpieczeń czy architektem chmury, te wytyczne ułatwiają zarządzanie infrastrukturą chmurową i zabezpieczanie jej. Oczywiście zapraszam do kursu na stronie Szkolenia Cloud - Terraform Podstawy

  • Nowy backdoor używany przez grupy APT - MQsTTang

    Nowy backdoor oraz samą kampanię przypisujemy grupie Mustang Panda z dużą pewnością na podstawie licznych wskaźników, które opiszemy poniżej. Znaleziono archiwa zawierające próbki MQsTTang w dwóch repozytoriach GitHub należących do użytkownika YanNaingOo0072022. Inne repozytorium GitHub tego samego użytkownika zostało wykorzystane w poprzedniej kampanii Mustang Panda, opisanej przez firmę Avast w poście na blogu z grudnia 2022 r. Na jednym z serwerów wykorzystywanych w obecnej kampanii działał publicznie dostępny anonimowy serwer FTP, który wydaje się używany do przygotowywania narzędzi i ładunków. W katalogu /pub/god tego serwera znajduje się wiele programów ładujących Korplug, archiwów i narzędzi, które były wykorzystane w poprzednich kampaniach Mustang Panda. Ten serwer miał również katalog /pub/gd, będący kolejną ścieżką używaną w tej kampanii. Analiza próbki malware MQsTTang to backdoor typu barebone, umożliwiający atakującemu wykonanie dowolnych poleceń na maszynie ofiary i uzyskanie danych wyjściowych. Ponadto ma kilka interesujących cech. Najważniejszą z nich jest wykorzystywanie protokołu MQTT do komunikacji C&C. MQTT jest zwykle używany do komunikacji między urządzeniami IoT i kontrolerami i został wykorzystany w niewielu publicznie udokumentowanych rodzinach złośliwego oprogramowania. Jednym z takich przykładów jest Chrysaor, znany również jako Pegasus dla Androida. Z perspektywy atakującego jedną z zalet MQTT jest to, że ukrywa resztę infrastruktury za brokerem. Tym samym zaatakowana maszyna nigdy nie komunikuje się bezpośrednio z serwerem C&C. Jak widać na poniższym screenie, tę możliwość uzyskuje się za pomocą otwartej biblioteki QMQTT, zależnej od frameworka Qt, którego duża część jest statycznie powiązana w złośliwym oprogramowaniu. Używanie środowiska Qt do tworzenia malware również jest dość rzadkie. MagicRAT Lazarusa jest jednym z nielicznych niedawno udokumentowanych przykładów. MQsTTang jest rozpowszechniany w archiwach RAR, które zawierają tylko jeden plik wykonywalny. Pliki wykonywalne zwykle mają nazwy związane z dyplomacją i paszportami, takie jak: CVs Amb Officer PASSPORT Ministry Of Foreign Affairs.exe, Documents members of delegation diplomatic from Germany.Exe, PDF_Passport and CVs of diplomatic members from Tokyo of JAPAN.eXE, Note No.18-NG-23 from Embassy of Japan.exe. Archiwa te są hostowane na serwerze WWW bez powiązanej nazwy domeny. Fakt ten, wraz z nazwami plików, skłania nas do przypuszczenia, że szkodliwe oprogramowanie rozprzestrzenia się za pośrednictwem spearphishingu. Do tej pory zaobserwowano tylko kilka próbek. Oprócz różnic w niektórych stałych i zakodowanych ciągach znaków, próbki są niezwykle podobne. Jedyną zauważalną zmianą jest dodanie niektórych technik antyanalizy w najnowszych wersjach. Pierwsza z nich polega na użyciu funkcji Windows API CreateToolhelp32Snapshot do iteracji uruchomionych procesów i wyszukiwania następujących znanych debugerów i narzędzi do monitorowania: cheatengine-x86_64.exe, ollydbg.exe, ida.exe, ida64.exe, radare2.exe, x64dbg.exe, procmon.exe, procmon64.exe, procexp.exe, proceshacker.exe, pestudio.exe, sytracerx32.exe, skrzypek.exe, tcpview.exe. Należy zauważyć, że choć malware jest 32-bitowym plikiem wykonywalnym, sprawdza jedynie obecność x64dbg, a nie swojego 32-bitowego odpowiednika, x32dbg. Druga technika wykorzystuje interfejs Windows API FindWindowW do wyszukiwania następujących klas i tytułów okien używanych przez znane narzędzia analityczne: PROCMON_WINDOW_CLASS, OLLYDBG, WinDbgFrameClass, OllyDbg – [CPU], Immunity_Debugger – [CPU]. W przypadku bezpośredniego wykonania złośliwe oprogramowanie uruchomi swoją kopię z wartością 1 jako argumentem wiersza poleceń. Jest to powtarzane przez nowy proces, przy czym argument jest zwiększany o 1 przy każdym uruchomieniu. Gdy osiągnie określone wartości, zostaną wykonane określone zadania. Warto zwrócić uwagę, że dokładne wartości różnią się w zależności od próbki; te wymienione poniżej odpowiadają próbce z SHA-1: 02D95E0C369B08248BFFAAC8607BBA119D83B95B. Jednak same zadania i kolejność ich wykonywania jest stała. Rysunek poniższy przedstawia przegląd tego zachowania wraz z zadaniami wykonywanymi podczas pierwszego uruchomienia złośliwego oprogramowania. Mustang Panda to grupa znana ze swoich niestandardowych wariantów Korplug (nazywanych również PlugX) oraz skomplikowanych łańcuchów dostaw i dostarczania ładunku. W przeciwieństwie do zwykłej taktyki grupy, MQsTTang ma tylko jeden etap i nie używa żadnych technik zaciemniania. Informacje wskazują, że głównym celem kampanii była instytucja rządowa na Tajwanie. Jednak ze względu na charakter używanych nazw plików-wabików uważa się, że celem ataków są również organizacje polityczne i rządowe w Europie i Azji. Byłoby to zgodne z targetowaniem ostatnich kampanii grupy. Jak udokumentowali badacze z Proofpoint, Mustang Panda był znany z ataków na europejskie podmioty rządowe od co najmniej 2020 r., a od czasu inwazji Rosji na Ukrainę jeszcze zwiększył swoją aktywność w Europie. Zródło: https://www.welivesecurity.com/2022/03/23/mustang-panda-hodur-old-tricks-new-korplug-variant/

  • Docker Scout - Zabezpie swój łańcuch dostaw na każdym poziomie

    Bezpieczeństwo łańcucha dostaw zaprojektowane z myślą o programistach Docker Scout zapewnia ujednolicony widok do zabezpieczania rozwoju kontenera, w tym widok warstw po warstwie zależności, ich znanych luk i zalecanych ścieżek naprawczych. Docker Scout został zaprojektowany z myślą o programistach i zintegrowany z Dockerem. Dzięki Docker Scout możesz spędzać mniej czasu na wyszukiwaniu i naprawianiu luk w zabezpieczeniach, a więcej na opracowywaniu kodu. Korzyści docker scout: Zrozumienie zależności aplikacji - Zapoznaj się z zależnościami aplikacji w każdej warstwie obrazów, niezależnie od tego, czy znajdują się one w obrazie podstawowym, czy w kodzie aplikacji. Przeanalizuj luki w swoich zależnościach - Oceń luki w zabezpieczeniach każdej zależności według warstwy, uszeregowane według ważności. Działaj szybko dzięki sugerowanym opcjom naprawczym - Szybko reaguj na alerty dzięki uszeregowanym pod względem ważności sugestiom i automatycznym rekomendacjom dotyczącym środków zaradczych. Kluczowe funkcje i możliwości Docker Scout: Ujednolicony widok analizy składu oprogramowania - W jednym widoku widoczne są bezpośrednie i przechodnie zależności aplikacji ze wszystkich warstw. Ten warstwowy widok nie tylko wyjaśnia kolejne etapy naprawy, ale także pomaga zrozumieć kompozycję obrazu. Aktualizacje luk w zabezpieczeniach zależne od zdarzeń - Luki w zabezpieczeniach są wykrywane i ujawniane w sposób ciągły przez sterowany zdarzeniami model danych, który obsługuje Docker Scout. Po opublikowaniu nowego CVE Docker Scout używa SBOM Twojego obrazu, aby sprawdzić, czy istnieje pozytywna korelacja między Twoim obrazem a Twoim CVE – dzięki czemu Twoje rekomendacje są zawsze aktualne. Zalecenia dotyczące środków zaradczych w kontekście - Zintegrowane rekomendacje są widoczne w Docker Desktop. Docker Scout zaleca opcje korygowania dla aktualizacji obrazu podstawowego, a także aktualizacji zależności w warstwach kodu aplikacji. Zródło: https://docs.docker.com/scout/ https://www.docker.com/products/docker-scout/

  • Vanilla OS porzuca Ubuntu na rzecz Debiana

    Twórcy projektu ogłosili dziś poważną zmianę: Vanilla OS porzuci Ubuntu i przejdzie na Debian Sid. Dlaczego?! Po pierwsze, w nazwie dystrybucji jest wskazówka: wanilia. Chce dostarczać pulpit jak najbliżej źródła, w tym przypadku GNOME. Ubuntu wprowadza szereg modyfikacji do GNOME, a usunięcie tych zmian jest, szczerze mówiąc, zbyt dużym wysiłkiem, biorąc pod uwagę wszystko. Po drugie, Snapy. Twórcy Vanilla OS nie są nimi tak zachwyceni, ponieważ nadal mają problemy związane z wydajnością i integracją. Ponadto niektóre pakiety przejściowe Ubuntu deb-to-snap (takie jak Mozilla Firefox) zaplątują się w menedżerze pakietów APX. Po trzecie, Vanilla OS chce być odpowiedzialny za własną kadencję wydawniczą, zamiast kłaniać się półrocznym spadkom Ubuntu. Przejście na Debian Sid daje mu większą kontrolę w tym obszarze. Co dalej? Kolejnym planowanym wydaniem jest Vanilla OS 2.0 „Orchid”. Będzie on oparty na Debianie Sid (choć z ograniczeniami mającymi na celu ujarzmienie ostrzejszych krawędzi wersji kroczącej, takich jak wysyłanie mniejszego zestawu podstawowych pakietów). GNOME 44, obsługa OCI w ABRoot oraz kilka nowych opcji konfiguracji. Obecni użytkownicy Vanilla OS (opartego na Ubuntu) mogą spodziewać się dalszego otrzymywania aktualizacji po wydaniu Vanilla OS 2.0, twierdzą twórcy. Plany „uaktualnienia” z wersji 1.0 do wersji 2.0 wciąż są przedmiotem dyskusji.

bottom of page