저는 Debian jessie/stable(8.4)을 사용하고 있습니다.
cron 작업 내부에서 외부 USB 드라이브를 마운트 하려고 하면 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
나는 udiskie 관리자에게 이런 질문을 했습니다.https://github.com/coldfix/udiskie/issues/102, 바라보다https://github.com/coldfix/udiskie/issues/102#issuecomment-211908721
폴킷에 권한을 추가해야 한다고 해서
/etc/polkit-1/rules.d/50-udiskie.rules
스크립트에 따라 추가했습니다.https://github.com/coldfix/udiskie/wiki/Permissions, 다음과 같습니다:
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 (e.g. 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는 Debian jessie의 PolicyKit 버전이 Javascript 구문을 인식하지 못하는데, 이로 인해 이것이 작동하지 않는 이유를 설명할 수 있다고 친절하게 알려주었습니다. 그래서 아마도 다른 구문을 가진 버전이 필요할 것입니다.
업데이트: 하단의 지침을 따르세요.https://github.com/coldfix/udiskie/wiki/Permissions/etc/polkit-1/localauthority/50-local.d/10-udiskie.pkla
("PolicyKit" 섹션) 다음 내용으로 파일을 만들었습니다.
[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
그러나 여전히 운이 없습니다. 이것은 분명히 Jessie에서 작동하는 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
. "이전" 구문에 대한 올바른 구문과 파일 이름이 무엇인지 아는 사람이 있습니까? 나는 여기서 추측하고 있습니다.
답변1
꽤 많은 고민 끝에 마침내 제안한 대로 제정신을 유지하기 위해 와일드카드를 사용하기로 결정했습니다.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
나열된 작업은 다음과 같습니다.
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
다음 사이트에도 목록이 있습니다.Udisk 폴킷 작업.
udiskie가 cron 작업에서 마운트 및 마운트 해제되도록 허용하면서 이 목록을 줄이려고 노력함으로써 즐거운 시간을 보낼 수 있습니다. 문제는 그것이 수고할 만한 가치가 있는가 하는 것입니다. 이러한 제한이 실제로 추가 보안을 제공합니까?
4) 여전히 다음과 같은 메시지가 나타납니다. 이는 분명히 경고입니다. 아무것도 작동하지 않는 것 같습니다.
Unable to init server: Could not connect: Connection refused
업데이트: 나중에Thomas G.와의 몇 가지 토론(그가 말했듯이 "이것은 잘 작동합니다. 그러나 모든 udisk 작업을 허용하는 것은 아마도 최선의 생각은 아닐 것입니다."), 나는 그것을 다음과 같이 변경했습니다.
[udisks2]
Identity=unix-user:faheem
Action=org.freedesktop.udisks2.filesystem-mount-other-seat;org.freedesktop.udisks2.filesystem-mount
ResultAny=yes
이것은 여전히 작동하는 것 같습니다.