Выборочное подключение USB-флэшек

Нужно, чтобы система подключала одну единственную флешку, остальные не работали. Как реализовать?

Может быть через fstab как-нибудь можно по UUID, но тогда, если я правильно понимаю, флешку нужно втыкать до загрузки системы. А надо, чтобы автоматически было и команды никакие не нужно было вводить.

UPD: Может быть правило какое в udev вписать, вот только какое...
Всё меняется.
Автомонтирование единственной флешки можно сделать правилом удев по uuid. правда доживет оно только до форматирования / переразбиения флешки.
потом uuid скорее всего поменяется.

А вот как вы избавитесь от средств автомонтирования встроенных в DE и файловые менеджеры? (то что раньше было средствами udisks+polkit. Как оно работает сейчас я увы не в курсе, ибо из ФМ только mc)
Да пребудет с вами знание ip адреса

UPD: Может быть правило какое в udev вписать, вот только какое...
Правильно, нужно смотреть в сторону Udev, только монтировать не по UUID, а по VenorID:ProductID, эти данные можно посмотреть по lsusb (в консоле). Правила Udev, имеют преемущества перед polkit и всеми остальными.
Синтаксис правил почитайте в wiki. Общий смысл сводится к тому, что в правиле нужно указать, какое действие нужно произвести при подключении данного устройства (вплоть до запуска собственного скрипта). Например, при подключении SD-карты от фотоаппарата, она монтируется в определённый каталог, фотки синхронизируются, выводится уведомление и карта отмонируется (всё на автомате).
И да, по умолчанию, автомонтирование носителей запрещенно, а если пользователь монтирует, то только в режиме read-only. По крайней мере в Арче.
Предполагается использовать thunar, в настройках которого этим всем можно управлять. Форматироваться флэха не будет, на ней ключ к ПО, поэтому собственно и нужна флэха. Понятия не имею как писать это правило в udev, может быть подскажете ленивому нубасу..
Спасибо.
Всё меняется.

на ней ключ к ПО
USB Dongle, типа Guardant? Или на ней просто в файле лежит ключ?
52th

UPD: Может быть правило какое в udev вписать, вот только какое...
Правильно, нужно смотреть в сторону Udev, только монтировать не по UUID, а по VenorID:ProductID, эти данные можно посмотреть по lsusb (в консоле). Правила Udev, имеют преемущества перед polkit и всеми остальными.
Синтаксис правил почитайте в wiki. Общий смысл сводится к тому, что в правиле нужно указать, какое действие нужно произвести при подключении данного устройства (вплоть до запуска собственного скрипта). Например, при подключении SD-карты от фотоаппарата, она монтируется в определённый каталог, фотки синхронизируются, выводится уведомление и карта отмонируется (всё на автомате).
И да, по умолчанию, автомонтирование носителей запрещенно, а если пользователь монтирует, то только в режиме read-only. По крайней мере в Арче.
Теперь хоть ясно куда думать. На данный момент технологию нужно применить на ПК с debian, но это не играет особой роли.
Флэшка, да, USB Dongle, но на некоторых ПК нужно будет и обычные флэшки подключать (тоже по одной на ПК).
Всё меняется.
Для донглов немного другая технология. Здесь немного напиасно про это на английском, не знаю насколько это действенно. А для обычных флешек я сюда скрипты позже напишу, когда до компьютера доберусь
В я написал это:

