Монтирование usb flash от юзера в FreeBSD
- 14.07.10, 22:41
Как ни странно, но в 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 и всё
готово.
http://www.opennet.ru/base/sys/freebsd_usb_user_mount.txt.html
непривелигированного пользователя немного напоминает танец с бубном
:). По крайней мере, так мне показалось после проделывания этой
процедуры в 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 и всё
готово.
http://www.opennet.ru/base/sys/freebsd_usb_user_mount.txt.html
0
Коментарі
Vlad_UA
114.07.10, 22:57
А зачем фря на десктопе, если это напропалую серверная система?
Конечно, сейчас фря пытается пробраться и на десктоп, но как правило если на комп ставят фрю, то наличие монитора, клавиатуры, мыши может и не входить в планы.
Ставьте Дебиан или Убунту (в принципе - то же самое) и наслаждайтесь автоматическим подключением флешки с появлением ярлыка на рабочем столе!
UseNix
214.07.10, 23:44Відповідь на 1 від Vlad_UA
ну тут каждому свое , мне честно фри уже маловато OpenBSD самое оно )