У меня очень чувствительная сетевая настройка, и я действительно не хочу с ней связываться. Моя сеть состоит из группы пользователей с привилегиями sudo.
Я хочу остановить их бег
service NetworkManager restart
service network restart
команды.
Есть ли способ, которым я могу достичь этого?
networking
иnetwork-manager
? Кроме того, почему ваши пользователи имеютsudo
доступ? Они не должны, если вы не хотите, чтобы у них были полные права суперпользователя.Ответы:
Использование CmndAlias
ALL
никогда не будет безопаснымЕсть 1000 способов бегать
service network restart
без делаsudo service network restart
. Вот пример того, что может попробовать непослушный пользователь:Если вы предоставите пользователям
ALL
псевдоним команды, а затем попытаетесь создать черный список, они всегда смогут найти способ обойти его. Черный список Bash, и они будут использовать Python. Черный список Python, и они будут использовать Perl. Черный список Perl, и они будут использовать PHP. Никто не хочет этого!Если вы действительно не хотите , чтобы кто - то что - то сделать, вы должны делать , как говорит Томас, и создать белый список вещей , которые они имеют право делать.
Настройка белого списка с исключением
Пример небольшого белого списка с исключением можно найти в нижней части
man sudoers
:(На самом деле этот пример с man-страницы небезопасен и может быть использован для изменения пароля пользователя root! См. Комментарии ниже.)
Мы можем попытаться приспособить , что ваш случай, чтобы предложить все
service
команды в группе сотрудников, но исключают теservice network
команды , которые касаются вас:(Эта
ALL
позиция относится к Host_Alias, а не к Cmnd_Alias - не так ли сбивает с толку?)Пользователь не сможет запустить
sudo bash
илиsudo tee
илиsudo wget
или илиsudo /path/to/malicious_script
. Вы можете внести в белый список больше команд администратора для своих пользователей, если будете осторожны. Просто будьте конкретны!Примечание: я добавил
*
перед словомnetwork
выше, на случай, еслиservice
в будущем в инструмент будет добавлен безвредный флаг . Давайте представим, что--verbose
в будущем будет добавлен флаг, тогда пользователи смогут запустить следующее:Поэтому нам нужно
*
использовать любые флаги перед именем службы. Единственным недостатком является то, что это может заблокировать другие службы, которые вы на самом деле не возражаете против запуска пользователей, например, вызванная службаsafe-network
илиnetwork-monitor
также будет отклонена.Разрешить пользователям редактировать файл с помощью групповых прав
Ниже вы можете найти различные попытки использования
rnano
через ,sudo
чтобы пользователи могли редактировать файл или файлы. Но на самом деле они сложнее и опаснее, чем должны быть.Гораздо более простым и безопасным решением является изменение групповых разрешений для определенных файлов, для которых вы хотите открыть права редактирования. Вот пара примеров:
Если вам нужен более детальный контроль (например, доступ только для 3 пользователей, но не для всех сотрудников), вы можете создать новую группу, используя
addgroup
команды и добавить в нее всего несколько пользователей.Позвольте пользователям редактировать файл через
sudo
Остальная часть этого ответа стала расследованием того, как легко оставить дыры в вашем
sudo
конфигурации, когда вы пытаетесь предложить пользователям гибкость. Я бы не рекомендовал делать что-либо из следующего!Если вы хотите предоставить своим пользователям доступ к редактированию определенного файла, вы можете попробовать использовать
rnano
:rnano
только позволит им редактировать указанный файл. Это важно для того, чтобы злонамеренный пользователь не мог редактировать другую службу выгрузки (например,/etc/init.d/urandom
) и добавить в него строку, которая будет работатьservice network restart
.К сожалению, я не нашел способа
rvim
достаточно ограничить (пользователь по-прежнему может открыть любой файл, используя:e
), поэтому мы застряли сnano
.К сожалению, разрешить пользователям редактировать несколько файлов намного сложнее ...
Позвольте пользователям редактировать несколько файлов (намного сложнее, чем должно быть)
1. Небезопасные подходы
Будьте осторожны с подстановочными знаками! Если вы предлагаете слишком большую гибкость (или любую гибкость), ее можно использовать:
В этом случае злонамеренный пользователь сможет отредактировать любой другой сценарий службы выскочки, а затем запустить его:
(Судо действительно предотвращает
.
и..
расширению команды, но, к сожалению, не аргументам.)Я надеялся, что что-то подобное может сработать, но это все еще небезопасно:
Поскольку в
sudo
настоящее время предлагаются только шаблоны глобусов , которые*
будут соответствовать чему угодно - это не регулярное выражение!(Edit: я рассмотреть , если вы могли бы уйти с вышеизложенным в вашей ситуации, потому что нет вложенных папок под
sites-available
. Мы сделали спрос один символ будет соответствовать после того, как папки, и/..
. Должны терпеть неудачу после того, как имя файла , однако это не является выполнимое решение, потому чтоrnano
принимает несколько аргументов. И вообще, это все равно будет небезопасно для папки с подпапками!)Даже если у нас нет подпапок и мы исключаем какие-либо строки, содержащие
/../
правило, правило, предлагающее*
глоб, все еще может быть использовано, потому чтоrnano
принимает несколько аргументов (циклически перебирая их<C-X>
, и пространство счастливо принимается*
глобаном.2. толкать конверт (также в конечном итоге небезопасно)
Так что, если мы отвергаем любые строки, содержащие пробелы, или пытаемся достичь
/..
? Тогда окончательное работоспособное решение может быть таким:Мы принимаем что-либо «под» папкой, но мы также отклоняем любой вызов,
rnano
если/..
или/.
илипереданы, или если папка предназначена непосредственно. (Технически
/.
исключение делает/..
исключение излишним, но я оставил оба для ясности.)Я обнаружил, что папка и
/.
исключения были необходимы, потому что в противном случае пользователь мог бы выбрать саму папку. Теперь вы можете подумать,rnano
что заблокирует, если указывает на папку, но вы ошибаетесь. На самом деле моя версия (2.2.6-1ubuntu1) запускается с небольшим предупреждением и пустым файлом, а затем<C-X>
просит меня ввести любое имя файла, к которому я хочу сохранить, открывая новый вектор атаки! Ну, по крайней мере, он отказался перезаписать существующий файл (в одном тесте, который я сделал). В любом случае, поскольку нет возможности занести в черный список подпапки с помощью sudo, мы должны сделать вывод, что этот подход снова небезопасен. Извините, пользователи!Это открытие заставило меня усомниться в тщательности
nano
«ограниченного» режима. Они говорят, что цепочка настолько же сильна, насколько ее самое слабое звено. Я начинаю чувствовать комбинациюsudo
черной магии черного списка и,rnano
возможно, не более безопасна, чем цепь ромашек.3. Безопасные, но ограниченные подходы
Глобусы очень ограничены - они не позволяют нам сопоставить класс персонажа несколько раз. Вы можете предложить несколько файловых изменений, если все ваши имена файлов имеют одинаковую длину (в этом случае
host
следует одна цифра):Но если вы хотите предоставить пользователю доступ к редактированию различных файлов, вам может потребоваться явно указать каждый файл:
Не поддавайтесь искушению использовать
*
в любой момент. Смотрите разделы 1. и 2. выше, почему! Помните: одна маленькая ошибка может поставить под угрозу всю учетную запись суперпользователя и всю систему.4. Напишите свой собственный аргумент проверки (безопасность теперь ваша ответственность)
Я надеюсь, что они добавят поддержку регулярных выражений
sudo
в будущем; это может решить множество проблем при правильном использовании. Но нам также может понадобиться возможность проверить свойства аргументов (чтобы разрешить только файлы, только папки или только определенные флаги).Но есть одна альтернатива для создания гибкости в sudo. Сваливать ответственность:
Затем напишите свой собственный
staffedit
скрипт или исполняемый файл, чтобы проверить, являются ли аргументы, переданные пользователем, допустимыми, и выполняйте их запрос, только если они есть.источник
ALL=(ALL:ALL) ALL
слишком мало семантики, но я всегда предполагал, что где-то у него будет достойная проверка аргументов ... Я был неправ. Это действительно очень ограничено. Даже исключение root-пароля passwd, предлагаемое на man-странице, может быть сломано простым аргументом командной строкиsudo passwd -q root
. Авторы sudo перечисляют [некоторые альтернативы] (sudo.ws/sudo/other.html) на своем веб-сайте. Я надеюсь, что они добавят поддержку регулярных выражений в будущем.rnano
в своем описании здесь, потому что это версия nano, в которой отсутствует функция «сохранить как»? Я не знаком с программой.$ man nano
затем/-R<Enter>
-q
должны прийти потом:sudo passwd root -q
. Пример Пита можно укрепить, исключив*root*
.sudoedit
чтобы безопасно включить изменение файла с помощьюsudo
.Сначала откройте файл sudoers с помощью
sudo visudo
. Добавлениеuser ALL=!/usr/sbin/service
будет, IIRC, запретитьservice
команду для пользователяuser
.Источники: http://nixcraft.com/showthread.php/15132-Sudo-Exclude-Commands-And-Disable-sudo-su-Bash-Shell
источник
Я нашел решение.
Я открыл терминал и перешел в пользователя root,
su -
затем набрал текстvisudo
для редактирования.тогда в конце я написал такие строки, как
Тогда я сохранил и закрыл и перезапустил тоже.
Теперь, если я печатаю как
service network restart
илиservice NetworkManager restart
тогда, это не позволяет мне и выдает ошибку вродеи аналогично для
service network restart
команды также.источник
sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudo
и тогдаsudo /etc/init.d/network-not-in-sudo restart
). Вот почему гораздо безопаснее создавать включения, а не исключения в файле sudoers, например, указывать, с какими службами им разрешено взаимодействовать.Реальный ответ на это заключается в том, что вы не можете предотвратить это. Вы можете предотвратить случайное выполнение этой команды кем-то непривычным с помощью методов, описанных в других ответах, но если кто-то действительно хочет выполнить ее и находится в списке sudoers, он может запустить ее. Например, они могли бы сделать следующее:
joe@box:~$ sudo bash root@box:~# service network restart
Или другую забавную команду, которую они могли бы использовать, чтобы обойти ваши ограничения в файле sudoers:
sudo visudo
Короче говоря, если вы можете использовать sudo, и это не ограничивается выполнением определенных команд, вы можете делать практически все, что захотите. Даже если вы ограничите их определенным набором команд, вы должны будете убедиться, что пользователь не сможет скопировать какую-либо другую команду, которую он хотел запустить, под тем же именем, что и у него было разрешение на выполнение ( например, перезаписав команду, которую они имеют разрешение на запуск.)
источник
Используйте firejail, чтобы ограничить пользователей песочницами.
https://github.com/netblue30/firejail/
Установите firejail как shell вместо bash в / etc / passwd для каждого пользователя, которого вы хотите ограничить. Он очень прост в использовании и имеет хорошую документацию.
Пример:
источник