Добавление разрешений для udiskie-mount в policykit

Я использую Debian jessie / stable (8.4).

Когда я пытаюсь udiskie-mount внешний USB-накопитель, используя udiskie-mount изнутри задания cron, я получаю ошибку, как udiskie-mount ниже. Использование udiskie-mount непосредственно из командной строки отлично работает.

 + udiskie-mount -o umask=0022 /dev/disk/by-uuid/4E1AEA7B1AEA6007 --verbose DEBUG [2016-04-19 23:00:01,762] udiskie.config: Failed to read config file: [Errno 2] No such file or directory: '/home/faheem/.config/udiskie/config.yml' DEBUG [2016-04-19 23:00:01,764] udiskie.config: Failed to read config file: [Errno 2] No such file or directory: '/home/faheem/.config/udiskie/config.json' Unable to init server: Could not connect: Connection refused Unable to init server: Could not connect: Connection refused DEBUG [2016-04-19 23:00:02,020] udiskie.config: IgnoreDevice(match={'is_block': False}, value=True) created DEBUG [2016-04-19 23:00:02,021] udiskie.config: IgnoreDevice(match={'is_external': False}, value=True) created DEBUG [2016-04-19 23:00:02,021] udiskie.config: IgnoreDevice(match={'is_ignored': True}, value=True) created DEBUG [2016-04-19 23:00:02,021] udiskie.udisks2: found device owning "/dev/disk/by-uuid/4E1AEA7B1AEA6007": "/org/freedesktop/UDisks2/block_devices/sde1" DEBUG [2016-04-19 23:00:02,021] udiskie.mount: mounting /org/freedesktop/UDisks2/block_devices/sde1 with {'options': ['umask=0022'], 'fstype': 'ntfs'} ERROR [2016-04-19 23:00:02,027] udiskie.mount: failed to mount /org/freedesktop/UDisks2/block_devices/sde1: GDBus.Error:org.freedesktop.UDisks2.Error.NotAuthorizedCanObtain: Not authorized to perform operation 

Я спросил об этом удиски-сопровождающего: https://github.com/coldfix/udiskie/issues/102 , см. Https://github.com/coldfix/udiskie/issues/102#issuecom.2-211908721

