LINUX.ORG.RU

Автоматическое монтирование флешек / приводов дисков

 


1

1

При этом хочется отключать эти флешки / диски без рута.

В Арчевики есть разные способы, наиболее интересен для меня этот:

Mount under /media; use partition label if present; support user un-mounting

/etc/udev/rules.d/11-media-by-label-with-pmount.rules

KERNEL!=«sd[a-z]*», GOTO=«media_by_label_auto_mount_end»
ACTION==«add», PROGRAM!=«/sbin/blkid %N», GOTO=«media_by_label_auto_mount_end»

# Get label
PROGRAM==«/sbin/blkid -o value -s LABEL %N», ENV{dir_name}=«%c»
# use basename to correctly handle labels such as ../mnt/foo
PROGRAM==«/usr/bin/basename '%E{dir_name}'», ENV{dir_name}=«%c»
ENV{dir_name}=="", ENV{dir_name}=«usbhd-%k»

ACTION==«add», ENV{dir_name}!="", RUN+=«/bin/su tomk -c '/usr/bin/pmount %N %E{dir_name}'»
ACTION==«remove», ENV{dir_name}!="", RUN+=«/bin/su tomk -c '/usr/bin/pumount /media/%E{dir_name}'»
LABEL=«media_by_label_auto_mount_end»



Но категорически не нравится что:

The required username (here tomk) must be hard-coded in the RUN command



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

Там ещё есть «Automounting UDisks Wrappers» — расскажите подробнее о них и какой выбрать, если это то, что мне нужно.

не хардкодить свой ник в конфиги.

Возможно, я чего-то недопонимаю, но почему бы не передавать свой ник параметром в скрипт, раз уж такая необходимость возникла?

sudo-s
()

В fstab есть замечательный параметр users, благодаря которому «хардкодить» не надо. Проблема только с ntfs - но и она решается, если пересобрать ntfs-3g для поддержки опции users.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ksevelyar

На крайняк можно узнать хозяина иксовой сессии.

Eddy_Em ☆☆☆☆☆
()

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

geekless ★★
()

Что мешает монтировать с umask=007,uid=0,gid=1999, добавив нужных пользователей в группу 1999? C не-fat, конечно, не сработает.

mydoom ★★★
()
Ответ на: комментарий от ksevelyar

Не принципиально, главное чтобы не нужен был рут, чтобы отмонтировать.

от юзера - sync, в правило udev -

SUBSYSTEM=="block", KERNEL=="sd[b-z]*", ACTION=="remove", RUN+="/bin/umount /dev/%k"
SUBSYSTEM=="block", KERNEL=="sd[b-z]*", ACTION=="remove", RUN+="/bin/rmdir /mnt/%k"

mydoom ★★★
()
Ответ на: комментарий от ksevelyar

Only the user that mounted a filesystem can unmount it again. If any user should be able to unmount, then use users instead of user in the fstab line

// А вообще, я проморгал, что у вас монтирование происходит при подключении флешки. Неправильно это.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ksevelyar

Опция users позволяет отмонтировать кому угодно. Просто монтирующим скриптом добавляй запись в fstab.

geekless ★★
()
Ответ на: комментарий от ksevelyar

В вики написано другое:
The users mount option will not allow users to unmount the filesystem.

man mount

Если не веришь, проверь. Гонит твоя вики.

geekless ★★
()
Ответ на: комментарий от ksevelyar

sync, без которого ваши данные канут в /dev/null, если вы выдернете флешку, не отмонтируя (хотя, можно ее с опцией sync монтировать - но тогда не жалуйтесь на скорость копирования)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ksevelyar

Что за sync

Нужна для того чтобы на популярной флешковой FAT32 при отключении данные записались (произошел до конца flush) нужно ждать выполнения sync, затем umount.

В винде вот таких проблем нет.

bhfq ★★★★★
()

Ох ещё и sync нужен какой-то, я совсем запутался.

