1

Я пытаюсь присвоить псевдоним командам, таким как shutdown , reboot и т.д. Я знаю, что это не надежный способ заблокировать доступ, однако это просто для предотвращения случайного выполнения.

Я посмотрел на superuser.com/questions/244342 и все ссылки в нем.

Для псевдонима что-то вроде sudo /sbin/shutdown мне сначала нужно было бы использовать псевдоним sudo отдельности, а затем /sbin/shutdown чтобы echo 'Not allowed' .

Однако это, похоже, не работает, так как sudo очевидно, выполняет его в корне. Таким образом, совмещать их в .bashrc пользователя бессмысленно. Как мне решить мою проблему? Я не хочу изменять какие-либо системные атрибуты, такие как .bashrc пользователя root и т.д.

3 ответа3

1

Как вы правильно заметили, псевдонимы оболочки не подходят для ваших целей.

Правильный способ избежать случайного выполнения этих команд с помощью sudo - обновить вашу конфигурацию sudo (используя visudo) и полностью запретить доступ. Вы можете назначить группу, членам которой разрешено выполнять эти команды, с помощью sudo , и никто другой.

1

Итак, « правильный » подход состоит в том, чтобы не предоставлять этим пользователям sudo, но кажется, что это одна из тех ситуаций, которые вы не можете избежать, чтобы предоставить пользователям такой доступ (допустим, вы остановили их при выключении, они могут просто rm -rf /* вместо)

Однако, чтобы остановить их выполнение определенных команд через sudo, вы можете контролировать это в файле sudoers:

Сначала мы определяем псевдоним для выключения системы в /etc/sudoers.conf

Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown

И затем мы удаляем возможность для любого в группе колеса, чтобы выполнить эту команду:

%wheel ALL = ALL, !SHUTDOWN

Это означает, что все пользователи могут запускать все команды на всех компьютерах, кроме команд в shutdown cmnd_Alias.

man sudoers объяснит это гораздо более подробно, и фактически содержит почти это точное объяснение. Также обратите внимание, что это не помешает кому-то преднамеренно пытаться выполнить команду выключения, только тем, кто случайно запустил ее, не осознавая (возможно, потому что они вошли в неправильную машину).

0

Даже если вы успешно запретите пользователю запускать все команды , которые непосредственно ответственны за перезагрузку, пользователь с доступом sudo (где доступ sudo не внесен в белый список для определенного набора двоичных файлов, для которых у него нет разрешения на изменение, и который может ' возможно, манипулирует запуском кода перезагрузки) может перезагрузить систему через:

  1. Загрузите исходный код в такую программу, как reboot или halt (например, в GNU binutils, IIRC), скомпилируйте его с помощью gcc , затем запустите sudo ./reboot в своей локальной копии.

  2. Напишите программу на Ruby, Python, C/C++, Java и т.д., Которая вызывает соответствующие системные вызовы для запуска перезагрузки или завершения работы.

  3. Вероятно, есть хитрые вещи, которые они могут сделать с символическими или жесткими ссылками, чтобы обойти черный список. С этими вещами всегда трудно справиться с точки зрения безопасности, но у меня нет конкретных примеров на макушке.

Если вы на 100% уверены, что все двоичные файлы, которые вы предоставляете пользователю для запуска под sudo не могут быть использованы для выполнения произвольного кода (что приводит к пунктам 1 или 2 выше), тогда, возможно, все будет в порядке. Но хитрый пользователь (или программа, выполняемая от имени этого пользователя) все еще может использовать уязвимости безопасности в любой из этих программ для повышения и перезагрузки / выключения.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .