GNU/Linux >> Znalost Linux >  >> Linux

Jak umožnit uživatelům bezpečně upravovat soubory pomocí sudoedit v systému Linux

Předpokládejme, že jste systémový administrátor ve společnosti, kde týmy většinou pracují na Linuxu s omezenými oprávněními. Nyní si představte situaci, kdy členové jednoho z týmů – v rámci nějaké nové práce – potřebují často upravovat soubor, který vyžaduje oprávnění superuživatele. Co byste udělali?

Jednou z možností je poskytnout jim přístup „sudo“, ale to by bylo jako poskytnout cizímu člověku přístup do vašeho celého domova, když vše, co potřebují, je být pouze v jedné z vašich místností – mám na mysli, že výchozí přístup „sudo“ bude nechte je dělat cokoli, co vyžaduje práva uživatele root, když vše, co je vyžadováno, je schopnost upravovat určitý systémový soubor.

Vzhledem k druhu flexibility, kterou „sudo“ nabízí, je další možností, kterou máte, vyladit politiku „sudo“ tak, aby bylo uděleno pouze oprávnění upravovat příslušný soubor. Například něco takového:

%newsudo ALL = vim /path/to/file

I když je to bezpochyby mnohem lepší řešení než poskytování úplného přístupu sudo, stále existuje mezera, kterou by někdo mohl zneužít.

Abyste pochopili, o čem mluvím, zvažte scénář, kdy je skupině poskytnut výše uvedený omezený přístup a někdo otevře příslušný soubor pro úpravy pomocí příkazu 'sudo'.

Nyní by chytrá mysl s dobrými znalostmi vim věděla, že může spustit nový shell z editoru - vše, co musí udělat, je spustit následující příkaz vim:

:shell

Tím se okamžitě dostanete do interaktivního prostředí. Pokud tyto kroky zkoušíte na svém počítači, stačí provést příkaz 'whoami' a pochopíte, o jaké kličce jsem mluvil - Ano, jste v shellu jako root.

Zde je příklad snímku obrazovky:

Netřeba dodávat, že účel poskytování přístupu k úpravám pouze jednoho souboru byl zmařen a uživatel nyní může dělat COKOLI.

Podívejme se, jestli máme nějakou jinou možnost. Existuje značka NOEXEC, kterou můžete použít ve svém záznamu sudoers:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC v podstatě umožňuje zabránit programu spuštěnému sudo ve spouštění jakýchkoli jiných programů. Je to tedy konečné řešení? Bohužel ne. Pokud jde o důvody, zde je návod, jak tuto značku vysvětluje příručka sudoers:

noexec

Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually LD_PRELOAD) to an alternate shared library. On such systems, sudo's noexec functionality can be used to prevent a program run by sudo from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected.

The noexec feature is known to work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.
...
...
...
To enable noexec for a command, use the NOEXEC tag as documented in the User Specification section above. Here is that example again:

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

This allows user aaron to run /usr/bin/more and /usr/bin/vi with noexec enabled. This will prevent those two commands from executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting noexec you can always just try it out and check whether shell escapes work when noexec is enabled.

Note that restricting shell escapes is not a panacea. Programs running as root are still capable ofmany potentially hazardous operations (such as changing or overwriting files) that could lead to unintended privilege escalation.
...
...
...

Pokud si pozorně přečtete text zvýrazněný tučně, budete vědět, že NOEXEC má svá vlastní omezení.

Jaké je tedy nejspolehlivější řešení? No, je to sudoedit . Even sudoers manual také doporučuje tento nástroj:

In the specific case of an editor, a safer approach is to give the user permission to run sudoedit.

Sudoedit je vestavěný příkaz, který uživatelům umožňuje bezpečně upravovat soubory. Podle manuálové stránky sudo je 'sudoedit' ekvivalentní spuštění 'sudo' s možností příkazového řádku '-e'.

Proč je to lepší

Pomocí funkce sudoedit mají uživatelé možnost použít svůj preferovaný editor – což je na rozdíl od řešení, o kterém jsme hovořili na začátku tohoto kurzu, kde jsou uživatelé nuceni používat editor Vim – což jim umožňuje užívat si vlastní úpravy. A největší důvod ze všech, s 'sudoedit', uživatel bude upravovat soubor jako sebe, a ne 'root'.

Jak funguje Sudoedit

Chcete-li použít sudoedit, měl by záznam v sudoers vypadat například takto:

%newsudo ALL = sudoedit /path/to/file

A uživatelé, kteří jsou součástí skupiny 'newsudo', budou moci soubor upravovat spuštěním následujícího příkazu:

sudoedit /path/to/file

Tento příkaz tedy udělá to, že nejprve vytvoří dočasnou kopii souboru, který chcete upravit. Poté příkaz prohledá proměnné prostředí SUDO_EDITOR, VISUAL a EDITOR (v tomto pořadí), aby určil, který editor by měl být vyvolán k otevření dočasné kopie, která byla právě vytvořena. Poté, co uživatel dokončí úpravy, se změny zkopírují zpět do původního souboru.

Zde je podrobné vysvětlení z manuálové stránky příkazu 'sudo':

-e, --edit 
Edit one or more files instead of running a command. In lieu of a path name, the string "sudoedit" is used when consulting the security policy. If the user is authorized by the policy, the followingsteps are taken:

1. Temporary copies are made of the files to be edited with
the owner set to the invoking user.

2. The editor specified by the policy is run to edit the
temporary files. The sudoers policy uses the
SUDO_EDITOR, VISUAL and EDITOR environment variables (in
that order). If none of SUDO_EDITOR, VISUAL or EDITOR
are set, the first program listed in the editor
sudoers(5) option is used.

3. If they have been modified, the temporary files are
copied back to their original location and the temporary
versions are removed.

If the specified file does not exist, it will be created. Note that unlike most commands run by sudo, the editor is run with the invoking user's environment unmodified. If, for some reason, sudo is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file.

Nyní byste měli mít základní představu o „sudoedit“, včetně toho, kdy jej použít a proč je lepší než používat „sudo“, když vše, co chcete, je upravit soubor nebo několik souborů. Samozřejmě, jako každý jiný nástroj související se zabezpečením má i „sudoedit“ svůj podíl na exploitech, ale v mnoha případech je stále doporučeným řešením.


Linux
  1. Jak spravovat soubory protokolu pomocí Logrotate v Linuxu

  2. Jak bezpečně kopírovat soubory mezi hostiteli Linuxu pomocí SCP a SFTP

  3. Jak přejmenovat více souborů dohromady v Linuxu pomocí 3 metod

  1. Jak provádět řádkové porovnání souborů v Linuxu pomocí příkazu diff

  2. Jak zapisovat soubory protokolu do RAM pomocí Log2ram v Linuxu

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

  1. Jak bezpečně přenášet soubory pomocí SCP

  2. Jak třídit soubory v Linuxu pomocí příkazu Sort

  3. Jak bezpečně přenášet soubory pomocí příkazu SCP v systému Linux