Алгоритм такой?

0. При подключении флешки запускается скрипт udev.

1. Он должен при подключении флешки использовать опцию users.

2. Он должен добавить запись в fstab.

3. После того как я запишу на флешку файлы — нужно её отмонтировать. Команда umount должна предваряться командой sync, чтобы данные записались на самом деле.

Что мне читать кроме документации по udev?

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

1. Он должен при подключении флешки использовать опцию users.
2. Он должен добавить запись в fstab.

Нет. Он должен добавить запись в fstab, содержащую опцию users.

Команда umount должна предваряться командой sync

Нет. umount сам делает sync

geekless ★★
()
Ответ на: комментарий от ksevelyar

/dev/facepalm

1. Скрипт ты выполняешь от рута. От рута монтируй как хочешь: хоть вприсядку, хоть стоя на голове.
2. Главное, что когда тебе надо будет размонтировать девайс, команда mount могла увидеть в fstab флаг users для твоего девайса. Если увидит — даст размонтировать без прав рута.
3. Поэтому эту строчку придётся тебе туда добавлять.

geekless ★★
()
Ответ на: комментарий от geekless

Если не веришь, проверь. Гонит твоя вики.

Проверил:

# mount -t vfat -o gid=users /dev/sdc1 /media/usb-sdc1
$ umount /media/usb-sdc1
umount: /media/usb-sdc1 is not in the fstab (and you are not root)

Нет. Он должен добавить запись в fstab, содержащую опцию users.


1. Скрипт ты выполняешь от рута. От рута монтируй как хочешь: хоть вприсядку, хоть стоя на голове.



Чтобы пользователь мог воспользоваться флешкой — не как хочешь а с «gid=users», не?

1. # Смонтировать с флагом users. [пользователи могут читать/писать]
2. # Добавить запись из mtab в fstab. [пользователи могут отмонтировать]

3. $ Записать файлы на диск.
4. $ Размонтировать флешку.
5. # Удалить запись из fstab

Пункты 1,2,5 выполняет udev c помощью правил ACTION==«add»,ACTION==«remove»?

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

Проверил:

# mount -t vfat -o gid=users /dev/sdc1 /media/usb-sdc1
$ umount /media/usb-sdc1
umount: /media/usb-sdc1 is not in the fstab (and you are not root)

Я даже не знаю, прямо сейчас начать материться, или чуть погодить?

ОПЦИЯ gid означает «КАКАЯ ГРУППА СТАНОВИТСЯ ВЛАДЕЛЬЦЕМ КАТАЛОГА», в который смонтирован девайс. В твоём примере группа users.

ОПЦИЯ users означает «КТО УГОДНО МОЖЕТ ВЫПОЛНЯТЬ MOUNT ИЛИ UMOUNT» для данной строчки в fstab.

Какое отношение ГРУППА users имеет к ОПЦИИ users? Правильно: никакого.

geekless ★★
()
Ответ на: комментарий от ksevelyar

Чтобы пользователь мог воспользоваться флешкой — не как хочешь а с «gid=users», не?

Вопрос прав доступа к содержимому к вопросу о праве на отмонтирования никакого отношения не имеет.

Но отвечая на твой вопрос: в общем случае не. gid применима только для тех ФС, где нет собственных средств управления доступом: fat, ntfs... Для них, да. Для них там вручную должен указать uid, gid и umask/dmask/fmask.

geekless ★★
()
Ответ на: комментарий от geekless

# mount -t vfat -o users /dev/sdc1 /data/tmp

Такой синтаксис верный? Если да — он ничего не меняет:

$ umount /data/tmp
umount: /data/tmp is not in the fstab (and you are not root)

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

В fstab есть замечательный параметр users

Просто монтирующим скриптом добавляй запись в fstab.

Нет. Он должен добавить запись в fstab, содержащую опцию users.

