Dormestmass: Админ — это состояние души

Монтирование usb flash от юзера в FreeBSD

Как ни странно, но в FreeBSD процесс монтирования флеш-накопителя от непривелигированного пользователя немного напоминает танец с бубном :) . По крайней мере, так мне показалось после проделывания этой процедуры в Linux-системах.

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

Во-первых, разрешить монтирование пользователям, установив переменную sysctl vsf.usermount в 1

srn@rawbeer ~>> cat /etc/sysctl.conf
...
vfs.usermount=1
...

Во-вторых, пользователь должен быть владельцем точки монтирования и иметь, как минимум, права доступа на чтение для устройства накопителя. С точкой монтирования всё понятно. С правами доступа к устройству придется немного повозится. Поскольку начиная с ветви 5.Х в системе используется механизм devfs, то эти права придется выставлять как раз через него. В приведенной конфигурации подразумевается что пользователь входит в группу operator.

Прямая атака на /etc/devfs.conf в виде записи

own   da0 root:operator
perm  da0 0660
own   da0s1 root:operator
perm  da0s1 0660

в качестве результата дала абсолютный ноль.

После непродолжительного гугления выяснил причину. Как оказалось, записи в devfs.conf применяются только во время загрузки, а т.к. на момент загрузки, usb устройство, как правило, не присоединено и /dev/da0 с /dev/da0s1 не существуют, то правила own и perm никогда не будут выполнятся.

Для динамически подключаемых устройств следует использовать файл правил /etc/devfs.rules.

Необходимо создать этот файл и создать в нем секцию с нашими правилами. Для флеш-накопителя это будет нечто подобное:

srn@rawbeer ~>> cat /etc/devfs.rules
[localrules=10]
add path 'da*0*' mode 0660 group operator

Формат файла можно посмотреть в devfs.rules (5), формат правил в devfs (8).

В /etc/rc.conf необходимо указать созданный набор правил:

srn@rawbeer ~>> cat /etc/rc.conf
...
devfs_system_ruleset="localrules"
...

После этого перезапускаем devfs и пробуем монтировать накопитель. Сразу же видим грабли.

srn@rawbeer ~>> sudo /etc/rc.d/devfs restart
srn@rawbeer ~>> mount -t msdosfs -o -L=ru_RU.KOI8-R /dev/da0s1 ~/flash
mount_msdosfs: cannot find or load "msdosfs_iconv" kernel module
mount_msdosfs: msdosfs_iconv: Operation not permitted

Если не использовать ключ для конвертирования имен файлов, то данной проблемы не возникает.
Красивого решение проблемы не нашёл. Как описано в блоге StraNN'ое место, существуют два варианта решения этого бага. Либо добавить SUID-бит для команд mount_msdosfs и umount, либо первоначально монтировать устройство от пользователя root. К сожалению второй вариант мало подходит, т.к. устройство вовремя загрузки системы не подключено.

Так что, пока пришлось воспользоваться SUID-правами на командах.

Осталось лишь прописать для удобства точку монтирования в fstab и всё готово.

Популярность: 5%

P.S.

На нашем сайте представлены все квартиры посуточно в Днепропетровске условия аренды и цены.
KUMHO KL-16.

Вы можете следить за обсуждением с помощью RSS 2.0 ленты.