Он сказал, что я должен добавить разрешения для polkit, поэтому я добавил /etc/polkit-1/rules.d/50-udiskie.rules для скрипта в https://github.com/coldfix/udiskie/wiki/Permissions , как /etc/polkit-1/rules.d/50-udiskie.rules ниже. :

 polkit.addRule(function(action, subject) { var YES = polkit.Result.YES; // NOTE: there must be a comma at the end of each line except for the last: var permission = { // // required for udisks1: // "org.freedesktop.udisks.filesystem-mount": YES, // "org.freedesktop.udisks.luks-unlock": YES, // "org.freedesktop.udisks.drive-eject": YES, // "org.freedesktop.udisks.drive-detach": YES, // // required for udisks2: // "org.freedesktop.udisks2.filesystem-mount": YES, // "org.freedesktop.udisks2.encrypted-unlock": YES, // "org.freedesktop.udisks2.eject-media": YES, // "org.freedesktop.udisks2.power-off-drive": YES, // required for udisks2 if using udiskie from another seat (eg systemd): "org.freedesktop.udisks2.filesystem-mount-other-seat": YES, "org.freedesktop.udisks2.filesystem-unmount-others": YES, "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES, "org.freedesktop.udisks2.eject-media-other-seat": YES, "org.freedesktop.udisks2.power-off-drive-other-seat": YES }; if (subject.isInGroup("backup")) { return permission[action.id]; } }); 

Я прокомментировал все, кроме части «использование udiskie с другого места», по комментариям сопровождающего.

Я перезапустил

 # systemctl restart polkitd 

Но монтаж все равно не работает.

С точки зрения большой картины я не понимаю, почему установка непосредственно из командной строки обрабатывается иначе, чем задание cron. Может кто-нибудь просветить меня?

@derobert любезно сообщил мне, что версия PolicyKit в Debian jessie не распознает синтаксис Javascript, который может объяснить, почему это не работает. По-видимому, мне нужна версия в другом синтаксисе.

UPDATE: в соответствии с инструкциями внизу https://github.com/coldfix/udiskie/wiki/Permissions (раздел «PolicyKit») я создал файл /etc/polkit-1/localauthority/50-local.d/10-udiskie.pkla с содержимым:

 [udiskie] Identity=unix-group:backup Action=org.freedesktop.udisks2.filesystem-mount-other-seat;org.freedesktop.udisks2.filesystem-unmount-others;org.freedesktop.udisks2.encrypted-unlock-other-seat;org.freedesktop.udisks2.eject-media-other-seat;org.freedesktop.udisks2.power-off-drive-other-seat ResultAny=yes 

но все равно не повезло. Это, по-видимому, старая, а не JS-версия синтаксиса, которая работает с Джесси.

Раздел Отладка проблемы: Pollkit предлагает добавить строфу

 polkit.addRule(function(action, subject) { var prefix = "org.freedesktop.udisks"; if (action.id.slice(0, prefix.length) == prefix) polkit.log(action.id); }); 

в файл /etc/polkit-1/rules.d/10-udisks.rules . Кто-нибудь знает, что будет правильным синтаксисом и именем файла для «старого» синтаксиса? Я просто буду угадывать здесь.

One Solution collect form web for “Добавление разрешений для udiskie-mount в policykit”

После достаточного количества вытягивания волос я, наконец, решил использовать подстановочные знаки в интересах сохранения моего здравомыслия, как это было предложено https://github.com/coldfix/udiskie/wiki/Ubuntu-Debian-installation-guide .

Я создал файл /etc/polkit-1/localauthority/50-local.d/10-udiskie.pkla : с содержимым:

 [udisks] Identity=unix-group:plugdev Action=org.freedesktop.udisks.* ResultAny=yes [udisks2] Identity=unix-group:plugdev Action=org.freedesktop.udisks2.* ResultAny=yes 

С помощью скрипта

 #!/bin/bash set -ex udiskie-mount -o umask=0022 /dev/disk/by-uuid/4E1AEA7B1AEA6007 --verbose udiskie-umount /dev/disk/by-uuid/4E1AEA7B1AEA6007 --verbose 

Я получаю следующий вывод:

 + udiskie-mount -o umask=0022 /dev/disk/by-uuid/4E1AEA7B1AEA6007 --verbose DEBUG [2016-04-21 15:29:01,634] udiskie.config: Failed to read config file: [Errno 2] No such file or directory: '/home/faheem/.config/udiskie/config.yml' DEBUG [2016-04-21 15:29:01,637] udiskie.config: Failed to read config file: [Errno 2] No such file or directory: '/home/faheem/.config/udiskie/config.json' Unable to init server: Could not connect: Connection refused Unable to init server: Could not connect: Connection refused DEBUG [2016-04-21 15:29:01,862] udiskie.config: IgnoreDevice(match={'is_block': False}, value=True) created DEBUG [2016-04-21 15:29:01,862] udiskie.config: IgnoreDevice(match={'is_external': False}, value=True) created DEBUG [2016-04-21 15:29:01,862] udiskie.config: IgnoreDevice(match={'is_ignored': True}, value=True) created DEBUG [2016-04-21 15:29:01,866] udiskie.udisks2: found device owning "/dev/disk/by-uuid/4E1AEA7B1AEA6007": "/org/freedesktop/UDisks2/block_devices/sde1" DEBUG [2016-04-21 15:29:01,866] udiskie.mount: mounting /org/freedesktop/UDisks2/block_devices/sde1 with {'fstype': 'ntfs', 'options': ['umask=0022']} DEBUG [2016-04-21 15:29:03,354] udiskie.udisks2: +++ device_mounted: /org/freedesktop/UDisks2/block_devices/sde1 DEBUG [2016-04-21 15:29:03,354] udiskie.udisks2: +++ device_changed: /org/freedesktop/UDisks2/block_devices/sde1 INFO [2016-04-21 15:29:03,354] udiskie.mount: mounted /org/freedesktop/UDisks2/block_devices/sde1 on /media/faheem/My Passport + udiskie-umount /dev/disk/by-uuid/4E1AEA7B1AEA6007 --verbose DEBUG [2016-04-21 15:29:03,490] udiskie.config: Failed to read config file: [Errno 2] No such file or directory: '/home/faheem/.config/udiskie/config.yml' DEBUG [2016-04-21 15:29:03,492] udiskie.config: Failed to read config file: [Errno 2] No such file or directory: '/home/faheem/.config/udiskie/config.json' DEBUG [2016-04-21 15:29:03,679] udiskie.config: IgnoreDevice(match={'is_block': False}, value=True) created DEBUG [2016-04-21 15:29:03,679] udiskie.config: IgnoreDevice(match={'is_external': False}, value=True) created DEBUG [2016-04-21 15:29:03,679] udiskie.config: IgnoreDevice(match={'is_ignored': True}, value=True) created DEBUG [2016-04-21 15:29:03,681] udiskie.udisks2: found device owning "/dev/disk/by-uuid/4E1AEA7B1AEA6007": "/org/freedesktop/UDisks2/block_devices/sde1" DEBUG [2016-04-21 15:29:03,681] udiskie.mount: unmounting /org/freedesktop/UDisks2/block_devices/sde1 DEBUG [2016-04-21 15:29:03,691] udiskie.udisks2: +++ device_changed: /org/freedesktop/UDisks2/block_devices/sde1 DEBUG [2016-04-21 15:29:03,712] udiskie.udisks2: +++ device_unmounted: /org/freedesktop/UDisks2/block_devices/sde1 INFO [2016-04-21 15:29:03,712] udiskie.mount: unmounted /org/freedesktop/UDisks2/block_devices/sde1 

ПРИМЕЧАНИЯ И КОММЕНТАРИИ:

1) Policykit или Polkit, что бы это ни было, это гигантская боль.

2) Синтаксис, используемый после версии 105, – это Javascript – никто не знает, почему. Синтаксис, используемый для версии 105 или более ранней версии, приведен выше. Версия в Jessie – 105. См. Например https://lists.debian.org/debian-user/2016/01/msg00209.html и http://blog.gmane.org/gmane.comp.freedesktop.policykit/month = 20150901

