{"id":20284,"date":"2026-08-03T11:50:45","date_gmt":"2026-08-03T09:50:45","guid":{"rendered":"https:\/\/webhosting.de\/linux-capabilities-root-rechte-granular-aufteilen-sicherheitskonzept\/"},"modified":"2026-08-03T11:50:45","modified_gmt":"2026-08-03T09:50:45","slug":"mozliwosci-systemu-linux-uprawnienia-uzytkownika-root-szczegolowy-podzial-uprawnien-koncepcja-bezpieczenstwa","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/linux-capabilities-root-rechte-granular-aufteilen-sicherheitskonzept\/","title":{"rendered":"Mo\u017cliwo\u015bci systemu Linux: bezpieczny i precyzyjny podzia\u0142 uprawnie\u0144 administratora"},"content":{"rendered":"<p>Dzi\u0119ki funkcji Linux Capabilities dziel\u0119 uprawnienia administratora na ma\u0142e, jasno zdefiniowane przywileje, co pozwala mi radykalnie zmniejszy\u0107 ryzyko. W ten spos\u00f3b precyzyjnie kontroluj\u0119, kt\u00f3re procesy mog\u0105 wykonywa\u0107 okre\u015blone dzia\u0142ania, i ograniczam powierzchni\u0119 ataku ka\u017cdej aplikacji.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Drobnoziarnisty<\/strong> zamiast nadawa\u0107 uprawnienia o nieograniczonym zakresie: podzieli\u0107 uprawnienia administratora na mniejsze przywileje.<\/li>\n  <li><strong>Mo\u017cliwo\u015bci plik\u00f3w<\/strong> zamiast Set-UID: przypisanie wymaganych uprawnie\u0144 bezpo\u015brednio do plik\u00f3w binarnych.<\/li>\n  <li><strong>Zestawy mo\u017cliwo\u015bci<\/strong> konfiguracja: \u201ePermitted\u201d, \u201eEffective\u201d, \u201eInheritable\u201d, \u201eBounding\u201d \u2013 precyzyjna konfiguracja.<\/li>\n  <li><strong>Rozdzielenie uprawnie\u0144<\/strong>: Nale\u017cy \u015bci\u015ble rozdziela\u0107 us\u0142ugi, narz\u0119dzia i zadania.<\/li>\n  <li><strong>Obrona dog\u0142\u0119bna<\/strong>: Uzupe\u0142nienie funkcji o sudo, role i protoko\u0142y.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-serververwaltung-8291.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Dlaczego warto oddzieli\u0107 uprawnienia administratora?<\/h2>\n\n<p>Konto root zapewnia <strong>Pe\u0142ny dost\u0119p<\/strong> w zakresie plik\u00f3w i proces\u00f3w, ale w\u0142a\u015bnie to sprzyja powa\u017cnym b\u0142\u0119dom. Wystarczy jedno b\u0142\u0119dne polecenie lub exploit, a ca\u0142a instalacja ulegnie awarii. Dlatego ograniczam szeroko zakrojone dzia\u0142ania do absolutnego minimum, zmniejszaj\u0105c w ten spos\u00f3b skal\u0119 szk\u00f3d i czas przywracania systemu. Zasada minimalnych uprawnie\u0144 pozwala utrzyma\u0107 us\u0142ugi na niewielk\u0105 skal\u0119 i pod kontrol\u0105. Wy\u0142\u0105czam bezpo\u015brednie logowanie jako root, stosuj\u0119 system r\u00f3l i prowadz\u0119 kompletne logi.<\/p>\n\n<h2>Kr\u00f3tkie wyja\u015bnienie funkcji systemu Linux<\/h2>\n\n<p>Funkcje systemu Linux dziel\u0105 klasyczne uprawnienia administratora na jasno okre\u015blone <strong>Przywileje<\/strong>. Ka\u017cdy proces otrzymuje tylko te modu\u0142y, kt\u00f3re s\u0105 mu naprawd\u0119 potrzebne do wykonania zadania, na przyk\u0142ad do przypisywania port\u00f3w poni\u017cej 1024 lub wysy\u0142ania specjalnych sygna\u0142\u00f3w. W ten spos\u00f3b unikam dawnego podej\u015bcia typu \u201ewszystko albo nic\u201d. J\u0105dro zarz\u0105dza tymi modu\u0142ami dla ka\u017cdego procesu i \u015bci\u015ble je egzekwuje. Dzi\u0119ki temu kontrola pozostaje precyzyjna i przejrzysta.<\/p>\n\n<p>Z technicznego punktu widzenia \u0142\u0105cz\u0119 umiej\u0119tno\u015bci albo z <strong>Procesy<\/strong> (na podstawie ich zestaw\u00f3w kompetencji) lub do <strong>Pliki<\/strong> (jako atrybuty rozszerzone <code>security.capability<\/code> w plikach binarnych ELF). W przypadku <code>execve()<\/code>-Start j\u0105dro \u0142\u0105czy uprawnienia pliku z zestawami uprawnie\u0144 procesu: M\u00f3wi\u0105c pro\u015bciej, dozwolone uprawnienia z atrybut\u00f3w pliku oraz uprawnienia dziedziczone przez proces wywo\u0142uj\u0105cy s\u0105 \u0142\u0105czone w nowy zestaw uprawnie\u0144 dozwolonych (Permitted-Set) i \u2013 je\u015bli tak zaznaczono \u2013 jednocze\u015bnie aktywowane w zestawie uprawnie\u0144 efektywnych (Effective-Set). Pozwala to unikn\u0105\u0107 obej\u015b\u0107 zwi\u0105zanych z Set-UID oraz zapewnia przejrzysto\u015b\u0107 i mo\u017cliwo\u015b\u0107 weryfikacji uprawnie\u0144.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux_rechte_besprechung_3820.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Zrozumienie zestaw\u00f3w zdolno\u015bci w kontek\u015bcie procesowym<\/h2>\n\n<p>Ka\u017cdy proces posiada kilka zestaw\u00f3w uprawnie\u0144, kt\u00f3re mog\u0119 celowo <strong>kontrola<\/strong>. Zbi\u00f3r \u201ePermitted-Set\u201d okre\u015bla, jakie uprawnienia proces mo\u017ce zasadniczo posiada\u0107. Zbi\u00f3r \u201eEffective-Set\u201d okre\u015bla, kt\u00f3re uprawnienia s\u0105 aktualnie aktywne. Zbi\u00f3r \u201eInheritable-Set\u201d reguluje, jakie uprawnienia mog\u0105 by\u0107 przekazywane procesom potomnym. Zbi\u00f3r \u201eBounding-Set\u201d wyznacza sztywny limit g\u00f3rny i zapobiega przekroczeniu go przez procesy.<\/p>\n\n<h2>Ambient Capabilities i Securebits<\/h2>\n\n<p>Opr\u00f3cz znanych zestaw\u00f3w dost\u0119pny jest r\u00f3wnie\u017c <strong>Zestaw ambientowy<\/strong>, kt\u00f3ry w przypadku <code>execve()<\/code> nie wygasa automatycznie. Korzystam z niego, gdy proces bez uprawnie\u0144 ma celowo minimalne uprawnienia w wielu <code>wykonanie<\/code>-ma zachowywa\u0107 si\u0119 pomijaj\u0105c te skoki (na przyk\u0142ad podczas wywo\u0142ywania zewn\u0119trznych program\u00f3w pomocniczych). Uprawnienia ambientowe s\u0105 uwzgl\u0119dniane w uprawnieniach efektywnych tylko wtedy, gdy wywo\u0142ywany plik sam nie ustawia \u017cadnych uprawnie\u0144 pliku \u2013 w ten spos\u00f3b zapobiegam niezamierzonej eskalacji.<\/p>\n\n<p>Wraz z <strong>Securebits<\/strong> kontroluj\u0119 szczeg\u00f3\u0142y przej\u015b\u0107, np. czy proces po zmianie identyfikatora UID mo\u017ce zachowa\u0107 swoje wcze\u015bniej ustawione uprawnienia (<code>keepcaps<\/code>) lub czy w og\u00f3le nie mo\u017ce uzyska\u0107 \u017cadnych nowych przywilej\u00f3w (<code>no_new_privs<\/code>). W praktyce stosuj\u0119 Securebits w spos\u00f3b rygorystyczny i rezygnuj\u0119 z wygody, aby przerwa\u0107 \u0142a\u0144cuchy exploit\u00f3w.<\/p>\n\n<h2>Mo\u017cliwo\u015bci plik\u00f3w zamiast Set-UID<\/h2>\n\n<p>Zast\u0119puj\u0119 pliki binarne z atrybutem Set-UID przez uprawnienia plik\u00f3w, aby zminimalizowa\u0107 ryzyko <strong>obni\u017ca\u0107<\/strong>. Zamiast nadawa\u0107 programowi uprawnienia administratora, przyznaj\u0119 mu tylko niezb\u0119dne uprawnienia. Typowa zmiana wygl\u0105da nast\u0119puj\u0105co: <code>setcap 'cap_net_bind_service=+ep' \/usr\/bin\/meinserver<\/code>. Z <code>getcap -r \/<\/code> Sprawdzam, kt\u00f3re pliki zawieraj\u0105 informacje o umiej\u0119tno\u015bciach. To znacznie ogranicza liczb\u0119 kolejnych krok\u00f3w w procesie eskalacji.<\/p>\n\n<p>Wa\u017cne jest, aby funkcje plik\u00f3w by\u0142y stosowane wy\u0142\u0105cznie w odniesieniu do <strong>Pliki binarne ELF<\/strong> dzia\u0142aj\u0105. Skrypty interpretera (np. Python, Bash) nie dziedzicz\u0105 ich w spos\u00f3b niezawodny. W takich przypadkach umieszczam operacj\u0119 wymagaj\u0105c\u0105 uprawnie\u0144 w ma\u0142ym, statycznie sprawdzonym programie pomocniczym lub korzystam z aktywacji przez gniazdo (socket activation), aby moja us\u0142uga w og\u00f3le nie musia\u0142a sama nawi\u0105zywa\u0107 po\u0142\u0105czenia. Ponadto zwracam uwag\u0119 na uprawnienia plik\u00f3w: mo\u017cliwo\u015bci (capabilities) przyznaj\u0105 specjalne uprawnienia wzgl\u0119dem j\u0105dra, ale zast\u0119puj\u0105 <strong>brak<\/strong> standardowych list ACL lub uprawnie\u0144 POSIX.<\/p>\n\n<p>Podczas kopiowania lub pakowania umiej\u0119tno\u015bci szybko si\u0119 trac\u0105: <code>cp<\/code> bez obs\u0142ugi XATTR, nieprawid\u0142owo ustawione <code>umask<\/code> lub usun\u0105\u0107 artefakt kompilacji z systemu plik\u00f3w bez atrybut\u00f3w rozszerzonych <code>security.capability<\/code> w spos\u00f3b dorozumiany. Dlatego pracuj\u0119 w spos\u00f3b powtarzalny i korzystam z: <code>cp --preserve=xattr ...<\/code>, <code>tar --xattrs<\/code>, <code>rsync -X<\/code>. W przypadku kompilacji pakiet\u00f3w jawnie ustawiam mo\u017cliwo\u015bci plik\u00f3w w skrypcie instalacyjnym, testuj\u0119 instalacj\u0119 na czystej maszynie wirtualnej i sprawdzam <code>getcap<\/code> w CI.<\/p>\n\n<h2>Rozdzielenie uprawnie\u0144 w oparciu o realistyczne scenariusze<\/h2>\n\n<p>Serwer WWW potrzebuje dost\u0119pu do port\u00f3w 80\/443, ale nie do modu\u0142\u00f3w j\u0105dra ani do ponownego uruchamiania systemu, dlatego ustawiam <strong>CAP_NET_BIND_SERVICE<\/strong> i nic wi\u0119cej. Agent kopii zapasowej mo\u017ce odczytywa\u0107 i zapisywa\u0107 pliki, ale nie mo\u017ce zmienia\u0107 konfiguracji sieciowej. Narz\u0119dzie monitoruj\u0105ce otrzymuje uprawnienia do odczytu wska\u017anik\u00f3w, ale nie ma uprawnie\u0144 do wprowadzania zmian. Takie ograniczenia sprawiaj\u0105, \u017ce ataki maj\u0105 charakter lokalny, a nie obejmuj\u0105 ca\u0142ego systemu. W\u0142a\u015bnie ten podzia\u0142 sprawia, \u017ce us\u0142ugi s\u0105 \u0142atwe w zarz\u0105dzaniu, a b\u0142\u0119dy konfiguracyjne pozostaj\u0105 pod kontrol\u0105.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/balancing-linux-capabilities-5618.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>\u0141\u0105czenie z poleceniem `sudo` i rolami<\/h2>\n\n<p>Funkcje nie zast\u0119puj\u0105 przejrzystego <strong>Struktura r\u00f3l<\/strong>, a raczej je uzupe\u0142niaj\u0105. Przyznaj\u0119 uprawnienia sudo w spos\u00f3b restrykcyjny, stosuj\u0119 pe\u0142ne \u015bcie\u017cki polece\u0144 i unikam og\u00f3lnych regu\u0142, takich jak \u201eALL=(ALL) ALL\u201c. Ka\u017cde przyznanie uprawnie\u0144 rejestruj\u0119. Grupy skupiaj\u0105 zakresy odpowiedzialno\u015bci, podczas gdy uprawnienia (capabilities) wyznaczaj\u0105 techniczne ograniczenia w procesach. W ten spos\u00f3b powstaj\u0105 jasno okre\u015blone kompetencje bez nadmiernych uprawnie\u0144.<\/p>\n\n<h2>Typowe pu\u0142apki i najlepsze praktyki<\/h2>\n\n<ul>\n  <li><strong>Nie u\u017cywa\u0107 skr\u00f3tu CAP_SYS_ADMIN:<\/strong> To prawo jest zbyt og\u00f3lne. Zast\u0119puj\u0119 je bardziej szczeg\u00f3\u0142owymi alternatywami (np. <code>CAP_SYS_CHROOT<\/code>, <code>CAP_SYS_TIME<\/code>, <code>CAP_SYS_NICE<\/code>) albo w og\u00f3le z tego zrezygnuj.<\/li>\n  <li><strong>Uprawnienia do plik\u00f3w pozostaj\u0105 niezmienne:<\/strong> Mo\u017cliwo\u015bci nie wykluczaj\u0105 og\u00f3lnie DAC. Bez <code>CAP_DAC_OVERRIDE<\/code> J\u0105dro nadal uwzgl\u0119dnia bity w\u0142a\u015bciciela i trybu dost\u0119pu. Dlatego nadal przyznaj\u0119 uprawnienia do odczytu w minimalnym zakresie.<\/li>\n  <li><strong>Utwardzanie \u015bcie\u017cki:<\/strong> Je\u015bli nadam plikowi binarnemu uprawnienia plik\u00f3w, zapobiegn\u0119 sfa\u0142szowaniu \u015bcie\u017cki PATH (\u015bcie\u017cki bezwzgl\u0119dne w <code>sudoers<\/code>, zablokowane uprawnienia do zapisu w katalogach znajduj\u0105cych si\u0119 w \u015bcie\u017cce wyszukiwania).<\/li>\n  <li><strong>Publikuj wcze\u015bnie i cz\u0119sto:<\/strong> Procesy mog\u0105 uruchamia\u0107 si\u0119 z wi\u0119kszymi uprawnieniami ni\u017c to konieczne. Usuwam zb\u0119dne uprawnienia natychmiast po wykonaniu newralgicznego kroku (<code>prctl()<\/code>\/libcap) i ustaw <code>no_new_privs<\/code>, tam, gdzie to mo\u017cliwe.<\/li>\n  <li><strong>Ograniczenie dziedziczenia:<\/strong> Utrzymuj\u0119 zestaw Inheritable i Ambient na niewielkim poziomie. Procesy potomne nie mog\u0105 otwiera\u0107 nowych drzwi.<\/li>\n  <li><strong>Sprawd\u017a potok kompilacji i wdra\u017cania:<\/strong> Potwierdzam, \u017ce <code>security.capability<\/code> zostaje zachowany i \u017cadne etapy przygotowania (warstwy kontener\u00f3w, NFS, skaner artefakt\u00f3w) nie usuwaj\u0105 atrybut\u00f3w XATTR.<\/li>\n<\/ul>\n\n<h2>Przegl\u0105d kluczowych mo\u017cliwo\u015bci i zagro\u017ce\u0144<\/h2>\n\n<p>Przed przyznaniem uprawnie\u0144 jasno okre\u015bl\u0119 niezb\u0119dne uprawnienia i oceniam zwi\u0105zane z nimi ryzyko. Poni\u017csza tabela przedstawia typowe przyk\u0142ady wraz z ich skutkami i klasyfikacj\u0105. Zawsze bior\u0119 pod uwag\u0119 alternatywne rozwi\u0105zania, aby unikn\u0105\u0107 przyznawania zbyt szerokich uprawnie\u0144. Zw\u0142aszcza <strong>CAP_SYS_ADMIN<\/strong> Przyznaj\u0119 je z du\u017c\u0105 ostro\u017cno\u015bci\u0105. Tam, gdzie to mo\u017cliwe, zast\u0119puj\u0119 szeroko zakrojone uprawnienia ukierunkowanymi, w\u0105sko zdefiniowanymi wariantami.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Mo\u017cliwo\u015bci<\/th>\n      <th>Cel<\/th>\n      <th>Ryzyko<\/th>\n      <th>Przyk\u0142ad<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>CAP_NET_BIND_SERVICE<\/td>\n      <td>Przypisywanie port\u00f3w poni\u017cej 1024<\/td>\n      <td>Niski do \u015bredniego<\/td>\n      <td>Serwer WWW na portach 80\/443<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_BOOT<\/td>\n      <td>Uruchom ponownie system<\/td>\n      <td>Wysoki<\/td>\n      <td>Planowane ponowne uruchomienie<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_MODULE<\/td>\n      <td>\u0141adowanie\/usuwanie modu\u0142\u00f3w j\u0105dra<\/td>\n      <td>Bardzo wysoki<\/td>\n      <td>Zarz\u0105dzanie sterownikami<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_ADMIN<\/td>\n      <td>Wszechstronne operacje administracyjne<\/td>\n      <td>Bardzo wysoki<\/td>\n      <td>R\u00f3\u017cne zadania konserwacyjne<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SETUID \/ CAP_SETGID<\/td>\n      <td>Zmiana UID\/GID<\/td>\n      <td>\u015aredni do wysokiego<\/td>\n      <td>Zmiana uprawnie\u0144 w trakcie s\u0142u\u017cby<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux_capabilities_tech-office_4738.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<p>Opr\u00f3cz tabeli oceniam w\u0142a\u015bnie <code>CAP_SYS_PTRACE<\/code> (debugowanie proces\u00f3w), <code>CAP_NET_ADMIN<\/code> (parametryzacja sieci) oraz <code>CAP_DAC_OVERRIDE<\/code> (obchodzenie ogranicze\u0144 dost\u0119pu do plik\u00f3w) jest kwesti\u0105 niezwykle krytyczn\u0105. Cz\u0119sto istniej\u0105 wzorce, kt\u00f3re pozwalaj\u0105 unikn\u0105\u0107 tych uprawnie\u0144: dedykowane punkty ko\u0144cowe metryki zamiast podgl\u0105du proces\u00f3w, aktywacja gniazd lub przekierowania port\u00f3w zamiast uprawnie\u0144 typu \u201ebind\u201d oraz przejrzyste uprawnienia do plik\u00f3w zamiast og\u00f3lnego obchodzenia DAC.<\/p>\n\n<h2>Wzmocnienie w kontenerach i hosting<\/h2>\n\n<p>W \u015brodowiskach wielodost\u0119pnych uwa\u017cam, \u017ce umiej\u0119tno\u015bci s\u0105 radykalnie <strong>ma\u0142y<\/strong> i zapobiegam dziedziczeniu w procesach potomnych. Kontenery odnosz\u0105 znaczne korzy\u015bci, gdy tylko zbi\u00f3r granic (bounding set) jest \u015bci\u015ble okre\u015blony. \u0141\u0105cz\u0119 to z izolowanymi przestrzeniami systemu plik\u00f3w i proces\u00f3w. W uzyskaniu og\u00f3lnego obrazu podej\u015b\u0107 do izolacji pomaga mi ten wprowadzenie do <a href=\"https:\/\/webhosting.de\/pl\/proces-izolacja-hosting-chroot-cagefs-kontener-wiezienia-bezpieczenstwo-porownanie\/\">Izolacja proces\u00f3w<\/a>. Dzi\u0119ki temu us\u0142ugi pozostaj\u0105 oddzielone, nawet je\u015bli jedna z aplikacji zacznie dzia\u0142a\u0107 nieprawid\u0142owo.<\/p>\n\n<p>W praktyce domy\u015blnie ustawiam kontenery na opcj\u0119 \u201ewyrzu\u0107 wszystko, dodaj wybrane\u201c: <code>--cap-drop=ALL --cap-add=NET_BIND_SERVICE<\/code> dla us\u0142ug internetowych, brak uprawnie\u0144 do montowania, brak <code>SYS_ADMIN<\/code>. W \u015brodowiskach orkiestrowanych przechowuj\u0119 profil centralnie i sprawdzam go w zasadach. Wa\u017cne: nie polegam na uprawnieniach plik\u00f3w w obrazie, lecz przyznaj\u0119 uprawnienia w czasie wykonywania w orkiestratorze \u2013 w spos\u00f3b powtarzalny i podlegaj\u0105cy audytowi.<\/p>\n\n<h2>Wsp\u00f3\u0142dzia\u0142anie z SELinux i AppArmor<\/h2>\n\n<p>Mo\u017cliwo\u015bci okre\u015blaj\u0105, co proces mo\u017ce robi\u0107, podczas gdy profile MAC okre\u015blaj\u0105, do czego ma on dost\u0119p, a oba te elementy wsp\u00f3\u0142graj\u0105 ze sob\u0105 <strong>dobry<\/strong>. Stosuj\u0119 w\u0105skie ustawienia uprawnie\u0144 (Capabilities) i pozwalam SELinuxowi lub AppArmorowi ogranicza\u0107 dost\u0119p do plik\u00f3w i gniazd. W ten spos\u00f3b powstaje wielowarstwowa ochrona, kt\u00f3ra stawia przed exploitami szereg przeszk\u00f3d. Szybkie por\u00f3wnanie znajduj\u0119 tutaj: <a href=\"https:\/\/webhosting.de\/pl\/selinux-kontra-apparmor-zabezpieczenia-systemu-linux-wzmocnienie-serwerow-ochrona\/\">SELinux a AppArmor<\/a>. Dzi\u0119ki temu us\u0142uga, kt\u00f3rej bezpiecze\u0144stwo zosta\u0142o naruszone, pozostaje odizolowana i mo\u017ce wyrz\u0105dzi\u0107 mniej szk\u00f3d.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/entwickler_schreibtisch2345.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>W praktyce: post\u0119puj krok po kroku<\/h2>\n\n<p>Zaczn\u0119 od sporz\u0105dzenia wykazu wszystkich us\u0142ug i ich <strong>Wymagania<\/strong>. Nast\u0119pnie usuwam zb\u0119dne pliki binarne z atrybutem Set-UID lub zast\u0119puj\u0119 je odpowiednimi uprawnieniami plik\u00f3w. Konfiguruj\u0119 sudo w spos\u00f3b restrykcyjny i dokumentuj\u0119 ka\u017cdy wpis. Przypisuj\u0119 zadania do r\u00f3l i grup, ograniczaj\u0105c uprawnienia do minimum. Nast\u0119pnie przeprowadzam testy pod obci\u0105\u017ceniem i sprawdzam wpisy w logach pod k\u0105tem nieoczekiwanych odm\u00f3w.<\/p>\n\n<p>Kr\u00f3tka lista kontrolna pomaga mi w zmianie:<\/p>\n<ul>\n  <li>Nale\u017cy na pi\u015bmie okre\u015bli\u0107 wymagania dla poszczeg\u00f3lnych stanowisk (tylko to, co jest naprawd\u0119 potrzebne).<\/li>\n  <li>Sporz\u0105dzenie wykazu istniej\u0105cych przywilej\u00f3w (<code>find \/ -perm -4000<\/code>, <code>getcap -r \/<\/code>).<\/li>\n  <li>Celowe zast\u0119powanie: rezygnacja z atrybutu Set-UID, ustawianie uprawnie\u0144 plik\u00f3w, wczesne cofanie uprawnie\u0144.<\/li>\n  <li>Zamkni\u0119cie dziedziczenia: zoptymalizowanie zbioru ograniczaj\u0105cego, zminimalizowanie element\u00f3w dziedzicznych\/\u015brodowiskowych.<\/li>\n  <li>Zabezpieczenie profili systemd i kontener\u00f3w (<code>CapabilityBoundingSet=<\/code>, <code>NoNewPrivileges=yes<\/code>).<\/li>\n  <li>Przeprowadzi\u0107 testy pod obci\u0105\u017ceniem, sprawdzi\u0107 logi i wpisy audytowe, udokumentowa\u0107 wyj\u0105tki.<\/li>\n<\/ul>\n\n<h2>Monitorowanie, przestrzenie nazw i ci\u0105g\u0142e audyty<\/h2>\n\n<p>Monitoruj\u0119 pliki dziennika, alarmy i wywo\u0142ania systemowe, aby natychmiast reagowa\u0107 na niepo\u017c\u0105dane dzia\u0142ania <strong>wyr\u00f3\u017cnia\u0107 si\u0119<\/strong>. Regularnie weryfikuj\u0119 zmiany w uprawnieniach, regu\u0142ach sudo i rolach. Tam, gdzie jest to uzasadnione, dodatkowo izoluj\u0119 obci\u0105\u017cenia za pomoc\u0105 mechanizm\u00f3w izolacji j\u0105dra. Dobrym punktem wyj\u015bcia jest ten przegl\u0105d dotycz\u0105cy <a href=\"https:\/\/webhosting.de\/pl\/kontekst-serwera-izolacja-przestrzenie-nazw-cgroups-hosting-bezpieczenstwo\/\">Przestrzenie nazw i grupy Cgroup<\/a>. Dzi\u0119ki temu wcze\u015bnie wykrywam nieprawid\u0142owo\u015bci i dbam o czysto\u015b\u0107 otoczenia.<\/p>\n\n<p>Na co dzie\u0144 stosuj\u0119 proste testy: <code>capsh --print<\/code> wy\u015bwietla mi aktualny zestaw umiej\u0119tno\u015bci, <code>getpcaps<\/code> wymienia prawa procesowe oraz w <code>\/proc\/\/status<\/code> czytam <code>CapEff<\/code>, <code>CapPrm<\/code>, <code>CapBnd<\/code>. Z <code>audyt<\/code> \u015bledz\u0119 zmiany statusu zdolno\u015bci (np. regu\u0142a na <code>capset<\/code>), koreluj\u0119 zdarzenia z wdro\u017ceniami i ustawiam alerty, gdy nagle pojawiaj\u0105 si\u0119 szerokie uprawnienia. W skomplikowanych przypadkach pomaga mi <code>strace -e capget,capset<\/code>, aby uwidoczni\u0107 manipulacje uprawnieniami.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-capabilities-8123.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktyczne przyk\u0142ady dotycz\u0105ce systemd i kontener\u00f3w<\/h2>\n\n<p>Wiele us\u0142ug uruchamiam jako jednostki systemd i tam ograniczam uprawnienia:<\/p>\n<ul>\n  <li><code>CapabilityBoundingSet=CAP_NET_BIND_SERVICE<\/code> ogranicza dost\u0119pne okno praw do niezb\u0119dnego minimum.<\/li>\n  <li><code>AmbientCapabilities=CAP_NET_BIND_SERVICE<\/code> nadaje us\u0142udze prawo do nawi\u0105zania po\u0142\u0105czenia na portach 80\/443 bez konieczno\u015bci okre\u015blania mo\u017cliwo\u015bci plik\u00f3w.<\/li>\n  <li><code>NoNewPrivileges=yes<\/code> uniemo\u017cliwia p\u00f3\u017aniejsze rozszerzenie zakresu praw.<\/li>\n  <li><code>U\u017cytkownik=<\/code>, <code>Grupa=<\/code>, <code>ProtectSystem=ostry<\/code>, <code>PrivateTmp=yes<\/code> dope\u0142niaj\u0105 izolacj\u0119.<\/li>\n<\/ul>\n<p>W kontenerach uruchamiam procesy w jak najmniejszym zakresie: <code>docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE --read-only<\/code>. W przypadku zada\u0144 kr\u00f3tkotrwa\u0142ych korzystam w obrazie z funkcji zwi\u0105zanych z czasem dzia\u0142ania zamiast funkcji zwi\u0105zanych z plikami, aby kompilacje by\u0142y powtarzalne, a uprawnienia by\u0142y powi\u0105zane ze \u015brodowiskiem.<\/p>\n\n<h2>Konkretne przyk\u0142ady migracji z praktyki<\/h2>\n\n<ul>\n  <li><strong>ping bez set-UID:<\/strong> Zamiast <code>setuid root<\/code> stawiam <code>setcap 'cap_net_raw=+ep' \/bin\/ping<\/code>. Dzi\u0119ki temu ka\u017cdy u\u017cytkownik mo\u017ce otwiera\u0107 gniazda ICMP bez pe\u0142nych uprawnie\u0144 administratora. Regularnie sprawdzam to za pomoc\u0105 <code>getcap \/bin\/ping<\/code>, czy atrybut zosta\u0142 zachowany.<\/li>\n  <li><strong>Us\u0142uga internetowa na porcie 80\/443:<\/strong> Uruchamiam us\u0142ug\u0119 jako u\u017cytkownik bez uprawnie\u0144 i podaj\u0119 tylko <code>cap_net_bind_service<\/code>. Je\u015bli us\u0142uga i tak znajduje si\u0119 za serwerem proxy odwrotnym, mog\u0119 alternatywnie pod\u0142\u0105czy\u0107 si\u0119 tam do port\u00f3w 80\/443 i korzysta\u0107 wewn\u0119trznie z portu wysokiego \u2013 zupe\u0142nie bez dodatkowych umiej\u0119tno\u015bci.<\/li>\n  <li><strong>Zmiana stron w post\u0119powaniu:<\/strong> W przypadku narz\u0119dzi, kt\u00f3re na kr\u00f3tko wymagaj\u0105 podwy\u017cszonych uprawnie\u0144 (np. ustawianie poziom\u00f3w priorytetu), ustawiam <code>cap_sys_nice<\/code>, wykonaj akcj\u0119 jak najwcze\u015bniej, a potem zrezygnuj z tej umiej\u0119tno\u015bci. Staram si\u0119 unika\u0107 trwa\u0142ego zwi\u0119kszania uprawnie\u0144.<\/li>\n<\/ul>\n\n<h2>Ograniczenia i alternatywy<\/h2>\n\n<p>Nie ka\u017cdy przypadek zastosowania wymaga wykorzystania funkcji. Cz\u0119sto istniej\u0105 bezpieczne alternatywy o mniejszym ryzyku:<\/p>\n<ul>\n  <li><strong>Aktywacja gniazda:<\/strong> Us\u0142uga inicjuj\u0105ca (np. systemd) otwiera gniazda z uprawnieniami i przekazuje je procesowi. Dzi\u0119ki temu moja us\u0142uga nie potrzebuje uprawnie\u0144 do wi\u0105zania.<\/li>\n  <li><strong>Przekierowanie port\u00f3w:<\/strong> Za pomoc\u0105 regu\u0142 zapory sieciowej przekierowuj\u0119 porty 80\/443 na port o wy\u017cszym numerze. Us\u0142uga pozostaje bez uprawnie\u0144, a zachowanie systemu nie ulega zmianie.<\/li>\n  <li><strong>Nieuprawnione porty niskiego poziomu:<\/strong> Tam, gdzie to ma sens, mog\u0119 podnie\u015b\u0107 pr\u00f3g dla port\u00f3w bez uprawnie\u0144. Zwi\u0119ksza to jednak zakres swobody dla wszystkich proces\u00f3w \u2013 starannie rozwa\u017cam ryzyko i wygod\u0119.<\/li>\n  <li><strong>Ma\u0142e pomocniki zamiast uniwersalnych urz\u0105dze\u0144:<\/strong> Wol\u0119 niewielki, sprawdzony plik binarny z dok\u0142adnie jedn\u0105 funkcj\u0105 ni\u017c wielki monolit z szerokim zestawem uprawnie\u0144.<\/li>\n<\/ul>\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>Z <strong>Mo\u017cliwo\u015bci systemu Linux<\/strong> Dziel\u0119 uprawnienia administratora na ma\u0142e, \u0142atwe do kontrolowania przywileje. Mo\u017cliwo\u015bci plik\u00f3w zast\u0119puj\u0105 ryzykowne pliki binarne z atrybutem Set-UID i ograniczaj\u0105 skutki ataku. W po\u0142\u0105czeniu z rygorystycznymi regu\u0142ami sudo, rolami i profilami MAC powstaje wielowarstwowa ochrona o jasno okre\u015blonych granicach. Zbiory ograniczaj\u0105ce (Bounding Sets) i dziedziczne (Inheritable Sets) ograniczaj\u0105 dziedziczenie uprawnie\u0144 i utrzymuj\u0105 procesy na w\u0142a\u015bciwym kursie. Takie podej\u015bcie znacznie zmniejsza powierzchni\u0119 ataku i pozwala utrzyma\u0107 nak\u0142ad administracyjny na rozs\u0105dnym poziomie.<\/p>","protected":false},"excerpt":{"rendered":"<p>Funkcje systemu Linux dziel\u0105 uprawnienia administratora na bardziej szczeg\u00f3\u0142owe przywileje. Dowiedz si\u0119, w jaki spos\u00f3b model funkcji wzmacnia bezpiecze\u0144stwo serwer\u00f3w i umo\u017cliwia rozdzielenie uprawnie\u0144 w systemach Linux.<\/p>","protected":false},"author":1,"featured_media":20277,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[794],"tags":[],"class_list":["post-20284","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheit-computer_und_internet"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"67","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"Linux Capabilities","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20277","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=20284"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20284\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/20277"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=20284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=20284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=20284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}