CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
27.06.2016

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Дистрибутивы :: BSD :: FreeBSD

FreeBSD: монтирование сменных устройств и механизм HAL

CITKIT.ru

В одном из комментариев к Саге о FreeBSD мне попалась такая фраза от некоего анонима:

бсдшники настолько суровы, что флешки вручную монтируют.

Что на это можно ответить? Да, фришники — народ суровый, и монтируют флешки вручную. Более того, делают это только от root'а. И поступают так же с компактами, сменными дисками и носителями цифровых камер. Правда, только тогда, когда им этого хочется.

А когда им это становится лениво, они настраивают возможность монтирования сменных устройств от лица пользователя. И, дабы уж до конца испугать анонимов своей суровостью, подчас не брезгуют даже автоматическим монтированием.

Давеча как раз этим мне и пришлось заниматься на одной дружественной машине, так что я решил вкратце описать последовательность действий — поскольку собственно в Саге о FreeBSD речь до этого дойдёт ещё не скоро, а нервы анонимов надо беречь — иначе кто же будет комментировать материалы в таких количествах?

Начнём с вопроса о монтировании с правами юзера.

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

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

Для начала необходимо обеспечить пользователю права доступа к файлам устройств, соответствующих сменным носителям — напомню, что это файлы вида /dev/acd# для компакт-дисков и /dev/da0 для любых носителей с USB-интерфейсом. Поскольку, начиная с ветки 5, во FreeBSD используется файловая система устройств devfs, прямое изменение атрибутов доступа командой типа chown ничего не даст: она, как известно, пересоздаётся при каждом рестарте машины. А потому пойдём иным путём: получив привилегии root'а, устанавливаем необходимые права доступа к файлам сменных устройств в файле /etc/devfs.conf, отвечающем за поведение файловой системы devfs, вписав в него такие строки:

perm    /dev/acd0    0666
perm    /dev/xpt0    0666
perm    /dev/pass0   0666
perm    /dev/da0	 0666
perm    /dev/da0s1   0666
...

и так далее.

Заодно тут же снимаем символ комментария со строки

#link    acd0    cdrom

Благодаря этому при воссоздании devfs перечисленные выше файлы не только получат нужные атрибуты доступа (чтение и запись для владельца, группы и прочих) , но будет устанавливаться также символическая ссылка для файла /dev/cdrom -> /dev/acd0: такое имя привода компакт-диска желают видеть некоторые программы, например, mplayer.

Затем в файле /ect/sysctl.conf разрешаем монтирование VFS от имени обычного пользователя:

vfs.usermount=1

Теперь возвращаем себе права обычного пользователя и от его имени создаём в домашнем каталоге точки монтирования для сменных устройств:

% mkdir ~/cdrom ~/usb [что ещё нужно]

Проверяем правильность настроек командами:

% /sbin/mount -t msdosfs /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 msdosfs 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-порту, не обязательно.

Мне с такой ситуацией сталкиваться не пришлось, но, говорят, что и это тоже работает: по окончании загрузки сменные устройства монтируются пользователем без всяких проблем.

Однако есть и более радикальный метод настройки монтирования сменных носителей от лица пользователя — использование механизма HAL (Hardware Abstraction Level). Правда, насколько мне известно, работает он только в Иксах, точно — в интегрированных средах KDE, GNOME и Xfce, за менеджеры окон не скажу по незнанию. Хотя, судя по тому, что порт hal идёт в качестве зависимости X-сервера, вероятно, и в некоторых из них этот механизм также поддерживается.

Итак, для начала необходимо установить соответствующий порт — /usr/ports/sysutils/hal. Правда, как только что было сказано, при установке Иксов и какой-либо из интегрированных сред он уже будет инсталлирован как зависимость, причём вместе с графическим фронт-эндом к нему (в случае с GNOME и Xfce это будет порт /usr/ports/sysutils/gnome-mount).