3) pkaction дает список всех зарегистрированных действий. С приведенным выше udisks2 перечисленные действия udisks2 :

 org.freedesktop.udisks2.ata-check-power org.freedesktop.udisks2.ata-secure-erase org.freedesktop.udisks2.ata-smart-enable-disable org.freedesktop.udisks2.ata-smart-selftest org.freedesktop.udisks2.ata-smart-simulate org.freedesktop.udisks2.ata-smart-update org.freedesktop.udisks2.ata-standby org.freedesktop.udisks2.ata-standby-other-seat org.freedesktop.udisks2.ata-standby-system org.freedesktop.udisks2.cancel-job org.freedesktop.udisks2.cancel-job-other-user org.freedesktop.udisks2.eject-media org.freedesktop.udisks2.eject-media-other-seat org.freedesktop.udisks2.eject-media-system org.freedesktop.udisks2.encrypted-change-passphrase org.freedesktop.udisks2.encrypted-change-passphrase-system org.freedesktop.udisks2.encrypted-lock-others org.freedesktop.udisks2.encrypted-unlock org.freedesktop.udisks2.encrypted-unlock-crypttab org.freedesktop.udisks2.encrypted-unlock-other-seat org.freedesktop.udisks2.encrypted-unlock-system org.freedesktop.udisks2.filesystem-fstab org.freedesktop.udisks2.filesystem-mount org.freedesktop.udisks2.filesystem-mount-other-seat org.freedesktop.udisks2.filesystem-mount-system org.freedesktop.udisks2.filesystem-unmount-others org.freedesktop.udisks2.loop-delete-others org.freedesktop.udisks2.loop-modify-others org.freedesktop.udisks2.loop-setup org.freedesktop.udisks2.manage-md-raid org.freedesktop.udisks2.manage-swapspace org.freedesktop.udisks2.modify-device org.freedesktop.udisks2.modify-device-other-seat org.freedesktop.udisks2.modify-device-system org.freedesktop.udisks2.modify-drive-settings org.freedesktop.udisks2.modify-system-configuration org.freedesktop.udisks2.open-device org.freedesktop.udisks2.open-device-system org.freedesktop.udisks2.power-off-drive org.freedesktop.udisks2.power-off-drive-other-seat org.freedesktop.udisks2.power-off-drive-system org.freedesktop.udisks2.read-system-configuration-secrets org.freedesktop.udisks2.rescan для org.freedesktop.udisks2.ata-check-power org.freedesktop.udisks2.ata-secure-erase org.freedesktop.udisks2.ata-smart-enable-disable org.freedesktop.udisks2.ata-smart-selftest org.freedesktop.udisks2.ata-smart-simulate org.freedesktop.udisks2.ata-smart-update org.freedesktop.udisks2.ata-standby org.freedesktop.udisks2.ata-standby-other-seat org.freedesktop.udisks2.ata-standby-system org.freedesktop.udisks2.cancel-job org.freedesktop.udisks2.cancel-job-other-user org.freedesktop.udisks2.eject-media org.freedesktop.udisks2.eject-media-other-seat org.freedesktop.udisks2.eject-media-system org.freedesktop.udisks2.encrypted-change-passphrase org.freedesktop.udisks2.encrypted-change-passphrase-system org.freedesktop.udisks2.encrypted-lock-others org.freedesktop.udisks2.encrypted-unlock org.freedesktop.udisks2.encrypted-unlock-crypttab org.freedesktop.udisks2.encrypted-unlock-other-seat org.freedesktop.udisks2.encrypted-unlock-system org.freedesktop.udisks2.filesystem-fstab org.freedesktop.udisks2.filesystem-mount org.freedesktop.udisks2.filesystem-mount-other-seat org.freedesktop.udisks2.filesystem-mount-system org.freedesktop.udisks2.filesystem-unmount-others org.freedesktop.udisks2.loop-delete-others org.freedesktop.udisks2.loop-modify-others org.freedesktop.udisks2.loop-setup org.freedesktop.udisks2.manage-md-raid org.freedesktop.udisks2.manage-swapspace org.freedesktop.udisks2.modify-device org.freedesktop.udisks2.modify-device-other-seat org.freedesktop.udisks2.modify-device-system org.freedesktop.udisks2.modify-drive-settings org.freedesktop.udisks2.modify-system-configuration org.freedesktop.udisks2.open-device org.freedesktop.udisks2.open-device-system org.freedesktop.udisks2.power-off-drive org.freedesktop.udisks2.power-off-drive-other-seat org.freedesktop.udisks2.power-off-drive-system org.freedesktop.udisks2.read-system-configuration-secrets org.freedesktop.udisks2.rescan 

