Вопрос или проблема
Если я root, я могу выполнить команду mount -o remount,ro /data
. Однако я не могу сделать это в своей пользовательской сессии без использования sudo. Я пытался изменить мой fstab:
LABEL=DATA /data ext4 auto,rw,users 0 1
Я добавил правило polkit:
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.udisks2.filesystem-mount" ||
action.id == "org.freedesktop.udisks2.filesystem-unmount" ||
action.id == "org.freedesktop.udisks2.filesystem-mount-system-internal") &&
subject.isInGroup("me")) {
return polkit.Result.YES;
}
});
Но мне не удалось заставить это работать. Всегда с той же ошибкой: mount /data : must be superuser to use mount
udisksctl mount -b /dev/sdx --options remount,ro
.
Ответ или решение
Для выполнения задачи монтирования раздела с использованием опции -o remount,ro
без прав суперпользователя, необходимо учитывать несколько аспектов, касающихся прав доступа и управления системой. Рассмотрим возможные решения на основе предоставленного описания проблемы и применимых технологий.
Анализ и Решения
-
Проблема привилегий: При попытке выполнить команду
mount -o remount,ro /data
без использованияsudo
, мы сталкиваемся с ограничением, что команда требует прав суперпользователя. Это связано с тем, что изменение статуса файловой системы (например, перевод в режим "только для чтения") требует прямого доступа к системным ресурсам. -
Изменение fstab: Файл fstab позволяет задавать параметры автоматического монтирования файловых систем. В вашем примере предоставлена строка:
LABEL=DATA /data ext4 auto,rw,users 0 1
Строка с параметром
users
разрешает всем пользователям монтировать и размонтировать файловую систему, но не изменять параметры монтирования. Чтобы разрешить изменение параметров монтирования, параметраusers
может быть недостаточно. -
Политики Polkit: Вы добавили правило в Polkit для разрешения определенных действий пользователям, принадлежащим к группе "me". Тем не менее, проблема может заключаться в неправильной идентификации действия или в отсутствии необходимых прав на утилиту
mount
. -
Использование udisksctl: Попытка использовать
udisksctl
для монтирования с опциями приводит к аналогичному ограничению:udisksctl mount -b /dev/sdx --options remount,ro
Утилита
udisksctl
также требует определенных привилегий, и возможно, что используемая команда не охватывается текущей политикой Polkit.
Рекомендованные Шаги
-
Обновление Polkit Правил: Убедитесь, что правило Polkit действительно совпадает с требуемым действием. Вы можете использовать журналы системы или отладочные сообщения для диагностики:
journalctl -xe | grep polkit
Просмотрите журналы, чтобы определить, какие именно действия отклоняются.
-
Проверка Групповых Прав: Подтвердите, что текущий пользователь действительно включен в соответствующую группу, упомянутую в правило Polkit, используя:
groups <имя_пользователя>
-
Используйте capsh: Если прямое изменение прав невозможно, рассмотрите использование
capsh
для предоставления процесса дополнительных привилегий без полного суперпользовательского доступа. -
Скрипты и Алиасы для Sudo: В возможностях загрузить сценарий оболочки, который запросит пароль superuser один раз для выполнения всех будущих операций, как временное решение, если другие варианты не доступны.
Заключение
Хотя задача монтирования раздела с опцией -o remount,ro
без суперпользовательских прав может оказаться сложной, стратегическое использование системных инструментов и политики безопасности, таких как Polkit, может облегчить выполнение этой операции. Предложенные шаги позволят адаптировать систему так, чтобы они соответствовали вашим требованиям безопасности и управляемости.