2. Главное, что когда тебе надо будет размонтировать девайс, команда mount могла увидеть в fstab флаг users для твоего девайса. Если увидит — даст размонтировать без прав рута.

ОПЦИЯ users означает «КТО УГОДНО МОЖЕТ ВЫПОЛНЯТЬ MOUNT ИЛИ UMOUNT» для данной строчки в fstab.

umount: /data/tmp is not in the fstab

Я не знаю, как еще объяснять. Пойду я из этого треда, пока мне 5.1 не влепили...

geekless ★★
()
Ответ на: комментарий от geekless

Надо было сразу указать в этом комменте о fstab:

Автоматическое монтирование флешек / приводов дисков (комментарий)

The users mount option will not allow users to unmount the filesystem.


В вики то как раз о нём ничего не говорится. Так что она не врёт (как я и проерил выше).

Плюс не корректное «От рута монтируй как хочешь: хоть вприсядку, хоть стоя на голове.» которое ты, правда, потом поправил.

Просто нужно избегать противоречий в своих же постах — и не придётся писать кипятком.

-====================================================-

Повторю свой вопрос, который был постами выше и мог потеряться:

1. # Смонтировать с флагом users. [пользователи могут читать/писать]
2. # Добавить запись из mtab в fstab. [пользователи могут отмонтировать]

3. $ Записать файлы на диск.
4. $ Размонтировать флешку.
5. # Удалить запись из fstab



Пункты 1,2,5 выполняет udev c помощью правил ACTION==«add»,ACTION==«remove»?

Такая схема ок? Мне кажется костыльным перезаписывание fstab автоматом. Но если альтернатива только ник в скриптах (первый пост), то тогда пусть будет.

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

Вообще было бы хорошо сделать что-то такое:

