LINUX.ORG.RU
решено ФорумAdmin

[РЕШЕНО] Скрипт *.rules не отрабатывает ни в какую события.

 ,


0

1

Здравствуйте! Возникла такая ситуация - имеется рутокен с ЭЦП, который подключается по средству USB. Необходимо выполнить произвольный скрипт при подключении/отключении токена. Реализовал по средству скрипта 90-rutoken.rules, имеющий следующее содержание:

SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="0a89", ATTRS{idProduct}=="0025", RUN+="/usr/bin/rutoken-inserted.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{ID_VENDOR_ID}=="0a89", ENV{ID_MODEL_ID}=="0025", RUN+="/usr/bin/rutoken-removed.sh"

0a89 и 0025 взял из вывода команды lsusb

Bus 001 Device 009: ID 0a89:0025 Aktiv Rutoken lite

Однако же, при подключении/отключении токена (для понимания пусть будет usb-флеш) не отрабатывает нужное событие - запуск сценария.

Решил посмотреть, что происходит вообще, выполнив

sudo udevadm test  --action=add /devices/pci0000:00/0000:00:14.0/usb1/1-1

Получил вывод:

This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

Load module index
Network interface NamePolicy= disabled on kernel command line, ignoring.
Parsed configuration file /usr/lib/systemd/network/99-default.link
Created link configuration context.
Reading rules file: /usr/lib/udev/rules.d/50-firmware.rules
Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules
Reading rules file: /usr/lib/udev/rules.d/55-dm.rules
Reading rules file: /usr/lib/udev/rules.d/56-hpmud.rules
Reading rules file: /usr/lib/udev/rules.d/60-block.rules
Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /usr/lib/udev/rules.d/60-drm.rules
Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules
Reading rules file: /usr/lib/udev/rules.d/60-fly-brightness.rules
Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-libgphoto2-6.rules
Reading rules file: /usr/lib/udev/rules.d/60-libsane1.rules
Reading rules file: /usr/lib/udev/rules.d/60-pcmcia.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules
Reading rules file: /usr/lib/udev/rules.d/60-serial.rules
Reading rules file: /usr/lib/udev/rules.d/61-kde-bluetooth-rfkill.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules
Reading rules file: /usr/lib/udev/rules.d/64-xorg-xkb.rules
Reading rules file: /usr/lib/udev/rules.d/65-libwacom.rules
Reading rules file: /usr/lib/udev/rules.d/69-libmtp.rules
Reading rules file: /usr/lib/udev/rules.d/69-wacom.rules
Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules
Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules
Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules
Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules
Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules
Reading rules file: /usr/lib/udev/rules.d/71-ipp-usb.rules
Reading rules file: /usr/lib/udev/rules.d/71-seat.rules
Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules
Reading rules file: /usr/lib/udev/rules.d/73-special-net-names.rules
Reading rules file: /usr/lib/udev/rules.d/73-usb-net-by-mac.rules
Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules
Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules
Reading rules file: /usr/lib/udev/rules.d/80-debian-compat.rules
Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/80-ifupdown.rules
Reading rules file: /usr/lib/udev/rules.d/80-iio-sensor-proxy.rules
Reading rules file: /usr/lib/udev/rules.d/80-libinput-device-groups.rules
Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules
Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules
Reading rules file: /usr/lib/udev/rules.d/84-nm-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/85-hwclock.rules
Reading rules file: /usr/lib/udev/rules.d/85-nm-unmanaged.rules
Reading rules file: /usr/lib/udev/rules.d/90-alsa-restore.rules
Reading rules file: /usr/lib/udev/rules.d/90-console-setup.rules
Reading rules file: /usr/lib/udev/rules.d/90-libinput-fuzz-override.rules
Reading rules file: /usr/lib/udev/rules.d/90-nm-thunderbolt.rules
Reading rules file: /usr/lib/udev/rules.d/90-pulseaudio.rules
Reading rules file: /etc/udev/rules.d/90-rutoken.rules
Reading rules file: /usr/lib/udev/rules.d/91-group-floppy.rules
Reading rules file: /usr/lib/udev/rules.d/92-libccid.rules
Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-csr.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules
Reading rules file: /usr/lib/udev/rules.d/99-libsane1.rules
Reading rules file: /usr/lib/udev/rules.d/99-monitor-hotplug.rules
Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules
Rules contain 196608 bytes tokens (16384 * 12 bytes), 27864 bytes strings
19654 strings (157707 bytes), 17141 de-duplicated (132357 bytes), 2514 trie nodes used
Invalid inotify descriptor.
Starting 'mtp-probe /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1 1 9'
'mtp-probe /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1 1 9'(out) '0'
Process 'mtp-probe /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1 1 9' succeeded.
PDAC: PDPL is zero
PDAC: AUDIT is empty or invalid
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-1
DEVNAME=/dev/bus/usb/001/009
DEVTYPE=usb_device
DRIVER=usb
PRODUCT=a89/25/100
TYPE=0/0/0
BUSNUM=001
DEVNUM=009
MAJOR=189
MINOR=8
ACTION=add
SUBSYSTEM=usb
ID_VENDOR=Aktiv
ID_VENDOR_ENC=Aktiv
ID_VENDOR_ID=0a89
ID_MODEL=Rutoken_lite
ID_MODEL_ENC=Rutoken\x20lite
ID_MODEL_ID=0025
ID_REVISION=0100
ID_SERIAL=Aktiv_Rutoken_lite
ID_BUS=usb
ID_USB_INTERFACES=:0b0000:
ID_VENDOR_FROM_DATABASE=Aktiv
ID_MODEL_FROM_DATABASE=Rutoken lite
USEC_INITIALIZED=5312134048
run: '/usr/bin/rutoken-inserted.sh'
Unload module index
Unloaded link configuration context.

