Рейтинг:0

sudo, чтобы разрешить apt-get установку удаленных пакетов, но запретить произвольные команды

флаг cn

Я ищу способ разрешить пользователю устанавливать (только удаленные) пакеты через способный получить (или другой механизм?), но не позволяет им запускать произвольные команды от имени пользователя root.

я могу получить некоторый по пути туда через /etc/sudoers. Скажем, у меня есть это в моем файле /etc/sudoers

корень ВСЕ=(ВСЕ:ВСЕ) ВСЕ
Джон ALL=NOPASSWD:/usr/bin/apt,/usr/bin/apt-get

Затем Джон кажется ограниченным в беге подходящий и способный получить с помощью судо. Но... кажется, есть способы сбежать способный получить в оболочку как root (https://blog.ikuamike.io/posts/2021/package_managers_privesc/):

  • Тип sudo apt-получить журнал изменений и нажмите ввод
  • Введите восклицательный знак ! и нажмите ввод
  • Теперь вы находитесь в оболочке как пользователь root и можете делать все что угодно

Или запустите ниже:

sudo apt update -o APT::Update::Pre-Invoke::="/bin/bash"

Если это имеет значение, это в Docker


Был размещен в https://superuser.com/q/1698692/315568, но я думаю, что это был не тот сайт, так как это не (только) для моей машины, но и для других

флаг cn
Bob
Если вы не доверяете пользователю john, он не должен получать никаких прав sudo. Вы пытаетесь закрыть единственный путь злоупотребления, но дело в том, что Джон, например, все еще может создать собственный пакет, который устанавливает любые инструменты, необходимые ему для обхода ваших средств контроля доступа с помощью `sudo apt install ./my-rootkit.deb`
Рейтинг:1
флаг cn
Bob

sudoers В руководстве также есть целый раздел о том, как правильно вести политику в /etc/sudoers конфигурационный файл (или, конечно, входящие в комплект файлы политик) может предложить ограниченное защита от побегов снаряда с ОГРАНИЧИТЬи NOEXEC параметры.

Это может быть более общим, чем создание скрипта-обертки для конкретной утилиты.

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

и

noexec
Многие системы, поддерживающие разделяемые библиотеки, имеют возможность переопределять функции библиотеки по умолчанию, указывая переменную среды (обычно LD_PRELOAD) на альтернативную разделяемую библиотеку. В таких системах sudo noexec функциональность может использоваться для предотвращения выполнения программой, запускаемой sudo, любых других программ. Запись, ... ...
Включить noexec для команды используйте NOEXEC тег, как описано выше в разделе «Спецификация пользователя». Вот еще раз этот пример:
Аарон Шанти = NOEXEC: /usr/bin/more, /usr/bin/vi
Это позволяет пользователю aaron запускать /USR/бен/больше и /USR/бен/ви с включенным noexec. Это предотвратит выполнение этими двумя командами других команд (например, оболочки).

Итак, в вашем примере:

Джон ALL=NOEXEC:NOPASSWD: /usr/bin/apt,/usr/bin/apt-get

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

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

Рейтинг:0
флаг cn

Это моя попытка, поэтому пользователь будет использовать судо для запуска этого скрипта, но не других.

#!/бин/баш

# Этот скрипт оборачивает `apt update` и `apt install`, но пытается запретить
# произвольные команды, которые может запускать пользователь с правами root. Это существует
# потому что разрешение пользователю `sudo apt` позволило бы
# `sudo apt changelog apt`, который запускается `less`, что позволяет
# пользователь для выхода в оболочку.

# Но полный доступ к `apt update` и `apt install` по-прежнему не может быть предоставлен,
# так как есть 3 способа их использования для запуска произвольных команд
#
# 1. Через опции в переменной окружения APT_CONFIG
# 2. С помощью параметров командной строки, таких как '-o', чтобы указать сценарии для запуска
# 3. Через локальный пакет, который содержит пользовательские сценарии установки.
#
# Таким образом, этот скрипт пытается запретить 3 вышеуказанные возможности

# 1. Очистите все параметры в переменной окружения APT_CONFIG
экспорт APT_CONFIG=''

# 2. и 3. Запретить параметры командной строки или локальные пакеты
для var в $*
делать
   если [[ ${var::1} == "/" || ${var::1} == "." || ${var::1} == "-" ]]
   тогда
     echo "E: Запрещено устанавливать локальный пакет или передавать параметр"
     выход 1
   фи
сделано

# Обновить и установить запрошенные пакеты
удачное обновление
меткая установка -y $*

Ответить или комментировать

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