Далее, надо обеспечить запуск соответствующих демонов при старте системы. Собственно, демон, отвечающий за механизм HAL, так и называется — hald. Однако он зависит еще от нескольких стартовых служб — devd, usbd, dbus. Некоторые из них могут быть уже запущены — например, devd запускается по умолчанию (как это установлено в файле /etc/defaults/rc.conf). Определить, какие демоны уже функционируют можно, например, командой

# ps ux

Просматриваем её вывод и вписываем в файл /etc/rc.conf все недостающие строки из следующего набора:

usbd_enable="YES"
dbus_enable="YES"
hald_enable="YES"

Подчеркну, что никакой необходимости в установке прав доступа к файлам устройств или редактировании /etc/fstab, что требовалось при настройке описанного выше пользовательского монтировании вручную, при использовании механизма HAL не возникает. Хотя она (настройка) и ничему не мешает.

Теперь — собственно настройка. Она проста как грабли: отправляемся в каталог /usr/local/etc/PolicyKit и обнаруживаем там файл PolicyKit.conf. По умолчанию содержимое его следующее:

<config version="0.1">
    <match user="root">
	<return result="yes"/>
    </match>
    <define_admin_auth group="wheel"/>
</config>

Что предваряется следующей фразой:

<!-- See the manual page PolicyKit.conf(5) for file format -->

Руководствуясь man (5) PolicyKit.conf, между строками

    <define_admin_auth group="wheel"/>

и

</config>

дописываем следующие строки:

	<match action="org.freedesktop.hal.storage.mount-removable">
              <return result="yes"/>
	</match>
    <match action="org.freedesktop.hal.storage.mount-fixed">
               <return result="yes"/>
	</match>

разрешающие членам группы wheel монтирование сменных и внутренних носителей, соответственно. Мы ведь не забыли ранее включить нашего главного пользователя в эту группу, не так ли?

И после реинициализации системы (например, посредством временного перехода в однопользовательский режим или полного рестарта) получаем возможность автоматического монтирования сменных устройств сразу вслед за их помещением в привод или подсоединением к USB-порту.

По собственному опыту, через HAL нормально монтируется всё, что способно монтироваться: CD- и DVD-диски, флэшки, внешние винчестеры с USB-интерфейсом, носители внутри фотокамер и они же, подключённые через кард-ридер. Единственная проблема возникла с флэшкой, переформатированной через штатную опцию Windows умолчально, то есть с файловой системой VFAT не на разделе, а непосредственно на raw-устройстве. В чём дело - пока не понял, руками эта же флэшка монтируется как устройство /dev/da0, хотя и со второго пинка.

Конечно, в отличие от современных дистрибутивов Linux, где HAL, как правило, работает "из коробки", во FreeBSD подключение этого механизма требует некоторых телодвижений. Но, как мы только что видели, совсем не сложных. А для совсем уж ленивых существует PC-BSD — там HAL задействуется по умолчанию, точно так же, как и в любом Linux'е (о чем вкратце сказано здесь).




Комментарии

Страницы комментариев: 1 :: 2 :: 3 :: 4 :: следующая

аноним, Sun Jul 19 21:40:57 2009:
В Freebsd 7.1 hal настроить не получается ни каким способом, а без автомантирования это уже не desktop-system. Кстати ручное монтирование из под обычного пользователя тоже не пашет.
Алексей Федорчук, Wed Nov 26 11:26:08 2008:
2 Voldemar
Спасибо за
> add path 'da*s*' mode 0666

Не сообразил. В отношении флэшек не менее полезно - я видел флэшки, фабрично размеченные самым причудливым образом (в том числе как 2-й logical внутри 4-го primary).
Ну и остальное всё правильно: да, ставить suid на что-либо, на что его не поставила система - занятие нездоровое. И вытаскивать неразмонтированные флэшки - тоже. Из чего я делаю озвученный выше вывод: так не поступать :)
Алексей Федорчук, Wed Nov 26 11:20:08 2008:
2 g1itch
> А разве там не надо
____
Чёрт его знает. Я обошёлся тем, что описано.
Voldemar, Wed Nov 26 08:58:01 2008:
Привет!


1)
> perm /dev/da0 0666
> perm /dev/da0s1 0666
Удобнее заменить строкой

