GNU/Linux >> Znalost Linux >  >> Linux

Proč je riskantní poskytnout Sudo Vim přístup běžným uživatelům?

Chtěl bych vytvořit nového uživatele a dát mu sudo přístup. Abych byl konkrétní, chci, aby používal sudo vim a upravit httpd.conf. Napsal jsem to v sudoers:

user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Slyšel jsem však, že to může být riskantní. Proč je to problematické? Jak vážný je problém?

Přijatá odpověď:

I když omezíte argumenty příkazového řádku, nic nebrání uživateli používat vim k otevření, úpravě a přepsání libovolného náhodného souboru jakmile běží jako root.

Uživatel může spustit sudo vim /etc/httpd/conf/httpd.conf a poté

  • vymažte veškerý text z vyrovnávací paměti pro úpravy
  • poté pro usnadnění vytvořte zdroj existujícího souboru (ačkoli to ani není vyžadováno):například konfigurace sudo
    :r /etc/sudoers POZNÁMKA:Pokud to není omezeno SELinux, může uživatel číst jakékoli soubor tímto způsobem!
  • udělit si více práv sudo user ALL=(ALL) NOPASSWD: ALL
  • přepište starou konfiguraci :w /etc/sudoers

Umím si představit desítky podobných způsobů, jak může váš uživatel nyní přistupovat k vašemu systému, upravovat jej nebo jej zničit.

Nebudete mít ani auditní stopu, které soubory byly tímto způsobem změněny, protože jej uvidíte pouze upravovat vaši konfiguraci Apache ve zprávách sudo log. Toto je bezpečnostní riziko při udělování sudo oprávnění libovolného editora.

To je víceméně stejný důvod, proč udělování práv na kořenové úrovni sudo příkazům, jako je tar a unzip je často nejistý, nic vám nebrání zahrnout do archivu náhrady za systémové binární soubory nebo konfigurační soubory systému.

Druhým rizikem, jak poukázalo mnoho dalších komentátorů, je vim umožňuje úniky z shellu , kde můžete spustit sub-shell z vim, který vám umožní spustit libovolný libovolný příkaz . Z vaší relace sudo vim budou tyto spuštěny jako root, například shell escape:

  • :!/bin/bash vám poskytne interaktivní root shell
  • :!/bin/rm -rf / budou dobré příběhy v hospodě.

Co dělat místo toho?

Stále můžete používat sudo aby uživatelé mohli bezpečným způsobem upravovat soubory, které nevlastní.

V konfiguraci sudoers si můžete nastavit speciální vyhrazený příkaz sudoedit následovaný úplným (zástupným) názvem cesty k souborům, které může uživatel upravovat:

user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

Uživatel pak může použít -e přepněte v jejich příkazovém řádku sudo nebo použijte sudoedit příkaz:

sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf

Jak je vysvětleno v manuálové stránce:

-e (edit) volba označuje, že místo spuštění příkazu si uživatel přeje upravit jeden nebo více souborů. Namísto příkazu se při procházení zásad zabezpečení použije řetězec „sudoedit“.
Pokud je uživatel touto zásadou autorizován, jsou provedeny následující kroky:

  • Vytvoří se dočasné kopie souborů, které mají být upravovány, přičemž vlastník je nastaven na vyvolávajícího uživatele.
  • Za účelem úpravy dočasných souborů se spustí editor určený zásadou. Zásada sudoers používá proměnné prostředí SUDO_EDITOR, VISUAL a EDITOR (v tomto pořadí). Pokud není nastaveno žádné z SUDO_EDITOR, VISUAL nebo EDITOR, první program uvedený v editoru sudoers (5) je použita.
  • Pokud byly změněny, dočasné soubory se zkopírují zpět do jejich původního umístění a dočasné verze se odstraní.
    Pokud zadaný soubor neexistuje, bude vytvořen.
    Všimněte si, že na rozdíl od většinu příkazů spouští sudo, editor se spouští s prostředím vyvolávajícího uživatele beze změn. Pokud z nějakého důvodu sudo nedokáže aktualizovat soubor jeho upravenou verzí, uživatel obdrží varování a upravená kopie zůstane v dočasném souboru.

sudoers manuál také obsahuje celou sekci, jak může nabídnout omezenou ochranu proti únikům shellu s RESRICT a NOEXEC možnosti.

restrict Neposkytujte uživatelům přístup k příkazům, které uživateli umožňují spouštět libovolné příkazy. Mnoho editorů má omezený režim, kde jsou únikové cesty shellu zakázány, ačkoli sudoedit je lepší řešení pro spouštění editorů pomocí sudo. Kvůli velkému počtu programů, které nabízejí únikové cesty shellu, je často nefunkční omezení uživatelů na sadu programů, které je nemají.

a

noexec
Mnoho systémů, které podporují sdílené knihovny, má schopnost přepsat funkce výchozí knihovny nasměrováním proměnné prostředí (obvykle LD_PRELOAD) na alternativní sdílenou knihovnu. V takových systémech lze funkci noexec sudo použít k zabránění programu spuštěnému sudo ve spouštění jiných programů. Poznámka:... ...
Chcete-li pro příkaz povolit noexec, použijte NOEXEC tag, jak je zdokumentováno v části Specifikace uživatele výše. Zde je opět ten příklad:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
To umožňuje uživateli aaron spouštět /usr/bin/more a /usr/bin/vi s povoleným noexec. To zabrání těmto dvěma příkazům ve spouštění jiných příkazů (jako je shell).


Linux
  1. Jak najít všechny uživatele Sudo v Linuxu

  2. Proč potřebuje uživatel root oprávnění sudo?

  3. Poskytnout Virtualboxu přístup pouze konkrétním uživatelům?

  1. Řízení přístupu k rootless Podman pro uživatele

  2. Proč nemohou ostatní uživatelé přistupovat ke sdílení Samba bez vynucení Uživatel =Já?

  3. Udělit uživateli přístup Sudo (přidat do souboru Sudoers nebo skupiny Wheel)

  1. Vytvořte uživatele sudo v CentOS

  2. Vytvořte uživatele sudo v Ubuntu

  3. Udělte přístup sudo v Debianu a operačním systému Ubuntu