无法从 cron 挂载外部驱动器(使用 udisksctl)

无法从 cron 挂载外部驱动器(使用 udisksctl)

目标

我想安装一个 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_inactiveauth_adminyesallow_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_adminyes,然后是... restart polkit.service。现在驱动器从 挂载cron。文件中的条目...Udisks2.policy现在如下所示:

    <defaults>
      <allow_any>yes</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>

问:这种设置会不会有什么负面的安全隐患?

相关内容