SYBSYSTEMS=="usb", ATTRS{idVendor}=="125f", ATTRS{idProduct}=="c08a", ENV{UDISKS_IGNORE}="0"
SUBSYSTEMS=="usb", DRIVERS=="sd", ENV{UDISKS_IGNORE}="1"
И оно не работает, все флэшки нормально монтируются. Ту статью я читал, если я правильно понимаю, одно и то же правило не будет работать для dongle и обычной флэшки? Если да, то хреново:(
Всё меняется.
С данными VID и PID много флешек, не лучше ли использовать номер устройства, правила udev его поддерживают (6.2 Использование специальных обозначений в правилах udev)
PS.........полное отключение (почитай еще ссылки, в конце, наверное, там твой и комментарий)
Ошибки не исчезают с опытом - они просто умнеют
Для обычной флэшки алгоритм будет примерно таким:
  1. Запретить монтирование всех сменных носителей
  2. Разрешить только нужную нам флешку

Первая задача решается через policykit.
Создаём файл 30-mount.rules в дирректории /etc/polkit-1/rules.d

$ sudo nano /etc/polkit-1/rules.d/30-mount.rules

// Allow udisks2 to mount devices without authentication
// for users in the "storage" group.
polkit.addRule(function(action, subject) {
 if ((action.id == "org.freedesktop.udisks2.filesystem-mount-system") &&
       subject.isInGroup("users")) {
              return polkit.Result.YES;
                 }
                 });
 polkit.addRule(function(action, subject) {
  if ((action.id == "org.freedesktop.udisks.filesystem-mount") &&
    subject.isInGroup("users")) {
    return polkit.Result.AUTH_ADMIN;
       }
  });
Первое правило для монтирования файловых систем (разделы на локальном диске), второе правило для монтирования внешних накопителей. Возможные значения:
  • YES - всем
  • NO - никому
  • AUTH_ADMIN - с паролем администратора
  • AUTH_SELF - с паролем пользователя
То есть для подключения флешки нужен будет парль root.

Для второй задачи нужно мудет создать правило для udev. Для этого надо узнать атрибуты устройства.
1) Определяем нашу флешку:

$ ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 июл 22 12:59 /dev/sda
brw-rw---- 1 root disk 8,  1 июл 22 12:59 /dev/sda1
brw-rw---- 1 root disk 8,  2 июл 22 12:59 /dev/sda2
brw-rw---- 1 root disk 8,  3 июл 22 12:59 /dev/sda3
brw-rw---- 1 root disk 8, 16 июл 22 13:43/dev/sdb #нам нужно именно блок устройства, а не раздел
brw-rw---- 1 root disk 8, 17 июл 22 13:43 /dev/sdb1
2) Смотрим атрибуты:

$ udevadm  info  -a -p /sys/block/sdb
# вывод сокращён
 KERNEL=="sdb"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{ro}=="0"
    ATTR{size}=="1001472"
    ATTRS{model}=="DataTraveler 2.0"
    ...
    ATTRS{idVendor}=="0930"
   ATTRS{idProduct}=="6533"
3) Пишим правило для UDEV:

#имя пользователя - user
#директория /home/user/mnt должна существовать!
$ sudo nano /etc/udev/rules.d/20-usb-mount.rules
KERNEL=="sd[a-z]1", ATTRS{model}=="DataTraveler 2.0", RUN+="mount $devnode /home/user/mnt "
Т.е. при подключении устройства "DataTraveler 2.0", оно монтируется в /home/user/mnt $devnode - узел устройства вида /dev/sdb1, который назначается ядром в момент подключения.
По идее можно в атрибутах указывать VendorID:ProductID (для однозначного определения устройства), но у меня не сработало :(.
Так же можно запускать свой скрипт, этот вариант гораздо гибче, потому что можно не только монтировать, но и выполнять другие действия (копировать, менять владельца ит.д.). Так как udev выполняется от имени root, то и скрипт будет выполнятся от root`a. Можно также задавать тип доступа к инфе на флешке, например "только для чтения".
Окончательный вариант может быть примерно таким:

$ sudo nano /etc/udev/rules.d/20-usb-mount.rules
KERNEL=="sd[a-z]1     ATTRS{idVendor}=="0930"    ATTRS{idProduct}=="6533"  RUN+="/bin/bash /home/user/bin/usb-mount.sh  $devnode &" MODE=="0444"

$ nano /home/user/bin/usb-mount.sh
mount $1 /home/user/mnt

#в скрипт в качестве переменной передаётся devnode
# & - возвращает управление udev

После этого не забываем применить правило для udev:

$ sudo udevadm  --reload-rules
 
Зарегистрироваться или войдите чтобы оставить сообщение.