То есть вроде бы сценарий был запущен, но ничего не произошло. Сам скрипт rutoken-inserted.sh работает, я его вручную запускал, дал права на исполнение.

Подскажите, пожалуйста, в чём может быть проблема?



Последнее исправление: dmitriyqwe (всего исправлений: 1)

Ответ на: комментарий от anonymous

Содержание скрипта rutoken-inserted.sh:

/opt/cprocsp/bin/amd64/csptestf -absorb -certs -autoprov

Добавляет все сертификаты из переносного хранилища КриптоПРО в личное. Дело в том, что сам скрипт работает. Вывод терминала ниже:

administrator@WS2208-B18:/usr/bin$ sudo chmod +x rutoken-inserted.sh 
[sudo] пароль для administrator: 
administrator@WS2208-B18:/usr/bin$ bash rutoken-inserted.sh 
Match: SCARD\rutoken_lt_404465b1\0A00\A4A8
OK.
Total: SYS: 0,050 sec USR: 0,200 sec UTC: 0,990 sec
[ErrorCode: 0x00000000]
administrator@WS2208-B18:/usr/bin$

Как ты понимаешь, что он не выполняется?

Вывожу список ранее установленных сертификатов при помощи /opt/cprocsp/bin/amd64/certmgr -list

После выполнения команды, что прописана в скрипте - появляется ранее установленный сертификат. После инициализации токена не отрабатывает скрипт - нет информации о ранее установленном сертификате

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

Благодарю за идею. Попробовал, но, к сожалению, результат тот же:

administrator@WS2208-B18:/usr/bin$ cat rutoken-inserted.sh 
#!/bin/bash
cd /opt/cprocsp/bin/amd64 && ./csptestf -absorb -certs -autoprov

Установил рутокен. Проверяю список сертификатов:

administrator@WS2208-B18:/usr/bin$ /opt/cprocsp/bin/amd64/certmgr -list
Certmgr 1.1 (c) "КРИПТО-ПРО", 2007-2021.
Программа для работы с сертификатами, CRL и хранилищами.
=============================================================================
Список сертификатов пуст

Требуемый сертификат не существует. 

Заранее обновил правила, рестартнул udev.

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

К сожалению, и это не помогло

administrator@WS2208-B18:/etc/udev/rules.d$ cat 90-rutoken.rules
SUBSYSTEM=="usb", ACTION=="add", ENV{ID_VENDOR_ID}=="0a89", RUN+="/usr/bin/rutoken-inserted.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{PRODUCT}=="a89/25/100", RUN+="/usr/bin/rutoken-removed.sh"
administrator@WS2208-B18:/etc/udev/rules.d$ cat /usr/bin/rutoken-inserted.sh 
#!/bin/bash
sudo -u administrator /opt/cprocsp/bin/amd64/csptestf -absorb -certs -autoprov

Поменял в rutoken-inserted.shс Вашего варианта не тот, что был у меня, посколько интерпретатор ругался:

administrator@WS2208-B18:/usr/bin$ cat rutoken-inserted.sh 
#!/bin/bash
sudo -u administrator cd /opt/cprocsp/bin/amd64 && ./csptestf -absorb -certs -autoprov

administrator@WS2208-B18:/usr/bin$ ./rutoken-inserted.sh 
sudo: cd: command not found

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

Опять жертвы sudo. Один не понимает разницы между рутом и юзером, другой советует ему заведомо нерабочие команды.

Автор, sudo это плохая прога, приводящая к слабоумию её использующих, а её официальный сайт располагается в любимом домене спамеров ws, забудь про неё а лучше вообще снеси.

Для запуска команды из под заданного юзера есть стандартная unix-утилита su. Синтаксис такой:

su -c "команда" имя_юзера
firkax ★★★★★
()
Ответ на: комментарий от dmitriyqwe

Она дефективна во всех аспектах, как в самой её идеологии так и в реализации.

По нормальному, должно быть чёткое понимание: есть некий пользователь, и есть пользователь root - это системный администратор компьютера. Это разные аккаунты, с разными задачами и доступами, которые не должны перемешиваться. sudo же имитирует виндузятное «повысим права юзеру», создавая кашу в голове у этого самого юзера и в итоге скорее всего и в правах доступа к файлам.

Отдельно стоит упомянуть и файл sudoers, где права выдаются методом текстового анализа команды регулярками - совершеннейший бред и одна большая дыра, при том что sudo позиционируется как утилита для безопасности.

Да, если пользователь грамотен и захочет потратить время, то весь этот бред можно настроить так, чтобы он работал вменяемо (это если не надётся дыра в самом коде sudo, а они там иногда находятся). Но зачем возиться с этой помойкой, когда можно сделать нормально? По итогу в большинстве систем sudo настроено на выдачу первому юзеру системы доступа к логину за root-а без ограничений, что практически полностью убивает смысл разделения прав вообще.

При этом практически всё, что она может сделать нормального - уже есть в стандартной unix-утилите su, которой и надо пользоваться для этих целей.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Если я правильно понял вывод теста, то скрипт запускается. Может, проблема вовсе не в его запуске, а в том, что в момент запуска носитель ещё не инициализировался? Добавь в скрипт создание какого-нибудь файла в /tmp, например. Вставь ключ и посмотри, создался ли файл.

anonymous
()
Ответ на: комментарий от firkax

Спасибо большое за разъяснение. С Вашей помощью всё заработало, но возникла другая проблема - удаление сертификата из личного хранилища отрабатывает без проблем, а добавление сертификата из переносного носителя в личное хранилище работает 1 раз только после рестарта udev (service udev restart) и/или повторного перечисления правил (udevadm control --reload-rules).

В общей сложности имеется 2 файла правил:

  1. Правило по подключению рутокена;
  2. Правило по отключению рутокена.

И 2 сценария:

  1. Добавление всех сертификатов в личное хранилище;
  2. Удаление всех сертификатов из личного хранилища.

И получается так, что при ручном добавлении сертификата и при «вытаскивании» рутокена - он удаляет сертификаты всегда, но само добавление в личное хранилище срабатывает только один раз.

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

Думаю стоит заменить команду ещё раз на что-нить типа такого:

su -c "/home/имя_юзера/token_insert_hook.sh" имя_юзера

и создать файл /home/имя_юзера/token_insert_hook.sh, сделать его исполняемым (chmod +x) и внутрь такое содержимое:

#!/bin/sh -e

echo `date` script called >> /home/имя_юзера/token_insert_hook.log
cd /opt/cprocsp/bin/amd64
./csptestf -absorb -certs -autoprov >> /home/имя_юзера/token_insert_hook.log 2>&1
echo `date` script finished >> /home/имя_юзера/token_insert_hook.log

После этого в файл /home/имя_юзера/token_insert_hook.log будет писаться отчёт о работе этого скрипта, может что интересное найдётся.

Если аноним прав и дело действительно в том что токен не успел запуститься - придётся в скрипт в начало какое-то sleep подставить чтобы чуть подождать.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Здравствуйте! Сделал то, как Вы указали. Всё работает хорошо, только возникает интересная ситуация (возможно далее знающий человек подумает, что я пишу бред, к сожалению, пока что в конфигурировании linux я ещё «зелёный».):

  1. Я установил рутокен в usb порт, индикаторы на токене замигали - сертификат перенесён в личное хранилище;
  2. Вытащил рутокен из usb - удалён сертификат из личного хранилища;
  3. Устанавливаю второй раз уже другой токен - не устанавливается уже.

Решил вытащить токен и подождать. В общем пришёл к выводу, что нужно 60 секунд для того, чтобы обновить сессию udev. То есть только после 60 секунд работают сценарии, которые были прописаны. Возможно ли как-нибудь уменьшить время обновления udev, чтобы можно было добавлять и удалять из хранилища сертификаты без времени ожидания? Может в скрипте дополнительно прописать что-то типо:

su -c "udevadm control --reload" administrator?
dmitriyqwe
() автор топика
Последнее исправление: dmitriyqwe (всего исправлений: 1)
Ответ на: комментарий от firkax

Лог-файл:

Ср дек 27 12:07:18 MSK 2023 script called
Match: SCARD\rutoken_lt_404465b1\0A00\A4A8
OK.
Ср дек 27 12:08:19 MSK 2023 script finished
Ср дек 27 12:08:27 MSK 2023 script called
No containers.
Total: SYS: 0,020 sec USR: 0,080 sec UTC: 0,140 sec
[ErrorCode: 0x00000000]
Ср дек 27 12:08:27 MSK 2023 script finished
Ср дек 27 12:09:39 MSK 2023 script called
Match: SCARD\rutoken_lt_404465b1\0A00\A4A8
OK.
Total: SYS: 0,040 sec USR: 0,220 sec UTC: 1,220 sec
[ErrorCode: 0x00000000]

Вот тут в логах выше видно, что если через 8 секунд вставлять токен - показывает No containers., а если через 72 секунды относительно статуса No containers. - уже записывает в хранилище.

dmitriyqwe
() автор топика
Последнее исправление: dmitriyqwe (всего исправлений: 2)
Ответ на: комментарий от dmitriyqwe

А причём тут тогда udev? Наверно если правило udev убрать и вручную команду запускать с такими же интервалами времени - тоже напишет No containers. (проверь)

Единственное:

добавление сертификата из переносного носителя в личное хранилище работает 1 раз только после рестарта udev (service udev restart) и/или повторного перечисления правил (udevadm control --reload-rules).

Вот это выглядит странно, может там просто больше 1 минуты прошло пока ты команды вводил?

А ещё не может второй скрипт (на удаление) как-то по времени пересекаться и что-то портить?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от firkax

