GNU/Linux >> Znalost Linux >  >> Linux

Bezpečně používejte find pomocí sudo

Podle man 7 capabilities

   CAP_DAC_READ_SEARCH
          * Bypass file read permission checks and directory read and execute permission checks;
          * Invoke open_by_handle_at(2).

Tohle mi fungovalo. (řádky začínající „#“ jsou root, řádky s „$“ jsou non-root) v tomto případě je uživatel bez root v wheel skupina.

# cp /usr/bin/find /usr/bin/sudofind
# chmod 710 /usr/bin/sudofind
# chown root:wheel /usr/bin/sudofind
# setcap cap_dac_read_search+ep /usr/bin/sudofind
# exit
$ find /root 
find: ‘/root’: Permission denied
$ sudofind /root
/root /root 
/root/Testbed 
...
... 
$ sudofind /root -exec cat {} \;
cat: /root: Permission denied 
cat: /root/Testbed: Permission denied
$ sudofind /root -printf "%u %g %m %c %p\n"
root root 644 Mon Apr 20 09:20:48.0457518493 2015 /root
root root 755 Fri Dec  4 02:34:03.0016294644 2015 /root/Testbed
...
...
$ # Capability inheritance test..
$ sudofind /root -exec /bin/sleep 10 \; &
[1] 17017
$ getpcaps $(pgrep find)
Capabilities for `17017': = cap_dac_read_search+ep
$ getpcaps $(pgrep sleep)
Capabilities for `17019': =

Vzhledem k tomu, co tato schopnost poskytuje, se hodí přesně k tomu, co chcete. Nekontroloval jsem vyčerpávajícím způsobem, zda find má funkci, která vám umožňuje číst bajty uvnitř souborů, ale zjevné věci jako LD_PRELOAD a knihovní shim útoky by neměly fungovat kvůli povaze kontrol setuid v Linuxu a bity schopností nedědí ani podřízené procesy (na rozdíl od raw setuid), takže to je další bonus.

Mějte na paměti, že to, co chcete udělat, vyvolává možné obavy o soukromí, pokud jde o vytváření dočasných souborů nebo přístup k nim, a program by mohl být použit jako základ pro zahájení pokusu o eskalaci race condition / privilegia (proti programům, které vytvářejí známé názvy souborů ale neprovádějte správné bezpečnostní kontroly).

Některé špatně napsané aplikace se také mohou spoléhat na metadata souboru nebo stromovou strukturu jako způsob, jak sdělit význam nebo skrýt data. To by mohlo způsobit uvolnění omezených informací nebo odhalení privilegovaných dokumentů, o kterých se jinak neví (já vím, zabezpečení prostřednictvím neznámosti, ale toto je věc, kterou rádi dělají zejména dodavatelé uzavřených zdrojů, bohužel).

Dávejte si proto pozor a buďte při tom opatrní a uvědomte si, že s tím je stále spojeno riziko, i když zjevné věci nefungují.

Jo, a zajímalo by mě, jestli má někdo v komentářích důkaz o koncepčním útoku, který používá tento mechanismus jako základ pro eskalaci oprávnění!


A co lokalizovat?

locate čte jednu nebo více databází připravených pomocí updatedb(8) a zapisuje názvy souborů odpovídajících alespoň jednomu ze vzorů na standardní výstup, jednu na řádek. Pokud není zadán --regex, mohou VZORKY obsahovat globbingové znaky. Pokud některý PATTERN neobsahuje žádné kulové znaky, chová se lokace, jako by vzor byl VZOR .

Ve výchozím nastavení locate nekontroluje, zda soubory nalezené v databázi stále existují. locate nikdy nemůže hlásit soubory vytvořené po poslední aktualizaci příslušné databáze.

Nebo možná dokonce lokalizovat:

Secure Locate poskytuje bezpečný způsob indexování a rychlého vyhledávání souborů ve vašem systému. Používá přírůstkové kódování stejně jako GNU locate ke komprimaci své databáze, aby bylo vyhledávání rychlejší, ale také uloží oprávnění k souborům a vlastnictví, takže uživatelé neuvidí soubory, ke kterým nemají přístup.

Tato manuálová stránka dokumentuje GNU verzi slocate. slocateUmožňuje uživatelům systému prohledávat celé souborové systémy bez zobrazení neautorizovaných souborů.


Udělil bych uživatelům správná oprávnění.

Ve výchozím nastavení, pokud je umask 022 , jsou adresáře vytvořeny tak, aby si každý mohl vypsat a uvést soubory v nich. Pokud ne, můžete ručně změnit oprávnění adresáře tak, aby bylo bitové nebo jeho starých oprávnění a 0555 :

chmod +0555 foo

A pokud tito uživatelé nemají oprávnění ke spuštění na všech rodičích tohoto adresáře (například domovský adresář jiného uživatele), pravděpodobně to znamená, že byste měli první adresář umístit jinam.

Pokud chcete, aby tento adresář mohli číst a spouštět pouze někteří uživatelé, můžete změnit jeho režim na 0750 , umístěte tyto uživatele do skupiny a změňte vlastníka skupiny v adresáři na tuto skupinu:

groupadd can_read_foo
chmod 0750 foo
chgrp can_read_foo foo
gpasswd -a alice can_read_foo
gpasswd -a bob can_read_foo

Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Bash =~ Regex A Https://regex101.com/?

  3. Kdy použít /dev/random vs /dev/urandom?

  1. Jak úplně umlčet Cronjob do /dev/null/?

  2. Linux – Jak najít ovladač (modul) spojený se zařízením v Linuxu?

  3. Přidejte uživatele systému Linux s oprávněními root dokumentů

  1. Spusťte skript shellu v aktuálním prostředí s oprávněním sudo

  2. Použijte úložiště git na /var/www/html/

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?