Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2023(UTC) Сообщений: 12  Откуда: Петрозаводск Сказал(а) «Спасибо»: 6 раз
|
Автор: nickm  И да, следует добавить, что простой запуск сценариев Вам может и не поможет, т.к. следует учитывать и понимать, от какого пользователя они будут выполняться.
Работали бы хотя бы сценарии... Через смотрел переменные событий, взял от туда idVendor и idProduct, ID_VENDOR_ID и ID_MODEL_ID для ENV, однако же по непонятным для меня причинам, он не отрабатывает скрипт, вообще ни в какую, права на исполнения есть.. Ладно, что ж, буду думать, спасибо за разного рода информацию в топике!
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 31.05.2016(UTC) Сообщений: 2,864
Сказал(а) «Спасибо»: 652 раз Поблагодарили: 506 раз в 477 постах
|
Автор: berdievda  Через смотрел переменные событий, взял от туда idVendor и idProduct, ID_VENDOR_ID и ID_MODEL_ID для ENV Хмм, странно, так как в Моём случае, в "Астра SE 1.7.5", не все перечисленные Вами переменные отображаются и рабочие правила для токенов "Рутокен" выглядят так: Правило на событие подключения токена: Код:SUBSYSTEM=="usb", ACTION=="add", ENV{ID_VENDOR_ID}=="0a89", RUN+="что-нибудь запускаем"
Правило на событие отключения токена: Код:SUBSYSTEM=="usb", ACTION=="remove", ENV{PRODUCT}=="a89/*", RUN+="что-нибудь запускаем"
Сами события выглядят так, например, для "Рутокен ЭЦП 3.0":
Код:UDEV [957.116945] add /devices/pci0000:00/0000:00:1a.0/usb3/3-2 (usb)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb3/3-2
SUBSYSTEM=usb
DEVNAME=/dev/bus/usb/003/002
DEVTYPE=usb_device
PRODUCT=a89/30/100
TYPE=0/0/0
BUSNUM=003
DEVNUM=002
SEQNUM=3693
USEC_INITIALIZED=957094413
ID_VENDOR=Aktiv
ID_VENDOR_ENC=Aktiv
ID_VENDOR_ID=0a89
ID_MODEL=Rutoken_ECP
ID_MODEL_ENC=Rutoken\x20ECP
ID_MODEL_ID=0030
ID_REVISION=0100
ID_SERIAL=Aktiv_Rutoken_ECP
ID_BUS=usb
ID_USB_INTERFACES=:0b0000:
ID_VENDOR_FROM_DATABASE=Aktiv
ID_MODEL_FROM_DATABASE=Rutoken ECP
DRIVER=usb
MAJOR=189
MINOR=257
Код:KERNEL[964.188682] remove /devices/pci0000:00/0000:00:1a.0/usb3/3-2 (usb)
ACTION=remove
DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb3/3-2
SUBSYSTEM=usb
DEVNAME=/dev/bus/usb/003/002
DEVTYPE=usb_device
PRODUCT=a89/30/100
TYPE=0/0/0
BUSNUM=003
DEVNUM=002
SEQNUM=3699
MAJOR=189
MINOR=257
Как видно, не все переменные присутствуют в обоих событиях, тот же " PRODUCT" имеется и в add и remove, а " ID_VENDOR_ID" только в событии add. Отредактировано пользователем 26 декабря 2023 г. 12:44:05(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил nickm за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2023(UTC) Сообщений: 12  Откуда: Петрозаводск Сказал(а) «Спасибо»: 6 раз
|
Автор: nickm  Сами события выглядят так, например, для "Рутокен ЭЦП 3.0":
Здравствуйте. Реализовал я то, что хотел. Проблема была в том, что udev запускает от рута, а сценарий от юзера, поэтому он не отрабатывал сценарий вообще. Добавил использование скрипта через su -всё заработало, но вот возникла интересная ситуация. Значит этапы, которые проводились, следующие: - Я установил рутокен в usb порт, индикаторы на токене замигали - сертификат перенесён в личное хранилище;
- Вытащил рутокен из usb - удалён сертификат из личного хранилища;
- Устанавливаю второй раз уже другой токен - не устанавливается уже.
Решил вытащить токен и подождать. В общем пришёл к выводу, что криптопро нужно 60 секунд для того, чтобы обновить сессию udev. То есть только после 60 секунд работает сценарии, которые были прописаны. Возможно ли как-нибудь уменьшить время обновления udev, чтобы можно было добавлять и удалять из хранилища сертификаты без времени ожидания? Может в скрипте дополнительно прописать что-то типо: Код:su -c "udevadm control --reload" administrator?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 31.05.2016(UTC) Сообщений: 2,864
Сказал(а) «Спасибо»: 652 раз Поблагодарили: 506 раз в 477 постах
|
Автор: berdievda  Реализовал я то, что хотел. Проблема была в том, что udev запускает от рута, а сценарий от юзера, поэтому он не отрабатывал сценарий вообще. Покажите, пжлст., итоговые правила udev; Автор: berdievda  В общем пришёл к выводу, что криптопро нужно 60 секунд для того, чтобы обновить сессию udev. Полагаю, что Вы сделали не верный вывод, т.к. никакой взаимосвязи здесь не прослеживается; Автор: berdievda  чтобы можно было добавлять и удалять из хранилища сертификаты без времени ожидания? Никакого ожидания, для установки сертификата с токена и очистки хранилища uMy не требуется.
|
 1 пользователь поблагодарил nickm за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2023(UTC) Сообщений: 12  Откуда: Петрозаводск Сказал(а) «Спасибо»: 6 раз
|
Автор: nickm  Покажите, пжлст., итоговые правила udev;
Структура файлов следующая - файлы 90-rutoken.rules и 90-rutoken-removed.rules; первый отвечает за инициализацию подключения рутокена в usb, второй за очистку личного храналища. В 90-rutoken.rules прописано: Код:SUBSYSTEM=="usb", ACTION=="add", ENV{PRODUCT}=="a89/25/100", RUN+="/usr/bin/rutoken-inserted.sh"
Скрипт rutoken-inserted.sh: Код:su -c "/home/administrator/token_insert_hook.sh" administrator
Тут указывается скрипт token_insert_hook.sh, в котором: Код:
#!/bin/sh -e
echo `date` script called >> /home/administrator/token_insert_hook.log
cd /opt/cprocsp/bin/amd64
./csptestf -absorb -certs -autoprov >> /home/administrator/token_insert_hook.log 2>&1
echo `date` script finished >> /home/administrator/token_insert_hook.log
На всякий случай скидываю файл логов токена: Код:
Ср дек 27 10:56:43 MSK 2023 script called
Match: SCARD\rutoken_lt_428b9d54\0A00\A4AA
OK.
Total: SYS: 0,040 sec USR: 0,150 sec UTC: 0,320 sec
[ErrorCode: 0x00000000]
Ср дек 27 10:56:44 MSK 2023 script finished
Ср дек 27 10:57:02 MSK 2023 script called
No containers.
Total: SYS: 0,020 sec USR: 0,080 sec UTC: 0,150 sec
[ErrorCode: 0x00000000]
Ср дек 27 10:57:02 MSK 2023 script finished
Ср дек 27 10:57:02 MSK 2023 script called
No containers.
Total: SYS: 0,010 sec USR: 0,090 sec UTC: 0,160 sec
[ErrorCode: 0x00000000]
Ср дек 27 10:57:02 MSK 2023 script finished
Примечательно, что сперва он записал токен, однако через 20 секунд уже выдал No containers.И через 60 секунд ровно он уже помещает в личное хранилище: Код:
Ср дек 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. уже записывает в хранилище. На основании этого и сделал вывод, что ему нужно 60 секунд для обновления сессии :)
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 31.05.2016(UTC) Сообщений: 2,864
Сказал(а) «Спасибо»: 652 раз Поблагодарили: 506 раз в 477 постах
|
Автор: berdievda  Проблема была в том, что udev запускает от рута, а сценарий от юзера, поэтому он не отрабатывал сценарий вообще. Во-первых: проблема была не в этом точно, а в том, что Вы не правильно составляли правила udev, когда не верно указывали переменные окружения; Автор: berdievda  В общем пришёл к выводу, что криптопро нужно 60 секунд для того, чтобы обновить сессию udev. Во-вторых: как и говорилось выше этот вывод не верный - изменил юнит на стенде с указанием Вашей команды логгирования и получил: Код:Ср дек 27 18:33:14 +05 2023 script called
Match: SCARD\rutoken_fkc_418caab1\73a48247c-af6c-415e-658c-0f9ee627f6c
Match: SCARD\rutoken_ecp_418caab1\0000\5050
Match: SCARD\rutoken_ecp_418caab1\0000\6161
OK.
Total: SYS: 0,010 sec USR: 0,170 sec UTC: 0,590 sec
[ErrorCode: 0x00000000]
Ср дек 27 18:33:14 +05 2023 script finished
Ср дек 27 18:33:19 +05 2023 script called
Match: SCARD\rutoken_fkc_418caab1\73a48247c-af6c-415e-658c-0f9ee627f6c
Match: SCARD\rutoken_ecp_418caab1\0000\5050
Match: SCARD\rutoken_ecp_418caab1\0000\6161
OK.
Total: SYS: 0,010 sec USR: 0,150 sec UTC: 0,570 sec
[ErrorCode: 0x00000000]
Ср дек 27 18:33:20 +05 2023 script finished
Ср дек 27 18:33:26 +05 2023 script called
Match: SCARD\rutoken_fkc_418caab1\73a48247c-af6c-415e-658c-0f9ee627f6c
Match: SCARD\rutoken_ecp_418caab1\0000\5050
Match: SCARD\rutoken_ecp_418caab1\0000\6161
OK.
Total: SYS: 0,000 sec USR: 0,160 sec UTC: 0,580 sec
[ErrorCode: 0x00000000]
Ср дек 27 18:33:26 +05 2023 script finished
В-третьих: для чего в команде установки сертификатов указывать параметр: Код:-autoprov Get provider type from algid and use default type name
?
|
 1 пользователь поблагодарил nickm за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2023(UTC) Сообщений: 12  Откуда: Петрозаводск Сказал(а) «Спасибо»: 6 раз