%users ALL=(ALL) NOPASSWD: /usr/bin/umount /media/*

Но это, похоже, невозможно.

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

ksevelyar

Что за sync?


При sync просядет скорость i/o с носителем.
Лучше вместо sync поставить flush.

blackst0ne ★★★★★
()
Ответ на: комментарий от ksevelyar

Японский городовой!

Ну объяснили же уже все наиподробнейшим образом, куда же еще?

Между прочим, в гугле примеров правил udev для автомонтирования - вагон и маленькая тележка. И в wiki ЛОРовскую я статейку бросил (но там udev ведет себя правильно: только добавляет/удаляет нужную строку в fstab и создает/удаляет директорию в /media).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от O02eg

Там ещё есть «Automounting UDisks Wrappers» — расскажите подробнее о них и какой выбрать, если это то, что мне нужно.

Зачем такие костыли, когда есть udisks?

Вчера о них никто не сказал, поэтому стал разбираться сам.

Для udisks+devmon нужен ConsoleKit, вот сейчас читаю об этом.

ksevelyar
() автор топика
Ответ на: комментарий от Eddy_Em

1. Я не получил ответа на свой вопрос, только несколько сбивчивых, обрывочных и противоречивых комментариев. Ну и жевание соплей на тему «ну всё же объяснили».

На их основе я и предположил ту схему. Уточнять которую я буду по документации опять же.

2. Мне не нравится перезапись скриптами файла fstab, хотя это и не смертельно. Поэтому я решил посмотреть на udisks и понять принцип его работы + что ему нужно.

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

Вчера о них никто не сказал, поэтому стал разбираться сам.

Метки: udev

Правильно заданный вопрос включает половину ответа. Ты просил udev, тебе дали голый udev.

geekless ★★
()
Ответ на: комментарий от ksevelyar

1. Я не получил ответа на свой вопрос, только несколько сбивчивых, обрывочных и противоречивых комментариев. Ну и жевание соплей на тему «ну всё же объяснили».

Типичное перекладывание с больной головы на здоровую. Поставь семерочку и не парь себе мозг. Линукс не для тебя.

geekless ★★
()
Ответ на: комментарий от ksevelyar

Я не получил ответа на свой вопрос

Получил: сказали же, что к опциям монтирования нужно добавить users

Мне не нравится перезапись скриптами файла fstab

Здесь ничего плохого нет. Очень даже удобный способ. Другой способ тоже подсказали: разрешить всем (или конкретной группе пользователей) запускать беспарольный sudo на mount, umount и ntfs-3g. Как это сделать - последняя строчка ЛОРовики.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Получил: сказали же, что к опциям монтирования нужно добавить users
Пункты 1,2,5 выполняет udev c помощью правил ACTION==«add»,ACTION==«remove»?

А на вопрос топика я получил ответ давно (users+fstab). Действительно, до вчерашнего дня я не знал об опции users в fstab и путал её с gid=users.

Однако в комментариях я увидел противоречия, которые и решил выяснить. Просто потому, что я пока не очень хорошо представляю как работает система из udev+mount+fstab. И оные противоречия ставили под сомнение правильные ответы.

Ты просил udev, тебе дали голый udev.

Пожалуй. Это моя вина, нужен был заголовок «Поясните алгоритм автомонтирования udev с заданными условиями» и отдельный топик по «UDisks Wrappers».

Поставь семерочку и не парь себе мозг. Линукс не для тебя.

CRY MOAR

--------------------------------------------------------------

На данный момент я вижу три пути:

1) udev + fstab [users]
- перезаписывается fstab, при смене его формата (те же опции ntfs) может случиться что-то плохое
- при резком выключении компьютера запись в fstab может остаться

2) udev + sudoers [nopassword:mount]
- пользователи могут отмонтировать не только флешки

3) UDisks Wrappers
- требуется поставить PolicyKit

Всем спасибо за советы. Тему можно считать решённой.

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

- перезаписывается fstab, при смене его формата (те же опции ntfs) может случиться что-то плохое

Если «вдруг» сменится формат fstab, то «плохое» случится со всей системой.

- при резком выключении компьютера запись в fstab может остаться

Ничего, удалится в следующий раз при отсоединении накопителя. Да и вообще, «резкое выключение» компьютера - крайне вредная штука.

udev + sudoers [nopassword:mount] - пользователи могут отмонтировать не только флешки

Занятый ресурс не отмонтируют, да и можно явно запретить отмонтировать системные ресурсы.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Костыльно.

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

Если не понравится, или ConsoleKit потребуется для чего-то ещё — поставлю devmon.

ksevelyar
() автор топика
Ответ на: комментарий от ksevelyar

Можно, кстати, на случай аварийных ситуаций сделать так: сохранить оригинальный fstab как-нибудь вроде fstab.ori и при загрузке делать cp -f /etc/fstab.ori /etc/fstab, а также - rmdir /media/*.

Eddy_Em ☆☆☆☆☆
()

Патчить fstab именно при втыкании говнофлешки/фигни - это нее****й фейспалм. Он для этого не предназначен. Совсем. Эдди, стена ==> там.

Если уж так надо, можно например генерировать файл для sudo по udev и прописать инклуд генерируемого файла в /etc/sudoers . И да, /etc/sudoers НЕ ГЕНЕРИТЬ, только инклуд для него. Там прописать nopasswd для команды umount с нужными параметрами вроде пути по которому разрешено отмонтирование.

Затем «The required username (here tomk) must be hard-coded in the RUN command» это потому что там скрипт такой. Просто вызывай вместо того что там свои скрипты, какойнить /usr/local/sbin/my-removable-mount / /usr/local/sbin/my-removable-umount . И им передавай параметры udev.

А в этих скриптах извращайся как хочешь , можешь имя юзера залогиненого как то определять, можешь конфиг с главюзером захардколдить.

kernel ★★☆
()

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

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

Вам вашего времени не жалко?

для кого-то это способ сделать линукс лучше или просто интересно....

teod0r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.