О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

06.11.2008

Наброски к книге. 1. Монтирование сменных устройств

Начинающих пользователей FreeBSD, имеющих опыт работы в современных дистрибутивах Linux'а, часто раздражает необходимость получать права администратора для монтирования сменных накопителей (компакт-диски, флэшки, носители цифровых камер). И по умолчанию это действительно так, и попытки решить эту задачу простым редактированием файла /etc/fstab по образу и подобию Linux'ового успеха иметь не будут -- опция user, обеспечивающая эту функцию в последней ОС, командой mount из FreeBSD не поддерживается.

И тем не менее необходимость административных прав для монтирования сменных устройств во FreeBSD -- кажущаяся. Вот только для реализации права юзера на монтирование потребуются несколько иные действия.

Для начала, получив привилегии root'а, устанавливаем права доступа к файлам сменных устройств в файле /etc/devfs.conf, отвечающем за поведение файловой системы devfs:
perm    /dev/cd0     0666
perm /dev/xpt0 0666
perm /dev/pass0 0666
perm /dev/da0 0666
perm /dev/da0s1 0666
Заодно тут же снимаем символ комментария со строки
#link    acd0    cdrom
Благодаря этому при создании devfs (а она, как известно, пересоздаётся при каждом рестарте машины) будет устанавливаться символическая ссылка для файла /dev/cdrom (такое имя привода компакт-диска желают видеть некоторые программы, например, mplayer) на файл реального устройства acd0.

Затем в файле /ect/sysctl.conf разрешаем монтирование VFS от имени обычного пользователя:
vfs.usermount=1
Теперь возвращаем себе права обычного пользователя и от его имени создаём в домашнем каталоге точки монтирования для сменных устройств:
% mkdir ~/cdrom ~/usb
Проверяем правильность настроек командами:
% /sbin/mount -t vfat /dev/da0s1 ~/usb
% /sbin/mount -t cd9660 -o ro /dev/da0s1 ~/cdrom
Если монтирование проходит нормально, то вносим в файл /etc/fstab соответствующие строки:
/dev/acd0 /home/username/cdrom cd9660 ro,noauto 0 0
/dev/da0s1 /home/username/usb vfat rw,noauto 0 0
Однако возможно, что после всех предпринятых шагов флэшка или компакт откужутся монтироваться от лица пользователя, выдав предупреждение, что
Operation not permitted


Почему -- тайна сия велика есть, но такой результат не исключён. Однако и тут есть решение, даже два, правда, оба -- на уровне шаманских рецептов.

Первое решение -- это (от лица суперпользователя) присвоить командам /sbin/mount и /sbin/umount так называемый бит суидности:
# chmod a+s /sbin/mount /sbin/umount
Не очень изящно, но, говорят, работает.

Второе же решение -- вообще попахивает колдовством: произвести монтирование и размонтирование устройства от имени администратора в процессе инициализации системы. Проще всего это сделать посредством скрипта следующего содержания:
#!/bin/sh
mount /cdrom; umount /cdrom
mount /mnt; umount /mnt
который поместить в каталог /usr/local/etc/rc.d/ под именем, например, mount_umount.sh. Наличие компакта в приводе или флэшки, подсоединённой к USB-порту, не обязательно.

Мне с такой ситуацией сталкиваться не пришлось, поэтому не опробовал ни первый, ни второй способы. Но, по сведениям, работают оба.