|
Автор: nickm  Во-первых: проблема была не в этом точно, а в том, что Вы не правильно составляли правила udev, когда не верно указывали переменные окружения;
Изначально, когда я составил правило udev с указанием переменных окружения, я проотлаживал применение правил при помощи Код:udevadm test --action=add /path/to/device
Показало, что отрабатывает он верно и запускает как положено скрипт, но не выполняет то, что требует по скрипту. Углубившись в udev прочитал, что сам udev запускается от рута, а сценарии, что прописаны в udev от юзера. Указав в запуске скрипта Код:su -c "название_команды" username
он начал отрабатывать скрипты, но не так, как нужно (проблему писал выше). Автор: nickm  В-третьих: для чего в команде установки сертификатов указывать параметр: Честно признаться не знал для чего нужен был этот параметр. Взял команду из астра вики, темы Работа с КриптоПРО. Попробую без него прогнать работу. Отредактировано пользователем 27 декабря 2023 г. 17:25:31(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2023(UTC) Сообщений: 12  Откуда: Петрозаводск Сказал(а) «Спасибо»: 6 раз
|
Автор: nickm  Во-вторых: как и говорилось выше этот вывод не верный - изменил юнит на стенде с указанием Вашей команды логгирования и получил: Может в этом и дело, что я делаю по средству udev -> /usr/bin/*.sh -> /home/username/*.sh, а Вы через systemd-юниты. В линукс ещё "зелёный", пока что systemd особо не трогал (хоть и были попытки по гайду из Интернета со скриптом автозагрузки). Завтра изучу литературу и попробую сделать так, как это реализовали Вы. Благодарю! Отредактировано пользователем 27 декабря 2023 г. 17:42:32(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2023(UTC) Сообщений: 12  Откуда: Петрозаводск Сказал(а) «Спасибо»: 6 раз
|
Цитата:Попробую без него прогнать работу. Результат тот же
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 31.05.2016(UTC) Сообщений: 2,864
Сказал(а) «Спасибо»: 652 раз Поблагодарили: 506 раз в 477 постах
|
Автор: berdievda  Показало, что отрабатывает он верно Автор: berdievda  файл создаёт, но не удаляет. Первая проблема была здесь и по какой причине было сказано выше: Автор: nickm  Как видно, не все переменные присутствуют в обоих событиях, тот же "PRODUCT" имеется и в add и remove, а "ID_VENDOR_ID" только в событии add.
Автор: berdievda  Углубившись в udev прочитал, что сам udev запускается от рута, а сценарии, что прописаны в udev от юзера. Всё верно, об этом и было сказано выше: Автор: nickm  И да, следует добавить, что простой запуск сценариев Вам может и не поможет, т.к. следует учитывать и понимать, от какого пользователя они будут выполняться. Автор: nickm  попробовал создать два systemd-юнита с запуском от имени единственного пользователя системы, и два правила для токена "Rutoken ECP" с запуском этих юнитов. Работает как часы: - подключил токен - сертификат установился;
- отключил токен - личное хранилище зачистилось.
Если не сможете разобраться с прямым запуском сценариев, попробуйте использовать пользовательские юниты systemd в правилах udev с параметром запуска: Код:RUN+="/bin/systemctl restart <наименование_нужного_юнита>.service"
где юниты могут быть следующие, например:
Код:[Unit]
Description=Delete certificates from uMy store and install certificates from tokens at startup.
After=multi-user.target
[Service]
Type=simple
User=administrator
Group=administrator
ExecStartPre=/opt/cprocsp/bin/amd64/certmgr -delete -store uMy -all
ExecStart=/opt/cprocsp/bin/amd64/csptestf -absorb -certs
[Install]
WantedBy=multi-user.target
Код:[Unit]
Description=Delete certificates from uMy store at startup.
After=multi-user.target
[Service]
Type=simple
User=administrator
Group=administrator
ExecStart=/opt/cprocsp/bin/amd64/certmgr -delete -store uMy -all
[Install]
WantedBy=multi-user.target
+ на будущее, Вам так же стоит озаботиться очисткой хранилища uMy и в случае перезагрузки системы, а не только при событии извлечения токена, т.к. его может и не произойти. Отредактировано пользователем 27 декабря 2023 г. 20:19:03(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил nickm за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close