Монтирование сменных устройств для FreeBSD без прав root'а

Евгений Чайкин aka StraNNick
StraNN'ое место

2005-04-05

К моему удивлению, этот вопрос в Рунете освещен слабо. Источники неполны и разрознены. Между тем, всё не так уж и сложно. Я буду рассматривать этот вопрос на примере FreeBSD 5-й ветки.

Итак, для начала, выставим на устройства соответствующие права:
В файле /etc/devfs.conf пропишем следующее:

perm    /dev/cd0     0666
perm    /dev/xpt0    0666
perm    /dev/pass0   0666
perm    /dev/fd0     0666

Затем, установим значение переменной vfs.usermount, равное 1, путем прописывания её в /etc/sysctl.conf. Можно просто использовать команду

$ sysctl vfs.usermount=1

но тогда после первой же перезагрузки, она сбросится в 0).

Далее, займёмся редактированием файла /etc/fstab, прописав в нем точки монтирования для тех пользователей, которым мы хотим разрешить это делать:

/dev/cd0  /cdrom              cd9660   ro,noauto,-C=koi8-r   0   0
/dev/cd0  /home/user1/cdrom   cd9660   ro,noauto,-C=koi8-r   0   0
/dev/cd0  /home/user2/cdrom   cd9660   ro,noauto,-C=koi8-r   0   0
/dev/cd0  /home/user3/cdrom   cd9660   ro,noauto,-C=koi8-r   0   0
/dev/fd0  /floppy             msdosfs  rw,noauto,-L=ru_RU.KOI8-R,-D=CP866   0   0
/dev/fd0  /home/user1/floppy  msdosfs  rw,noauto,-L=ru_RU.KOI8-R,-D=CP866   0   0
/dev/fd0  /home/user2/floppy  msdosfs  rw,noauto,-L=ru_RU.KOI8-R,-D=CP866   0   0
/dev/fd0  /home/user3/floppy  msdosfs  rw,noauto,-L=ru_RU.KOI8-R,-D=CP866   0   0

Далее, надо не забыть создать в домашнем каталоге каждого пользователя соответствующие каталоги (cdrom и floppy). Теперь рабочие среды Gnome и KDE будут отображать состояние соответствующих устройств и пытаться управлять ими (монтировать и отмонтировать).

Далее пойдёт шаманство. Поскольку на носителях могут встретиться файлы с именами, содержащими кириллицу, в /etc/fstab прописаны соответствующие опции перекодировки. Но даже при вмонтировании в ядро соответствующих опций, всё равно будет выдаваться сообщение

operation not permitted

Как мне любезно объяснили на opennet, это известный баг и обойти его можно двояко - выставив SUID на mount/umount, либо произведя монтирование/отмонтирование этих устройств от имени root'а на этапе загрузки.

Второй способ показался мне более приемлемым, и я создав файл /usr/local/etc/rc.d/mount_umount.sh, прописал в нем:

#!/bin/sh
mount /cdrom;  umount /cdrom
mount /floppy; umount /floppy

Наличие носителя в устройстве необязательно.

На этом раскланиваюсь...

P.S. Существует неплохой порт автомонтирования для CD - audio/autocd, который замечательно справляется со своими обязанностями. К сожалению, используемый мной CD является пишущим, а необходимость отмонтировать CD перед каждой записью мне показалось неудобной...