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

vasek
С данными VID и PID много флешек, не лучше ли использовать номер устройства, правила udev его поддерживают (6.2 Использование специальных обозначений в правилах udev)
PS.........полное отключение (почитай еще ссылки, в конце, наверное, там твой и комментарий)
UPD: Я не ищу совершенно идеальный вариант, достаточно дать понять пользователю, что сторонние флэхи работать не будут. Всё может быть, но не думаю, что пользователь каждый день будет приносить новые флэхи и пробовать, пробовать... Машина будет стоять не в общественном месте. Но спасибо, дельный совет. Думаю делать по serial, интересно насколько уникально и стабильно это значение.
По ссылке был, да, это мой комментарий:)
Всё меняется.

одно и то же правило не будет работать для dongle и обычной флэшки
Конечно не будет.
Например, в ключах Guardant, насколько я понимаю, код записан физически на кристале, и чтобы его считать, нужен особый драйвер. Поэтому такие ключи не определяются как блочные устройства, к ним нужен другой подход
Спасибо:) Сделали для меня целую работу!
:)
Вот только у меня почему-то все равно ничего не работает. Почему непонятно, всё перепроверял. Точнее, у меня наоборот, всё работает, флэшки нормально подключаются, нет никаких ограничений. Может быть всё таки дело в ФМ?
У меня так получилось так в итоге, вроде бы всё правильно сделал:
/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.YES;
       }
  });

/etc/udev/rules.d/20-usb-mount.rules

KERNEL=="sd[a-z]1", ATTRS{serial}=="1291822131250060", RUN+="/bin/bash /home/azn0000-250/.scripts/usb-mount.sh  $devnode &" MODE=="0444"
/home/azn0000-250/.scripts/usb-mount.sh

mount $1 /home/azn0000-250
Директория /home/azn0000-250 существует.
Применил правило следующей командой:

udevadm control --reload-rules
Всё меняется.

polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.udisks.filesystem-mount") &&
subject.isInGroup("users")) {
return polkit.Result.YES
Замени YES на AUTH_ADMIN, чтобы запрашивала пароль рута, или вообще NO, чтобы никто не мог смонтировать.
Правила Udev имеют приемущества над правилами polkit, так что не стесняйся )))
А если надо только смонировать флешку, можно и не писать отдельный скрипт, делать прямо в rules'e:
RUN+="mount $devnode /mount/point
Ну и для отладки неплохо смотреть в журнал udev при подключении/отключении флешки:

journalctl -f -u systemd-udevd
Самая распрастраненная ошибка - неправильная пара ключ-значения в правиле
Еще помогает применение правила в "ручном" режиме:
sudo udevadm trigger
Нашел у себя интересную штуку, но ни разу ее не пробовал, вдруг попробуешь - как Плюшкин, все собираю
Выборочно разрешить использование блочных USB-устройств при помощи специальной программы
BUS=="usb", SUBSYSTEM=="block", PROGRAM="/path/prog", RESULT!="my", OPTIONS+="ignore_device"
В том случае, если программа выводит 'my', устройство может использоваться, в противном случае устройство игнорируется.
Ошибки не исчезают с опытом - они просто умнеют
vasek
Кстати да, тоже верный способ

KERNEL=="sd[a-z]1", ATTRS{serial}!="1291822131250060", OPTIONS+="ignore_device"
52th
vasek
Кстати да, тоже верный способ

KERNEL=="sd[a-z]1", ATTRS{serial}!="1291822131250060", OPTIONS+="ignore_device"
То есть заблокировать все USB устройства, и написать это правило?
Всё меняется.
Можно делать по разному, привожу самые простые методы (ничего не нужно перенастраивать), например
- все монтируется как всегда, но на открытие нужно ввести пароль админа
- все монтируется как всегда, но правило udev делает видимым только нужное устройство (мне это нравится больше всего)
Итак, создаем файл
/etc/udev/rules.d/99-usb.rules
со следующим содержанием (номера мои)
ENV{ID_SERIAL_SHORT}!="3A46393250FF7005", ENV{UDISKS_IGNORE}="1"
Если боишься совпадений, делай по длинному номеру
ENV{ID_SERIAL}!="USB_DISKS_3A46393250FF7005-0:0", ENV{UDISKS_IGNORE}="1"
Чтобы заработало без перегрузки
$ sudo udevadm control --reload-rules
Чтобы узнать номера устройства и не утонуть в информации — вставляем устройство и даем команду
$ udevadm info --query=env --name=/dev/sd...
Проверил на 4-х флешках, все работает.
Ошибки не исчезают с опытом - они просто умнеют
У меня ничего не работает:( Ребят, какой у вас Файловый Менеджер?
Всё меняется.

У меня ничего не работает:( Ребят, какой у вас Файловый Менеджер?
Этот способ не зависит от ФМ, всё работает на уровне системных утилит. Можно вообще без DE/WM, в голой консоли )))
 
Зарегистрироваться или войдите чтобы оставить сообщение.