Новости и обновления

Как дать пользователям Linux нужные функции без риска для безопасности

Поделиться:
Wrappers on Linux Workstations

Как системные администраторы Linux, мы иногда сталкиваемся с дилеммами относительно того, что мы можем или не можем разрешить на машинах.

Некоторые функции очень важны для пользователей в их повседневных задачах и для более эффективного использования их устройств, но они иногда также сопряжены с проблемами безопасности.
Мы нашли способ по-прежнему разрешать большинство этих функций, но при этом иметь больший контроль над ними, а также над их результатом.

Хотя сообщество пользователей Linux технически подковано, их задачи по-прежнему весьма разнородны. Это могут быть разработчики, сисадмины, сетевые инженеры и другие...
И все они работают по совершенно разным рабочим процессам (от фронтенд-веба до низкоуровневых драйверов). Иногда на ноутбуке, в docker'е, на локальной виртуальной машине или удалённо на виртуальной машине для разработки. Некоторым может даже потребоваться подключение через специфичное аппаратное обеспечение.

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


Сочетание удобства и безопасности

Wrappers on Linux Workstations

Обёртки (wrappers) обычно используются для абстракции и удобства; на них часто полагаются, чтобы упростить рабочие процессы командной строки, обеспечить использование согласованных параметров или адаптировать устаревшие инструменты к современным средам.
В данном случае они используются больше как "ограничители".

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

Зачем нашим пользователям может понадобиться доступ к apt? Почему бы просто не удалить эту опцию полностью?

Поскольку наша пользовательская база довольно техническая и в целом хорошо знает свою операционную систему, они должны иметь возможность устанавливать разрешённые пакеты, обновлять или удалять их, когда захотят (даже несмотря на то, что у нас также есть ежедневные автоматические обновления).
Кроме того, если они столкнутся с какой-либо базовой проблемой dpkg/apt, логично, что они смогут решить её самостоятельно.

Вот список доступных опций, которые мы предоставили:

Использование:
ovh-apt <install|reinstall|remove|purge> [ОПЦИИ] <пакет|пакет=версия> [пакет...]
ovh-apt <update|autoclean|clean>
ovh-apt <fix> (выполняет apt-get install -f)
ovh-apt <fix-dpkg> (выполняет dpkg --configure -a)
Примеры:
ovh-apt update
ovh-apt install vim
ovh-apt install vim=2:8.1.2269-1ubuntu5.17
ovh-apt install --only-upgrade bash
ovh-apt fix

У нас также есть список защищённых пакетов, чтобы избежать удаления очень полезных из них: конфигурация брандмауэра, systemd, sudo и т.д...
В основном это включает всё, что может повлиять на безопасность или целостность системы. Кроме того, эта конкретная обёртка является неинтерактивной — чтобы гарантировать, что никогда не будет предложена root-оболочка — как это может быть в случае с нативным dpkg.

Как предотвратить удаление конкретных пакетов?

У нас есть файл .txt, содержащий кучу названий пакетов (по одному на строку).
В нашем скрипте ovh-apt мы заглядываем в этот файл, и если находим соответствующий пакет, то завершаем выполнение скрипта.

re="^(Purg|Remv) ([^ ]+) "
IFS="
"
protected="$(cat /etc/ovh/ovh-apt/protected.txt)"
apt_output=$(cat nohup.out)
for line in $apt_output ; do
if [[ "$line" =~ $re ]]; then
package="${BASH_REMATCH[2]}"
if [[ " ${protected[*]} " =~ [[:space:]]${package}[[:space:]] ]]; then
echo "Error: Package $package is protected, won't do."
cancel=1
fi
fi
done
unset IFS

Это ещё не всё

Wrappers on Linux Workstations

По умолчанию в UNIX-системах для изменения раскладки клавиатуры требуются права root. Мы решили создать обёртку, чтобы разрешить некоторым пользователям устанавливать раскладку по своему выбору.
Эта реализация также была очень востребована пользователями Linux, и это вполне понятно.

Вот как это работает:

Использование: ovh-keyboard <команда> [опции]
Команды:
show -> Показать текущую конфигурацию клавиатуры.
set <раскладка> -> Обновить конфигурацию клавиатуры.
Допустимые варианты: fr, us, gb, ca, es, it, de, pt

Просто для интереса, вот список других обёрток, которые мы используем:

ovh_backlightctl Позволяет пользователю управлять настройками подсветки своих мониторов.
ovh_snap Позволяет пользователям управлять списком snap-пакетов на своём устройстве (защищённые).
ovh_swapclean Очевидно.
ovh-systemctl Позволяет выполнять специфичные и безопасные команды systemctl.
nmcli_wrapper Блокирует опцию --show-secrets в nmcli. Потому что мы не хотим, чтобы секреты были видны (поэтому они и секреты).

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

Wrappers on Linux Workstations