Существует также список действий Ukisks polkit .

Я мог бы развлечь себя, пытаясь уменьшить этот список, все еще позволяя udiskie монтировать и отключать работу cron. Вопрос в том, стоит ли это беспокоиться? И действительно ли эти ограничения обеспечивают дополнительную безопасность?

4) Я все еще получаю следующее. Это, по-видимому, предупреждение – похоже, что он ничего не тормозит от работы.

 Unable to init server: Could not connect: Connection refused 

ОБНОВЛЕНИЕ: после некоторого обсуждения с Томасом Г. (как он выразился, «отлично, что он сработал. Однако не может быть лучшей идеей разрешить все действия udisks»), я изменил это на

 [udisks2] Identity=unix-user:faheem Action=org.freedesktop.udisks2.filesystem-mount-other-seat;org.freedesktop.udisks2.filesystem-mount ResultAny=yes 

которая все еще работает.

Последующие действия: обсуждение возможного патча на пакет Debian udiskie .

Interesting Posts

TouchPad не работает на Chromebook

Уведомлять пользователя о блокировке учетной записи при входе в систему (Solaris)

Как искать файлы из графического интерфейса gnome в debian?

Отображение писем с mutt

Использование памяти остается высоким после компиляции

отключить ключ вставки для всех, кроме одного приложения

Fedora 20 kde меняет раскладку клавиатуры в Латинскую Америку?

Является ли NFS очень безопасным? Защищенные альтернативы

Добавлен файл anaconda2 lib в LD_LIBRARY_PATH, в результате появляется предупреждение «без информации о версии»

Проблемы с браузером с помощью VPN

Как удалить файлы и папки под определенной папкой

Pernicious 1962 Ошибка установки Fedora Server 24: операционной системы не найдено

Как извлечь неизвестные аргументы в сценарии оболочки?

Закладка Shell, открытая через скрипт, зависает после того, как Ctrl + C запускает процесс

как читать переменные в bash и передавать эти переменные в программу c ++ в качестве аргументов

Linux и Unix - лучшая ОС в мире.