А причём тут тогда udev? Наверно если правило udev убрать и вручную комагду запускать с такими же интервалами времени - тоже напишет No containers. (проверь)

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

Вот это выглядит странно, можно там просто больше 1 минуты прошло пока ты команды вводил?

Сценарий, что я делал

  1. Установил рутокен в usb порт;
  2. Проверил с помощью команды /opt/cprocsp/bin/amd64/certmgr -list наличие сертификата - появился (изначально не было);
  3. Вытащил рутокен из usb и проверил с помощью той же команды наличие сертификата - выдало, что сертификат не существует => удалился;
  4. Устанавливаю снова с интервалом 5-7 секунд в тот же порт и проверяю - выдаёт, что сертификат не существует;
  5. Решил засечь время. Через 30 секунд устанавливаю, проверяю - нет сертификата; через 60 секунд устанавливаю проверяю - ура, появился. Провёл пару тестов системы на разных токенах (разные как по наличию сертификатов там, так и по разному типу токена) - то же поведение. Записывает в хранилище почему-то только через 60 секунд.

На основании вот такого поведения и сделал вывод, что udev’у словно нужно 60 секунд для обновления сессии или ещё чего, что я не понимаю

dmitriyqwe
() автор топика
Последнее исправление: dmitriyqwe (всего исправлений: 1)
Ответ на: комментарий от firkax

А ещё не может второй скрипт (на удаление) как-то по времени пересекаться и что-то портить?

Сперва там было прописано по той же логике, что и изначально (без Вашего варианта с записью логов в файл) - было также.

Решил удаление токена реализовать точно также, только с другой командой и записью логов в отдельный файл - тоже самое. На всякий случай скидываю содержание файлов /usr/bin/rutoken-removed.sh:

su -c "/home/administrator/token_remove_hook.sh" administrator

и сам token_remove_hook.sh:

#!/bin/sh -e

echo `date` script called >> /home/administrator/token_remove_hook.log
cd /opt/cprocsp/bin/amd64
./certmgr -delete -store uMy  -all >> /home/administrator/token_remove_hook.log 2>&1
echo `date` script finished >> /home/administrator/token_remove_hook.log

Команда удаления сертификатов взята из вики астра линукс, работа с криптопро.

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

А не может ли это быть связано с самим криптопро? Может, оно само не даёт часто обновлять сертификаты?

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

anonymous
()
Ответ на: комментарий от dmitriyqwe

А если в начало скрипта добавления дописать sleep 1 или sleep 10 ? А то с udev-ом разница что скрипт запускается мгновенно после вставки, а руками явно не мгновенно.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от dmitriyqwe

Попробуй посмотреть с помощью udevadm monitor, что происходит при подключении токена. Возможно, надо в правило добавить допусловия, если оно запускает скрипт слишком рано.

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

Вот тут я подключал/отключал токен. Информации как-то мало. Может с какими-то доп параметрами запустить монитор?

UDEV  [103395.990051] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103398.323117] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
UDEV  [103398.351720] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
UDEV  [103399.500155] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
UDEV  [103399.506333] unbind   /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
UDEV  [103400.649477] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
UDEV  [103406.293554] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
UDEV  [103406.317337] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103407.467208] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
UDEV  [103407.471947] unbind   /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103408.600752] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
KERNEL[103432.820654] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
KERNEL[103432.829780] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
KERNEL[103432.829982] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
KERNEL[103437.260568] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
KERNEL[103437.266026] unbind   /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
KERNEL[103437.266668] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103443.102321] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103453.409230] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
UDEV  [103453.416271] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103454.554012] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
UDEV  [103454.558121] unbind   /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103455.719109] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
KERNEL[103531.662474] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
KERNEL[103531.665249] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
KERNEL[103531.665396] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103543.142010] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV  [103554.154214] add      /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
UDEV  [103554.220624] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)

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