add path 'da*s*' mode 0666

или даже

add path 'da*' mode 0666

в devfs.rules

Особенно это полезно при работе с кардридерами, которые могут видется как несколько носителей: da0, da1, da2...


2)
> Однако возможно, что после всех предпринятых шагов флэшка или компакт откажутся монтироваться от лица пользователя, выдав предупреждение, что

> Operation not permitted

У меня такая штука вылазила при попытке смонтировать с поддержкой заданной кодовой таблицы: "-Wkoi2dos -Lru_RU.KOI8-R". Причина, как я понимаю, в том, что в последних ядрах модуль iconv подгружается динамически для поддержки локализаций, а у неroot'а нет прав на загрузку модулей. Как следствие, решение типа 'mount && umount' от рута помогают (mount загружает модуль локализации, а umount его уже не выгружает), но помогает также и соответствующий конфиг ядра: например для FAT: options MSDOSFS_ICONV
или (не пробовал) соответствующая строчка в /boot/
loader.conf

Если даже не использовать локализацию, модуль поддержки соответствующей файловой системы тоже должен быть уже в памяти перед первым монтированием от нерута.

3)
> # chmod a+s /sbin/mount /sbin/umount
А это решение уже откровенно опасное: вызванная с правами root mount позволяет монтировать файловые системы с поддержкой suid, что не просто плохо, а буквально отвратительно.

4)
Завалить Free коряво выдернутой флешкой - не проблема. Завалится ли она или нет реально, зависит от многих причин, в частности, некоторые виды флешек она "любит", другие - нет, но зависит и от операции и состояния смонтированной файловой системы. Да, usb - не сильная сторона free. Так же было и с другими RW-сменными носителями: дискетами, например. Free 6.1 может завалится даже на попытку монтирования защищенной от записи флешки, если не указать mount'у -o ro.
Основная проблемма, насколько я смог понять: если файловая система теряет носитель, но имеет не сброшенные буфера записи - это, преимущественно и приводит к kernel panic где-то в районе модулей scsi-уровня. Хотя раз на раз не приходится.

Я видел не только kernel panic, но и зависания umass-драйвера, когда запись на usb просто зависает, хотя в остальном система работает нормально. При этом нельзя размонтировать устройство (umount виснет), а на консоли появляются сообщения о timeout'ах в usb.

Единственное устройство, которое у меня есть и работает ИДЕАЛЬНО с free 4.9-4.11 и 6.1 - это фотоаппарат Sony DSC-V1. Где-то я слышал, что сони и сервера свои держит под freй, может дело в этом ?
g1itch, Mon Nov 24 17:34:59 2008:
А разве там не надо

<match group="wheel">
<return result="yes"/>
</match>

для этой цели?
Алексей Федорчук, Fri Nov 21 09:36:08 2008:
2 V
Вот чего точно никто не обязан - так это отвечать на вопросы, которые их не интересуют. Вам нужен поиск текста по всей файловой системе - попробуйте, о результатах напишите.
V, Fri Nov 21 08:39:44 2008:
2 Алексей Федорчук
Если Вам что-то не нужно, это не значит, что это не нужно другим. Вот мне нужен поиск текста по всей файловой системе. Раз уж пишете статью - отвечайте - будет работать или нет???!!!
V, Fri Nov 21 08:30:16 2008:
2 Алексей Федорчук
Как насчет ответить на вопрос?
Алексей Федорчук, Fri Nov 21 05:40:46 2008:
2 V
А позвольте задать несколько нескромный вопрос: что именно такого сакрального Вы расчитываете найти конструкцией типа grep -r тра-та-та / ? Кроме, разумеется, избавления от излишков времени :)
Алексей Федорчук, Fri Nov 21 05:35:37 2008:
2 гы
> Я так мыслю - в параллельный мир ввалился.
Совершенно верно - удаляю Вас обратно в Ваш родной мир Противостояния. Звиздобольте и дальше _там_.

Страницы комментариев: 1 :: 2 :: 3 :: 4 :: следующая

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds