Существует ли хороший способ разрешить обычным пользователям монтировать произвольные внешние USB-накопители на Linux?

Вопрос или проблема

У нас есть ситуация, где в офисе сайта несколько серверов на Rocky Linux 8, которые регулярно получают большие объемы данных от клиентов. Данные поступают на различные внешние USB жесткие диски и иногда на USB накопители. Эти диски могут иметь самые разные файловые системы, но наиболее распространены NTFS и exFAT.

NTFS поддерживается в RL8 по умолчанию, но exFAT — нет. Мы использовали пакет fuse-exfat из rpmfusion. (https://github.com/relan/exfat).

Я бы хотел, чтобы мои пользователи, не имеющие и не долженствующие иметь root доступ, могли монтировать их без проблем. Раньше мы использовали pmount, но pmount не работает с exFAT. Думаю, это связано с тем, что это FUSE, а не из-за exFAT.

Есть ли хороший, безопасный способ достигнуть этого?

Редактировать: по-видимому, pmount является очень тонкой оболочкой вокруг mount, и права устанавливаются через бит setuid на исполняемом файле. Таким образом, это по существу конечный набор команд mount, и exfat не входит в их число. Здесь есть некоторое обсуждение: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755434 и предлагаемый патч здесь: launchpadlibrarian.net/229524614/pmount.exfat.patch

Вы можете использовать udisks2, который позволяет пользователям управлять и монтировать устройства хранения данных без root доступа.

  • Установите инструмент: sudo dnf install udisks2 ntfs-3g fuse-exfat
  • Разрешите пользователю управлять: sudo usermod -a -G disk <username>

Пользователи без прав root в группе disk могут использовать командную строку udisksctl для управления и монтирования внешних дисков.

Замените <username> на пользователя, которому вы хотите разрешить управление дисками.

  • Монтирование диска: udisksctl mount -b /dev/sdXY
  • Отмонтирование диска: udisksctl unmount -b /dev/sdXY
  • Получение информации: udisksctl info -b /dev/sdXY

Думаю, я нашел решение. Добавьте следующее правило polkit в файл /etc/polkit-1/rules.d/10-allow-usb-mounts.rules:

polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.udisks2.filesystem-mount-other-seat" && subject.isInGroup("groupforthosewhocanmountusbdisks")) {
    var bus = action.lookup("drive.removable.bus");
    if (bus == "usb" || bus == "firewire") {
      polkit.log("polkit правило для монтирования USB дисков с помощью udisks2")
      polkit.log("Устройство: " + action.lookup("device"))
      polkit.log("Диск: " + action.lookup("drive"))
      polkit.log("Шина: " + bus)
      polkit.log("Серийный номер: " + action.lookup("drive.serial"))
      polkit.log("Производитель: " + action.lookup("drive.vendor"))
      polkit.log("Модель: " + action.lookup("drive.model"))
      return polkit.Result.YES;
    }
  }
});

Для тестирования смонтируйте диск как обычный пользователь с помощью:

udisksctl mount -b /dev/sdb

И проверьте вывод с помощью journalctl.

Вы можете настроить sudo чтобы позволить пользователям выполнять специально разработанный скрипт для монтирования USB дисков в фиксированной точке монтирования, указывая только устройство. Например, они могут выполнить команду:

sudo mount-usb /dev/sdb

где скрипт попытается смонтировать /dev/usb и монтировать его, например, в /mnt/usb, и сообщить об этом пользователю. Аналогично, можно иметь скрипт umount-usb для отмонтирования диска с помощью:

sudo umount-usb

Скрипт mount-usb может выглядеть так:

#!/bin/bash
# mount-usb: монтировать диски в /mnt/usb
[ -z "$1" ] && echo "Используйте: $0 устройство" && exit
if ! [[ $1 =~ ^/dev/.*$ ]] ; then
   echo "Используйте /dev/xxx как устройство"
   exit
fi
mount -t auto -o uid=$SUDO_UID,gid=$SUDO_UID,ro "$1" /mnt/usb
mount | grep /mnt/usb    #-- показать результат

