Можно ли разрешить некоторым конкретным пользователям (например, членам группы) монтировать любую файловую систему без привилегий суперпользователя в Linux?
Другой вопрос мог заключаться в том, «каким образом пользователь может повредить систему, монтируя файловые системы?»
linux
mount
not-root-user
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
источник
gvfs-mount
-d /dev/sdX
Ответы:
Есть пара подходов, некоторые из них в основном безопасны, другие совсем нет.
Небезопасный путь
Пусть любое использование запускается
mount
, например, через sudo. Вы могли бы также дать им корень; это то же самое. Пользователь может смонтировать файловую систему с suid-корневой копией -bash
runing, которая мгновенно дает root (скорее всего, без какой-либо регистрации, помимо факта, которыйmount
был запущен).Кроме того, пользователь может смонтировать свою собственную файловую систему поверх
/etc
, содержащую его / ее собственную копию/etc/shadow
или/etc/sudoers
, а затем получить root с помощью либоsu
илиsudo
. Или, возможно, bind-mount (mount --bind
) для одного из этих двух файлов. Или новый файл в/etc/sudoers.d
.Подобные атаки могут быть осуществлены
/etc/pam.d
и во многих других местах.Помните, что файловые системы даже не должны быть на устройстве, они
-o loop
будут монтировать файл, который принадлежит (и, следовательно, может быть изменен) пользователем.Наиболее безопасный способ: удиски или аналогичные
В различных средах рабочего стола уже созданы соответствующие решения, позволяющие пользователям монтировать съемные носители. Они работают, монтируя только в подкаталоге
/media
и отключая поддержку set-user / group-id через параметры ядра. Варианты здесь включаютudisks
,udisks2
,pmount
,usbmount
,Если вам необходимо, вы можете написать свой собственный скрипт для выполнения чего-то подобного и вызывать его через sudo, но вы должны быть очень осторожны при написании этого скрипта, чтобы не оставить корневых эксплойтов. Если вы не хотите, чтобы ваши пользователи помнили sudo, вы можете сделать что-то подобное в скрипте:
Когда-нибудь мы будем в безопасности: пространства имен пользователей
Пространства имен Linux - это очень легкая форма виртуализации (контейнеры, если быть более точным). В частности, с пространствами имен пользователей любой пользователь в системе может создать свою собственную среду, в которой он является пользователем root. Это позволило бы им монтировать файловые системы, за исключением явно заблокированных, за исключением нескольких виртуальных файловых систем. В конце концов, файловые системы FUSE, вероятно, будут разрешены, но самые последние исправления, которые я смог найти , не охватывают блочные устройства, а только такие вещи, как sshfs.
Кроме того, во многих ядрах дистрибутивов (по соображениям безопасности) по умолчанию не разрешено непривилегированным пользователям использовать пространства имен пользователей; например, Debian имеет значение по
kernel.unprivileged_userns_clone
умолчанию 0. Другие дистрибутивы имеют аналогичные настройки, хотя часто с немного другими именами.Лучшая документация, которую я знаю о пространствах имен пользователей, - статья LWN « Пространства имен в действии», часть 5: Пространства имен пользователей .
Сейчас я бы пошел с udisks2.
источник
mount
могли монтировать файловые системы, как это делает root? Я прочитаю документ о пространствах имен, с которым вы связаны, и попытаюсь реализовать эту группу монтирования, по крайней мере, в качестве упражнения.Вы можете сделать это, но вам нужно изменить запись в
/etc/fstab
соответствии с файловой системой, которую вы хотите смонтировать, добавив флагuser
к этой записи. Пользователи без привилегий смогут его смонтировать.Смотрите
man mount
для более подробной информации.источник
vfs.usermount
). Я хочу что-нибудь аналогично этому. Я использую много съемных дисков с множеством разделов на каждом, и было бы неудобно добавлять дюжину или две записи в fstab для каждого из них.udev
управлять записями, поскольку новые устройства появляются и исчезают.Вот вики для настройки правил polkit для udisks / udisks2 для монтирования разделов по некорневой (например, по пользователям) группе.
Сохраните код ниже в /etc/polkit-1/rules.d/50-udisks.rules
Предположим, вы находитесь в группе «пользователи», используя следующую команду для монтирования раздела (нет необходимости sudo).
источник
1 Посмотри где это работает
В Xubuntu он работает из коробки для установки и извлечения запоминающего устройства USB, разделов жесткого диска, CD / DVD-дисков и, возможно, многого другого.
Давайте предположим, что решение, выбранное Ubuntu с использованием policyKit, является достаточно безопасным.
2 Выберите соответствующую часть
На XFCE на Debian 8.3 мне нужно было разрешить пользователю монтировать и извлекать файловые системы из thunar без пароля. То, что сработало для меня, это выбрать файл разрешения в Ubuntu.
Добавление строк ниже как root к файлу с именем
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
должно помочь:3 Прибыль!
(На самом деле я выбрал немного больше из файла с тем же именем в Ubuntu 16.04, и он сработал для меня. Если вам это нужно, он в основном похож на содержимое https://gist.github.com/kafene/5b4aa4ebbd9229fa2e73 )
источник
Вы можете настроить,
sudo
чтобы набор пользователей мог запускатьmount
команду.Обновление : как можно повредить систему при монтаже? Например, вы можете создать корневую оболочку setuid в файловой системе, которую затем можно смонтировать и выполнить для получения привилегий root.
источник
sudo
? Кроме того, не этот ли пользователь root монтирует файловую систему, только за кулисами, с помощью этого метода?mount
чтобыsudo mount
или использовать сценарий оболочки.user
в fstab работает только потому, чтоmount
это setuid root. Ядро проверяет наличие root илиCAP_SYS_ADMIN
возможности, поэтому вы не можете обойтись без участия root.Чтобы ответить на ваш вопрос в скобках, поскольку файловая система является заполнителем для файлов, пользователь может потенциально выполнять вредоносные операции с этой файловой системой, такие как удаление файлов.
Подводя итог двум другим вопросам, я скажу следующее:
fstab
отлично подходит для монтажа во время загрузки постоянного хранения. Это не так здорово, когда вы хотите подключить USB-накопители или иногда подключать некоторые сетевые ресурсы.sudo mount
также хорошо, если вы работаете в системах Ubuntu *. Вам все равно нужно будет ввести пароль.udev
позаботится о монтировании таких вещей, как USB-флешки, камеры и флэш-карты в системах Ubuntu * (но не в менее удобных для пользователя дистрибутивах, таких как Debian, Slackware и т. д.)Я добавлю, что исторически Unix-способ дать полномочия некоторым пользователям (или группам) делать что-либо - через
sudoers
файл.Есть много руководств, чтобы использовать его там, поэтому я не буду предлагать какие-либо конкретные. Я скажу, что я использовал сайт проекта документации Linux, чтобы узнать об этом.
Более
sudoers
того, вы можете прозрачно монтировать устройства и общие ресурсы - даже без указания пароля, если вы решите это сделать (будьте особенно внимательны).В контрольной среде я обычно использую
sudoers
файл, чтобы позволить пользователям определенной группы прозрачно монтировать сетевые ресурсы. Поэтому я добавил командыmount.nfs
иmount.cifs
в файл sudoers, который разрешает такие операции, как «монтирование домашней папки пользователя с сетевого файлового сервера, когда пользователь входит в систему на клиентском терминале», и так изучаю.источник
autofs
его для монтирования/home/$USER
с файлового сервера в папку/home/$USER/fromFS/
на клиентском компьютере.guestmount
Обман libguestfsПолагается на:
Документы: http://libguestfs.org/guestmount.1.html
Протестировано на Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3.
источник