目标
我想安装一个 cron
用于自动备份的外部驱动器,最好使用udisksctl
。
问题
udisksctl mount -b /dev/sdXY
从命令行或 shell 脚本运行良好,但当我从 cron 运行它(使用我自己的 cron 表)时,它会失败并显示消息
Error creating textual authentication agent: Error opening current controlling terminal for the process (`/dev/tty'): No such device or address (polkit-error-quark, 0)
Error mounting /dev/sdXY: GDBus.Error:org.freedesktop.UDisks2.Error.NotAuthorizedCanObtain: Not authorized to perform operation
我尝试过的方法
在 中/usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy
,我编辑了操作,将org.freedesktop.udisks2.filesystem-mount
的默认值更改为,因此它与 的值相匹配,因此该部分现在如下所示:allow_inactive
auth_admin
yes
allow_active
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
我尝试了两种方法sudo systemctl restart polkit.service
并重新启动了机器,但仍然收到相同的消息并且无法udisksctl mount
运行cron
。
系统信息
$ uname -a
Linux <hostname> 5.15.0-97-generic #107-Ubuntu SMP Wed Feb 7 13:26:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
答案1
Ubuntu 23.10 及更高版本
创建并编辑如下.rules
文件/etc/polkit-1/rules.d/
:
sudo nano /etc/polkit-1/rules.d/10-udisks.rules
...并允许某个用户,请复制/粘贴以下内容,更改user
为您的用户名:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.udisks2.filesystem-mount" &&
subject.user == "user") {
return polkit.Result.YES;
}
});
...或者,这样允许任何用户:
polkit.addRule(function(action) {
if (action.id == "org.freedesktop.udisks2.filesystem-mount") {
return polkit.Result.YES;
}
});
Ubuntu 23.04 及更早版本
创建并编辑如下.pkla
文件/etc/polkit-1/localauthority/50-local.d/
:
sudo nano /etc/polkit-1/localauthority/50-local.d/10-udisks.pkla
...并允许某个用户,请复制/粘贴以下内容,更改user
为您的用户名:
[Allow Mounting From User Cron]
Identity=unix-user:user
Action=org.freedesktop.udisks2.filesystem-mount
ResultAny=yes
...或者,这样允许任何用户:
[Allow Mounting From User Cron]
Identity=unix-user:*
Action=org.freedesktop.udisks2.filesystem-mount
ResultAny=yes
答案2
解决方案(有安全隐患吗?)
我将allow_any
默认值从更改auth_admin
为yes
,然后是... restart polkit.service
。现在驱动器从 挂载cron
。文件中的条目...Udisks2.policy
现在如下所示:
<defaults>
<allow_any>yes</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
问:这种设置会不会有什么负面的安全隐患?