Polkit: различия между версиями
м (→Политики polkit: fix typo) |
Нет описания правки |
||
Строка 5: | Строка 5: | ||
===Политики polkit=== | ===Политики polkit=== | ||
Все политики находятся в | Все политики находятся в {{path|/usr/share/polkit-1/actions/}} в формате ''*.policy'' Каждая политика представляет собой xml-файл, в котором описываются запросы к ''polkit''. Каждый запрос имеет три условия, прописанных в секции ''defaults'': | ||
1. Запрос от любого пользователя. Тег ''<allow_any>'' | 1. Запрос от любого пользователя. Тег ''<allow_any>'' | ||
Строка 15: | Строка 15: | ||
Внутри каждого тега прописывается возвращаемое значение. Используются следующие варианты значений: | Внутри каждого тега прописывается возвращаемое значение. Используются следующие варианты значений: | ||
* '''yes''' | * '''yes''' — предоставить разрешения; | ||
* '''no''' — заблокировать разрешения; | |||
* '''auth_self''' — пользователь должен ввести свой пароль для аутентификации; | |||
* '''auth_self_keep''' — пользователь должен ввести свой пароль для аутентификации, авторизация сохраняется на несколько минут; | |||
* '''auth_admin''' — пользователь должен ввести пароль администратора при каждом запросе; | |||
* '''auth_admin_keep''' — пользователь должен ввести пароль администратора, авторизация сохраняется на несколько минут. | |||
Администратор — в Альт определён в правиле {{path|/etc/polkit-1/rules.d/50-default.rules}}: | |||
<syntaxhighlight lang="ini"> | |||
< | |||
polkit.addAdminRule(function(action, subject) { | polkit.addAdminRule(function(action, subject) { | ||
return ["unix-group:wheel"]; | return ["unix-group:wheel"]; | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
По | По умолчанию, запрашивается пароль пользователя, находящегося в группе wheel. Для того, чтобы запрашивался пароль root, необходимо добавить правило с числом меньше 50 в начале имени с таким содержанием: | ||
< | <syntaxhighlight lang="ini"> | ||
polkit.addAdminRule(function(action, subject) { | polkit.addAdminRule(function(action, subject) { | ||
return ["unix-user:root"]; | return ["unix-user:root"]; | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
=== Правила polkit === | === Правила polkit === | ||
Менять напрямую политики нельзя, так как при обновлении системы они затрутся. Необходимо создавать собственные правила в | Менять напрямую политики нельзя, так как при обновлении системы они затрутся. Необходимо создавать собственные правила в {{path|/etc/polkit-1/rules.d/}} в формате ''*.rules''. Правила выполняются в порядке названия по алфавиту, поэтому вначале пишутся цифры, чтобы указать приоритет правила. | ||
Алгоритм создания правила (все действия выполняются от root): | Алгоритм создания правила (все действия выполняются от root): | ||
# Для начала определяем какую политику мы хотим изменить, для этого находим в | # Для начала определяем какую политику мы хотим изменить, для этого находим в {{path|/usr/share/polkit-1/actions/}} требуемую. | ||
# | # Создаём новый файл с политикой (например, {{path|/etc/polkit-1/rules.d/99-vashe_pravilo.rules}}), со следующим содержимым: | ||
#:<syntaxhighlight lang="ini"> | |||
# | |||
polkit.addRule(function(action, subject) { | polkit.addRule(function(action, subject) { | ||
if (action.id == "policy" && vashe_uslovie { | if (action.id == "policy" && vashe_uslovie { | ||
Строка 62: | Строка 51: | ||
}; | }; | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
#:где | |||
где | #:* вместо 99 подставляем нужное число (файлы с политиками просматриваются в лексикографическом порядке, 99 будет последним правилом); | ||
* вместо 99 подставляем нужное число (файлы с политиками просматриваются в лексикографическом порядке, 99 будет последним правилом) | #:* вместо ''policy'' пишем название политики, поведение которой нужно изменить; | ||
* вместо ''policy'' пишем название политики, поведение которой нужно изменить | #:* вместо ''vashe_uslovie'': если нужно изменить поведение политики для одного пользователя пишем subject.user == '%username%', если для группы, то subject.isInGroup('%groupname%'); | ||
* вместо ''vashe_uslovie'': если нужно изменить поведение политики для одного пользователя пишем subject.user == '%username%', если для группы, то subject.isInGroup('%groupname%') | #:* ''polkit.Result.YES'' означает, что политика будет при выполнении условия правила предоставлять разрешение. | ||
* ''polkit.Result.YES'' означает, что политика будет при выполнении условия правила предоставлять разрешение. | |||
===Журналирование действий polkit=== | ===Журналирование действий polkit=== | ||
Строка 74: | Строка 62: | ||
Используя правила polkit можно также делать записи в системный журнал. Метод log() записывает сообщение в системный журнал. | Используя правила polkit можно также делать записи в системный журнал. Метод log() записывает сообщение в системный журнал. | ||
Пример: | Пример: | ||
< | <syntaxhighlight lang="ini"> | ||
polkit.addRule(function(action, subject) { | polkit.addRule(function(action, subject) { | ||
if (action.id == "действие") { | if (action.id == "действие") { | ||
Строка 81: | Строка 69: | ||
} | } | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
В параметре ''action'' передается объект с информацией о совершенном процессе и связанные с этим действием параметры (например, если запрошенное действие монтирование съемного диска, то в параметре action будут переданы серийный номер диска, его id, файловая система и т.д). | В параметре ''action'' передается объект с информацией о совершенном процессе и связанные с этим действием параметры (например, если запрошенное действие монтирование съемного диска, то в параметре action будут переданы серийный номер диска, его id, файловая система и т.д). | ||
В параметре ''subject'' передается объект с информацией о пользователе, запустившем процесс. | В параметре ''subject'' передается объект с информацией о пользователе, запустившем процесс. | ||
Этот объект имеет следующие атрибуты: | Этот объект имеет следующие атрибуты: | ||
* id | * id — идентификатор процесса; | ||
* user | * user — имя пользователя; | ||
* groups | * groups — список групп, в которые входит пользователь; | ||
* seat | * seat — местонахождение субъекта (пустое значение, если местонахождение не локальное); | ||
* session | * session — сессия субъекта; | ||
* local | * local — true, только если местонахождение имеет локальный характер; | ||
* active | * active — true, только если сеанс активен. | ||
=== Примеры === | === Примеры === | ||
Пользователи часто жалуются на необходимость вводить пароль при монтировании разделов в файловом менеджере и создании нового подключения в NetworkManager, а также невозможность извлечь usb- | Пользователи часто жалуются на необходимость вводить пароль при монтировании разделов в файловом менеджере и создании нового подключения в NetworkManager, а также невозможность извлечь usb-диск или лоток оптического привода. За эти разрешения отвечают: | ||
''org.freedesktop.udisks2.filesystem-mount-system'' | ''org.freedesktop.udisks2.filesystem-mount-system'' — разрешение на монтирование файловых систем системных устройств | ||
''org.freedesktop.udisks2.filesystem-mount-other-seat'' | ''org.freedesktop.udisks2.filesystem-mount-other-seat'' — разрешение на монтирование файловых систем с устройств подключенных в другое место | ||
''org.freedesktop.udisks2.eject-media-other-seat'' | ''org.freedesktop.udisks2.eject-media-other-seat'' — разрешение на извлечение лотка оптического привода | ||
''org.freedesktop.udisks2.power-off-drive-other-seat'' | ''org.freedesktop.udisks2.power-off-drive-other-seat'' — разрешение на извлечение usb-диска | ||
''org.freedesktop.NetworkManager.settings.modify.system'' | ''org.freedesktop.NetworkManager.settings.modify.system'' — разрешение на создание и модификацию системных сетевых соединений | ||
{{note|Устройства хранения информации, делятся на системные, которые не считаются извлекаемыми, и | {{note|Устройства хранения информации, делятся на системные, которые не считаются извлекаемыми, и несистемные, к которым относятся USB подключаемые накопители, Flash медиа и оптические приводы. Для каждой из групп устройств, системных и несистемных (т.н. извлекаемых — removable), для одной операции часто нужно два polkit actions, по одному на группу устройств. | ||
Чтобы узнать является ли устройство системным, на которые распространяется действие ''org.freedesktop.udisks2.filesystem-mount-system'', выполните сначала команду, которая выведет все подключенные накопители: | Чтобы узнать является ли устройство системным, на которые распространяется действие ''org.freedesktop.udisks2.filesystem-mount-system'', выполните сначала команду, которая выведет все подключенные накопители: | ||
< | <syntaxhighlight lang="bash"> | ||
udisksctl status | $ udisksctl status | ||
</ | MODEL REVISION SERIAL DEVICE | ||
-------------------------------------------------------------------------- | |||
Micron MTFDKCD512TFK 0002V5LN 22293A5BBD07 nvme0n1 | |||
</syntaxhighlight> | |||
Затем команду с именем вашего устройства. Например ''/dev/ | Затем команду с именем вашего устройства. Например ''/dev/nvme0n1''. Статус ''true'' для ''HintSystem'', в выводе команды говорит, что это системное устройство: | ||
< | <syntaxhighlight lang="bash"> | ||
udisksctl info -b /dev/ | $ udisksctl info -b /dev/nvme0n1|grep ' Device:\|HintSystem' | ||
Device: /dev/ | Device: /dev/nvme0n1 | ||
HintSystem: true | HintSystem: true | ||
</ | </syntaxhighlight> | ||
Для несистемных устройств, на которые распространяется действие ''org.freedesktop.udisks2.filesystem-mount-other-seat'', для ''HintSystem'' статус будет ''false''}} | Для несистемных устройств, на которые распространяется действие ''org.freedesktop.udisks2.filesystem-mount-other-seat'', для ''HintSystem'' статус будет ''false''}} | ||
Строка 130: | Строка 121: | ||
Сделаем так, чтобы если пользователь находится в системной группе xgrp, то для него запросы пароля не должны будут выполняться для этих действий. Для этого (все действия выполняются от root): | Сделаем так, чтобы если пользователь находится в системной группе xgrp, то для него запросы пароля не должны будут выполняться для этих действий. Для этого (все действия выполняются от root): | ||
# Наполнить | # Наполнить {{path|/etc/polkit-1/rules.d/99-udisk2_mount.rules}} таким содержанием | ||
#:<syntaxhighlight lang="ini"> | |||
polkit.addRule(function(action, subject) { | polkit.addRule(function(action, subject) { | ||
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("xgrp")) { | if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("xgrp")) { | ||
Строка 145: | Строка 137: | ||
}; | }; | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
# Наполнить | # Наполнить {{path|/etc/polkit-1/rules.d/99-networkmanager.rules}} таким содержанием: | ||
#:<syntaxhighlight lang="ini"> | |||
polkit.addRule(function(action, subject) { | polkit.addRule(function(action, subject) { | ||
if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" && subject.isInGroup("xgrp")) { | if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" && subject.isInGroup("xgrp")) { | ||
Строка 152: | Строка 145: | ||
}; | }; | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
# Создать системную группу xgrp (если её ещё нет):< | # Создать системную группу xgrp (если её ещё нет): | ||
groupadd -r xgrp | #:<syntaxhighlight lang="bash"> | ||
</ | # groupadd -r xgrp | ||
# Добавить пользователя в группу xgrp:< | </syntaxhighlight> | ||
gpasswd -a имя_пользователя xgrp | # Добавить пользователя в группу xgrp: | ||
</ | #:<syntaxhighlight lang="bash"> | ||
# gpasswd -a имя_пользователя xgrp | |||
</syntaxhighlight> | |||
# Перелогиниться | # Перелогиниться | ||
Строка 165: | Строка 160: | ||
Пример создания правила, разрешающего пользователю выполнять монтирование и извлечение устройств — с запросом пароля (при указании polkit.Result.AUTH_SELF — будет запрошен пароль текущего пользователя, polkit.Result.AUTH_ADMIN — администратора). При подключении съемного устройства записывать в системный журнал какое устройство было подключено и каким пользователем: | Пример создания правила, разрешающего пользователю выполнять монтирование и извлечение устройств — с запросом пароля (при указании polkit.Result.AUTH_SELF — будет запрошен пароль текущего пользователя, polkit.Result.AUTH_ADMIN — администратора). При подключении съемного устройства записывать в системный журнал какое устройство было подключено и каким пользователем: | ||
#Наполнить 99-udisk2_mount.rules таким содержанием:< | #Наполнить {{path|99-udisk2_mount.rules}} таким содержанием: | ||
#:<syntaxhighlight lang="ini">polkit.addRule(function(action, subject) { | |||
polkit.log("action "+ action); | polkit.log("action "+ action); | ||
polkit.log("subject "+ subject); | polkit.log("subject "+ subject); | ||
Строка 178: | Строка 174: | ||
}; | }; | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
#Перелогиниться. | #Перелогиниться. | ||
При монтировании USB-диска в системном журнале появятся записи: | При монтировании USB-диска в системном журнале появятся записи: | ||
< | <syntaxhighlight lang="ini"> | ||
Nov 22 12:57:12 host-15 polkitd[9879]: /etc/polkit-1/rules.d/99-udisk2_mount.rules:4: action [Action id='org.freedesktop.udisks2.filesystem-mount-system' id.version='FAT32' id.usage='filesystem' drive.serial='11101094E6BA1A00A4A5200A' id.label='ALT p8 xfce/x86_64' partition.flags='0x00000000' polkit.gettext_domain='udisks2' drive='UFD 2.0 Silicon-Power4G (/dev/sdb1)' partition.number='1' id.uuid='F076-C625' drive.vendor='UFD 2.0' device='/dev/sdb1' id.type='vfat' partition.type='0x0b' polkit.message='Authentication is required to mount $(drive)' drive.revision='PMAP' drive.model='Silicon-Power4G'] | Nov 22 12:57:12 host-15 polkitd[9879]: /etc/polkit-1/rules.d/99-udisk2_mount.rules:4: action [Action id='org.freedesktop.udisks2.filesystem-mount-system' id.version='FAT32' id.usage='filesystem' drive.serial='11101094E6BA1A00A4A5200A' id.label='ALT p8 xfce/x86_64' partition.flags='0x00000000' polkit.gettext_domain='udisks2' drive='UFD 2.0 Silicon-Power4G (/dev/sdb1)' partition.number='1' id.uuid='F076-C625' drive.vendor='UFD 2.0' device='/dev/sdb1' id.type='vfat' partition.type='0x0b' polkit.message='Authentication is required to mount $(drive)' drive.revision='PMAP' drive.model='Silicon-Power4G'] | ||
Nov 22 12:57:13 host-15 polkitd[9879]: /etc/polkit-1/rules.d/99-udisk2_mount.rules:5: subject [Subject pid=4673 user='test' groups= uucp,proc,cdrom,floppy,cdwriter,audio,radio,users,scanner,xgrp, vmusers,audit_group,audit1,test, seat='seat0' session='5' local=true active=true] | Nov 22 12:57:13 host-15 polkitd[9879]: /etc/polkit-1/rules.d/99-udisk2_mount.rules:5: subject [Subject pid=4673 user='test' groups= uucp,proc,cdrom,floppy,cdwriter,audio,radio,users,scanner,xgrp, vmusers,audit_group,audit1,test, seat='seat0' session='5' local=true active=true] | ||
</ | </syntaxhighlight> | ||
Таким образом, в системном журнале зарегистрировано, что usb-диск с серийным номером ''11101094E6BA1A00A4A5200A'' был подключен пользователем test. | Таким образом, в системном журнале зарегистрировано, что usb-диск с серийным номером ''11101094E6BA1A00A4A5200A'' был подключен пользователем test. | ||
Строка 192: | Строка 188: | ||
Просмотреть факты подключения конкретного носителя, можно выполнив команду: | Просмотреть факты подключения конкретного носителя, можно выполнив команду: | ||
< | <syntaxhighlight lang="bash"> | ||
journalctl |grep "drive.serial='11101094E6BA1A00A4A5200A'" | # journalctl |grep "drive.serial='11101094E6BA1A00A4A5200A'" | ||
</ | </syntaxhighlight> | ||
=== Ссылки === | === Ссылки === |
Версия от 13:28, 9 марта 2023
Polkit
Polkit (прежнее название: PolicyKit) — библиотека для UNIX-подобных операционных систем. API библиотеки используется для предоставления непривилегированным процессам возможности выполнения действий, требующих прав администратора. Использование Polkit противопоставляется использованию таких систем, как sudo, но не наделяет процесс пользователя правами администратора, а позволяет точно контролировать, что разрешено, а что запрещено.
Политики polkit
Все политики находятся в /usr/share/polkit-1/actions/ в формате *.policy Каждая политика представляет собой xml-файл, в котором описываются запросы к polkit. Каждый запрос имеет три условия, прописанных в секции defaults:
1. Запрос от любого пользователя. Тег <allow_any>
2. Запрос от неактивного пользователя. Тег <allow_inactive>
3. Запрос от активного пользователя <allow_active>
Внутри каждого тега прописывается возвращаемое значение. Используются следующие варианты значений:
- yes — предоставить разрешения;
- no — заблокировать разрешения;
- auth_self — пользователь должен ввести свой пароль для аутентификации;
- auth_self_keep — пользователь должен ввести свой пароль для аутентификации, авторизация сохраняется на несколько минут;
- auth_admin — пользователь должен ввести пароль администратора при каждом запросе;
- auth_admin_keep — пользователь должен ввести пароль администратора, авторизация сохраняется на несколько минут.
Администратор — в Альт определён в правиле /etc/polkit-1/rules.d/50-default.rules:
polkit.addAdminRule(function(action, subject) {
return ["unix-group:wheel"];
});
По умолчанию, запрашивается пароль пользователя, находящегося в группе wheel. Для того, чтобы запрашивался пароль root, необходимо добавить правило с числом меньше 50 в начале имени с таким содержанием:
polkit.addAdminRule(function(action, subject) {
return ["unix-user:root"];
});
Правила polkit
Менять напрямую политики нельзя, так как при обновлении системы они затрутся. Необходимо создавать собственные правила в /etc/polkit-1/rules.d/ в формате *.rules. Правила выполняются в порядке названия по алфавиту, поэтому вначале пишутся цифры, чтобы указать приоритет правила. Алгоритм создания правила (все действия выполняются от root):
- Для начала определяем какую политику мы хотим изменить, для этого находим в /usr/share/polkit-1/actions/ требуемую.
- Создаём новый файл с политикой (например, /etc/polkit-1/rules.d/99-vashe_pravilo.rules), со следующим содержимым:
polkit.addRule(function(action, subject) { if (action.id == "policy" && vashe_uslovie { return polkit.Result.YES; }; });
- где
- вместо 99 подставляем нужное число (файлы с политиками просматриваются в лексикографическом порядке, 99 будет последним правилом);
- вместо policy пишем название политики, поведение которой нужно изменить;
- вместо vashe_uslovie: если нужно изменить поведение политики для одного пользователя пишем subject.user == '%username%', если для группы, то subject.isInGroup('%groupname%');
- polkit.Result.YES означает, что политика будет при выполнении условия правила предоставлять разрешение.
Журналирование действий polkit
Используя правила polkit можно также делать записи в системный журнал. Метод log() записывает сообщение в системный журнал. Пример:
polkit.addRule(function(action, subject) {
if (action.id == "действие") {
polkit.log("action=" + action);
polkit.log("subject=" + subject);
}
});
В параметре action передается объект с информацией о совершенном процессе и связанные с этим действием параметры (например, если запрошенное действие монтирование съемного диска, то в параметре action будут переданы серийный номер диска, его id, файловая система и т.д).
В параметре subject передается объект с информацией о пользователе, запустившем процесс. Этот объект имеет следующие атрибуты:
- id — идентификатор процесса;
- user — имя пользователя;
- groups — список групп, в которые входит пользователь;
- seat — местонахождение субъекта (пустое значение, если местонахождение не локальное);
- session — сессия субъекта;
- local — true, только если местонахождение имеет локальный характер;
- active — true, только если сеанс активен.
Примеры
Пользователи часто жалуются на необходимость вводить пароль при монтировании разделов в файловом менеджере и создании нового подключения в NetworkManager, а также невозможность извлечь usb-диск или лоток оптического привода. За эти разрешения отвечают:
org.freedesktop.udisks2.filesystem-mount-system — разрешение на монтирование файловых систем системных устройств
org.freedesktop.udisks2.filesystem-mount-other-seat — разрешение на монтирование файловых систем с устройств подключенных в другое место
org.freedesktop.udisks2.eject-media-other-seat — разрешение на извлечение лотка оптического привода
org.freedesktop.udisks2.power-off-drive-other-seat — разрешение на извлечение usb-диска
org.freedesktop.NetworkManager.settings.modify.system — разрешение на создание и модификацию системных сетевых соединений
Чтобы узнать является ли устройство системным, на которые распространяется действие org.freedesktop.udisks2.filesystem-mount-system, выполните сначала команду, которая выведет все подключенные накопители:
$ udisksctl status
MODEL REVISION SERIAL DEVICE
--------------------------------------------------------------------------
Micron MTFDKCD512TFK 0002V5LN 22293A5BBD07 nvme0n1
Затем команду с именем вашего устройства. Например /dev/nvme0n1. Статус true для HintSystem, в выводе команды говорит, что это системное устройство:
$ udisksctl info -b /dev/nvme0n1|grep ' Device:\|HintSystem'
Device: /dev/nvme0n1
HintSystem: true
Монтирование раздела и создание нового подключения без запроса пароля
Сделаем так, чтобы если пользователь находится в системной группе xgrp, то для него запросы пароля не должны будут выполняться для этих действий. Для этого (все действия выполняются от root):
- Наполнить /etc/polkit-1/rules.d/99-udisk2_mount.rules таким содержанием
polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("xgrp")) { return polkit.Result.YES; }; if (action.id == "org.freedesktop.udisks2.filesystem-mount-other-seat" && subject.isInGroup("xgrp")) { return polkit.Result.YES; }; if (action.id == "org.freedesktop.udisks2.eject-media-other-seat" && subject.isInGroup("xgrp")) { return polkit.Result.YES; }; if (action.id == "org.freedesktop.udisks2.power-off-drive-other-seat" && subject.isInGroup("xgrp")) { return polkit.Result.YES; }; });
- Наполнить /etc/polkit-1/rules.d/99-networkmanager.rules таким содержанием:
polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" && subject.isInGroup("xgrp")) { return polkit.Result.YES; }; });
- Создать системную группу xgrp (если её ещё нет):
# groupadd -r xgrp
- Добавить пользователя в группу xgrp:
# gpasswd -a имя_пользователя xgrp
- Перелогиниться
Монтирование раздела и создание нового подключения с запросом пароля
Пример создания правила, разрешающего пользователю выполнять монтирование и извлечение устройств — с запросом пароля (при указании polkit.Result.AUTH_SELF — будет запрошен пароль текущего пользователя, polkit.Result.AUTH_ADMIN — администратора). При подключении съемного устройства записывать в системный журнал какое устройство было подключено и каким пользователем:
- Наполнить 99-udisk2_mount.rules таким содержанием:
polkit.addRule(function(action, subject) { polkit.log("action "+ action); polkit.log("subject "+ subject); if (action.id == "org.freedesktop.udisks2.filesystem-mount-system") { return polkit.Result.AUTH_SELF; }; if (action.id == "org.freedesktop.udisks2.filesystem-mount") { return polkit.Result.AUTH_SELF; }; if (action.id == "org.freedesktop.udisks2.filesystem-mount-other-seats") { return polkit.Result.AUTH_SELF; }; });
- Перелогиниться.
При монтировании USB-диска в системном журнале появятся записи:
Nov 22 12:57:12 host-15 polkitd[9879]: /etc/polkit-1/rules.d/99-udisk2_mount.rules:4: action [Action id='org.freedesktop.udisks2.filesystem-mount-system' id.version='FAT32' id.usage='filesystem' drive.serial='11101094E6BA1A00A4A5200A' id.label='ALT p8 xfce/x86_64' partition.flags='0x00000000' polkit.gettext_domain='udisks2' drive='UFD 2.0 Silicon-Power4G (/dev/sdb1)' partition.number='1' id.uuid='F076-C625' drive.vendor='UFD 2.0' device='/dev/sdb1' id.type='vfat' partition.type='0x0b' polkit.message='Authentication is required to mount $(drive)' drive.revision='PMAP' drive.model='Silicon-Power4G']
Nov 22 12:57:13 host-15 polkitd[9879]: /etc/polkit-1/rules.d/99-udisk2_mount.rules:5: subject [Subject pid=4673 user='test' groups= uucp,proc,cdrom,floppy,cdwriter,audio,radio,users,scanner,xgrp, vmusers,audit_group,audit1,test, seat='seat0' session='5' local=true active=true]
Таким образом, в системном журнале зарегистрировано, что usb-диск с серийным номером 11101094E6BA1A00A4A5200A был подключен пользователем test.
Просмотреть факты подключения конкретного носителя, можно выполнив команду:
# journalctl |grep "drive.serial='11101094E6BA1A00A4A5200A'"