Мы используем переменные SUDO* для получения реального id/gid вызывающего пользователя и простую проверку спецификации устройства с помощью регулярного выражения. Соответствующий скрипт umount-usb будет таким:

#!/bin/bash
# umount-usb: отмонтировать устройство в /mnt/usb
umount /mnt/usb

Настройка sudo выполняется редактированием файла /etc/sudoers с помощью команды visudo (или VISUAL=nano visudo, чтобы использовать другой редактор вместо vi), где мы можем разрешить некоторым пользователям или группе выполнять определенные команды как root без запроса пароля. Пример для пользователя john и группы usb-mounters:

Defaults       !lecture
Cmnd_Alias     USBMNT = /root/mount-usb ^/dev/.*$, umount-usb ""
john           ALL=NOPASSWD: USBMNT
%usb-mounters  ALL=NOPASSWD: USBMNT

Обратите внимание на регулярное выражение, чтобы включить только аргументы /dev/xx в mount-usb и пустую строку, чтобы исключить их в umount-usb (как описано в руководстве sudoers). С этой настройкой мы можем опустить проверку /dev/xx в скрипте, но я предпочитаю оставить ее в любом случае.

.

Ответ или решение

В мире современных информационных технологий конфиденциальность и безопасность данных занимают первостепенное место среди приоритетов. Одной из частых задач, с которой сталкиваются IT специалисты, является организация безопасного доступа для обычных пользователей к монтированию внешних USB-устройств на сервере с Linux, например, в вашей ситуации с использованием серверов на базе Rocky Linux 8.

Теория

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

Существует несколько подходов к решению этой задачи. Основной из них — использование системы udisks2. Эта утилита предоставляет удобные средства для управления блоковыми устройствами, позволяя монтировать, размонтировать и управлять устройствами без необходимости получения прав root. Настройка политики безопасного доступа к USB-устройствам пользователей также играет ключевую роль.

Пример

Ваш сценарий включает использование fuse-exfat для поддержки форматов файловых систем, таких как exFAT, а также ntfs-3g для NTFS. Для реализации требований можно следовать следующей схеме:

  1. Установка необходимых инструментов:

    sudo dnf install udisks2 ntfs-3g fuse-exfat
  2. Настройка прав доступа:
    Вы можете создать отдельную группу пользователей, например, "usb-mounters," и разрешить этой группе возможность монтировать USB-устройства. Дайте соответствующие права:

    sudo groupadd usb-mounters
    sudo usermod -a -G usb-mounters <username>
  3. Настройка Udisks2 с Polkit:
    Создайте файл с политикой доступа, например, в /etc/polkit-1/rules.d/10-allow-usb-mounts.rules:

    polkit.addRule(function(action, subject) {
      if (action.id == "org.freedesktop.udisks2.filesystem-mount-other-seat" &&
          subject.isInGroup("usb-mounters")) {
          var bus = action.lookup("drive.removable.bus");
          if (bus == "usb") {
              return polkit.Result.YES;
          }
      }
    });
  4. Использование Udisksctl:
    Теперь пользователи из группы "usb-mounters" могут использовать команды udisksctl:

    • Монтирование устройства:
      udisksctl mount -b /dev/sdXY
    • Снятие монтирования устройства:
      udisksctl unmount -b /dev/sdXY
  5. Обеспечение безопасного аудита:
    Используйте journalctl для мониторинга любых действий, связанных с монтированием USB-устройств. Это поможет вовремя выявить и исправить возможные нарушения политики безопасности.

Применение

Данный подход обеспечивает баланс между удобством использования и безопасностью. Обычные пользователи получают возможность самостоятельно монтировать и снимать монтирование USB-устройств, что облегчает рабочий процесс и увеличивает продуктивность. В то же время администраторы сохраняют контроль над системой доступа, благодаря интеграции c Polkit и системой аудита, что делает этот подход надежным и безопасным.

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

Оцените материал
Добавить комментарий

Капча загружается...