Как вариант, можно написать службу systemd, которая будет запускаться при вставке токена, куда воткнуть sleep, но, как по мне, это будет выглядеть костыльно. Хотя, там можно прописать запуск от требуемого пользователя. Но я не знаю, будет ли она останавливаться, при вытаскивании токена.

Советую в теги темы добавить udev. С текущими тегами разбирающиеся люди могут игнорировать тему. Может, даже целенаправленно.

anonymous
()
Ответ на: комментарий от firkax

Отказывается в плане не записывает вообще в личное хранилище сертификат. Добавил sleep 1 сюда:

#!/bin/sh -e
sleep 1
echo `date` script called >> /home/administrator/token_insert_hook.log
cd /opt/cprocsp/bin/amd64
./certmgr -delete -store uMy  -all >> /home/administrator/token_insert_hook.log 2>&1
echo `date` script finished >> /home/administrator/token_insert_hook.log

со sleep 10 аналогично в логах всё также: No containers.

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

Без понятия. Что поисковик выдал первым по теме, то и принёс.

Во многих местах пишут, что sleep не будет работать в скрипте, который вызывается udev-правилом. Если надо вставить слип, то делают что-то типа такого:

KERNEL=="sdc", ACTION=="add", ATTRS{product}=="Cybook", RUN+="/usr/bin/at -M -f /home/nap/Scripts/Wallabag.sh now"
anonymous
()
Ответ на: комментарий от anonymous

Про systemd думал, попробую написать конечно. Вообще необходимо в учетной записи guest развернуть это всё. Суть такая - Многопоток клиентов, каждый со своими ЭЦП. Устанавливают токен в usb -> запись в хранилище -> вход на те же гос услуги или сбербанк аст. Если костыль будет работать - почему бы не попробовать :) Главное, чтобы нужные скрипты отрабатывал

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

sleep может быть (не проверял) не работает в RUN, если указать не полный путь до бинарника, но в шелл-скрипте он работать обязан. А по твоей ссылке вообще бред, то ли «копирайтерами» сочинённый то ли чатгпт. Надо ж было посмотреть хоть её перед тем как присылать сюда.

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

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

dmitriyqwe
() автор топика
Ответ на: комментарий от dmitriyqwe
#!/bin/sh -e

echo `date` script called >> /home/имя_юзера/token_insert_hook.log
sleep 1
echo `date` sleep done >> /home/имя_юзера/token_insert_hook.log
cd /opt/cprocsp/bin/amd64
./csptestf -absorb -certs -autoprov >> /home/имя_юзера/token_insert_hook.log 2>&1
echo `date` script finished >> /home/имя_юзера/token_insert_hook.log

вот такой скрипт?

Может у csptestf есть какой-то отладочный флаг чтоб он больше логов писал?

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

Programs started by udev will block further events from that device, and any tasks spawned from a udev rule will be killed after event handling is completed. If you need to spawn a long-running process with udev, you can use at (e.g. your_command | at now, or batch), or create a systemd unit which can be triggered directly from a udev rule

https://wiki.archlinux.org/title/Udev

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

И при чём тут sleep?

Хотя с учётом того что хук на вставку токена кажется хочет работать долго - вынос его обработки куда-то наружу и правда имеет смысл. Но не из-за sleep-а.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Я не очень в английском, но мне кажется что вот эта часть говорит, что все задачи, запущенные через правило udev будут грохнуты, когда udev обработает событие: «and any tasks spawned from a udev rule will be killed after event handling is completed». И, если скрипт ждёт завершения sleep, а udev закончил обрабатывать событие, скрипту привет.

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

Обрабатывание события udev-ом как раз и заключается в запуске скриптов. То есть обработка закончится когда скрипт доделается. А убъёт он фоновые процессы, если скрипт их после себя оставит. Поэтому фоновые процессы надо запускать так, чтобы udev не смог их отследить по цепочке форков - через ipc сообщать ещё кому-то (at или systemd) чтоб их запустили как будто независимо.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)