Поиск по сайту:

Как разрешить пользователям безопасно редактировать файлы с помощью sudoedit в Linux


На этой странице

  1. Как работает Sudoedit

Предположим, вы системный администратор в компании, где команды в основном работают на Linux с ограниченными правами. Теперь представьте ситуацию, когда членам одной из команд — в рамках какой-то новой работы — нужно часто редактировать файл, требующий привилегий суперпользователя. Что бы ты сделал?

Один из вариантов – предоставить им доступ к sudo, но это все равно, что предоставить незнакомцу доступ ко всему вашему дому, когда все, что ему нужно, – это находиться только в одной из ваших комнат. Я имею в виду, что доступ к sudo по умолчанию позволит ему делать все, что угодно. для этого требуются привилегии root, когда все, что требуется, — это возможность редактировать определенный системный файл. 3043223216276099;var slotId=div-gpt-ad-howtoforge_com-medrectangle-3-0;var ffid=1;var alS=1021%1000;var container=document.getElementById(slotId);container.style.width=100%; var ins=document.createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins .dataset.fullWidthResponsive=true;}

Учитывая гибкость, которую предлагает sudo, другой вариант, который у вас есть, — настроить политику sudo таким образом, чтобы предоставлялась только привилегия редактирования рассматриваемого файла. Например, что-то вроде этого:

%newsudo ALL = vim /path/to/file

Хотя это, без сомнения, гораздо лучшее решение, чем предоставление полного доступа к sudo, все же есть лазейка, которую кто-то может использовать.

Чтобы понять, о чем я говорю, рассмотрим сценарий, в котором группе предоставляется вышеупомянутый ограниченный доступ, и кто-то открывает рассматриваемый файл для редактирования с помощью команды sudo.

Теперь умный ум с хорошим знанием vim будет знать, что они могут запустить новую оболочку из редактора — все, что им нужно сделать, это запустить следующую команду vim:

:shell

Это мгновенно поместит вас в интерактивную оболочку. Если вы пытаетесь выполнить эти шаги на своем компьютере, просто выполните команду whoami, и вы поймете, о какой лазейке я говорил — да, вы находитесь в оболочке как root.

Вот пример скриншота:

Излишне говорить, что цель предоставления доступа для редактирования только к одному файлу потерпела поражение, и теперь пользователь может делать ВСЕ.

Посмотрим, есть ли у нас другие варианты. Существует тег NOEXEC, который вы можете использовать в своей записи sudoers:

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

NOEXEC в основном позволяет запретить программе, запускаемой sudo, выполнение любых других программ. Итак, это окончательное решение? К сожалению нет. Что касается причин, вот как руководство 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.
...
...
...

Если вы внимательно прочитаете текст, выделенный жирным шрифтом, то поймете, что у NOEXEC есть свой набор ограничений.

Итак, какое же самое надежное решение? Ну, это sudoedit. Даже руководство sudoers также рекомендует этот инструмент:

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

Sudoedit – это встроенная команда, которая позволяет пользователям безопасно редактировать файлы. Согласно справочной странице sudo, sudoedit эквивалентен выполнению sudo с параметром командной строки -e.

Почему лучше

С помощью sudoedit пользователи могут использовать предпочитаемый ими редактор, что отличается от решения, которое мы обсуждали в начале этого руководства, где пользователи вынуждены использовать редактор Vim, что позволяет им пользоваться своими собственными настройками. И самая большая причина из всех, с sudoedit, пользователь будет редактировать файл как себя, а не root.

Как работает Судэдит

Чтобы использовать sudoedit, запись в sudoers должна быть, например, примерно такой:

%newsudo ALL = sudoedit /path/to/file

И пользователи, входящие в группу newsudo, смогут редактировать файл, выполнив следующую команду:

sudoedit /path/to/file

Итак, что сделает эта команда, так это сначала создаст временную копию файла, который вы хотите отредактировать. Затем команда выполнит поиск переменных среды SUDO_EDITOR, VISUAL и EDITOR (в указанном порядке), чтобы определить, какой редактор следует вызвать для открытия только что созданной временной копии. После того, как пользователь завершит работу по модификации, изменения будут скопированы обратно в исходный файл.

Вот подробное объяснение со страницы руководства команды 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.

К настоящему моменту у вас должно быть общее представление о sudoedit, в том числе о том, когда его использовать и почему это лучше, чем использование sudo, когда все, что вам нужно, — это отредактировать файл или несколько файлов. Конечно, как и в любом другом инструменте, связанном с безопасностью, в sudoedit были свои эксплойты, но во многих случаях его по-прежнему рекомендуют.