Systemd

文件說明 - org.freedesktop.login1.policy

  • June 14, 2016

我正在使用 Ubuntu 16.04。

有一個文件/usr/share/polkit-1/actions/org.freedesktop.login1.policy似乎可以控制有關關機/掛起/休眠選項的權限。

在此文件中,相關選項採用以下格式:

<defaults>
 <allow_any>no</allow_any>
 <allow_inactive>auth_admin_keep</allow_inactive>
 <allow_active>yes</allow_active>
</defaults>

對應於每個操作(關閉、暫停等)。

是該文件的完整版本。

我想知道allow_any,allow_inactiveallow_activeoptions 的含義。

它們到底是什麼意思?

我好奇的原因是我想在沒有 root (來自 cron)的情況下以非互動方式休眠,但是我得到了授權錯誤

看來這些錯誤可以通過修改這個文件來解決。

來自polkit - 授權框架的聲明操作部分:

預設值

       This element is used to specify implicit authorizations for
       clients.

       Elements that can be used inside defaults includes:

       allow_any
           Implicit authorizations that apply to any client. Optional.

       allow_inactive
           Implicit authorizations that apply to clients in inactive
           sessions on local consoles. Optional.

       allow_active
           Implicit authorizations that apply to clients in active
           sessions on local consoles. Optional.

       Each of the allow_any, allow_inactive and allow_active elements can
       contain the following values:

       no
           Not authorized.

       yes
           Authorized.

       auth_self
           Authentication by the owner of the session that the client
           originates from is required.

       auth_admin
           Authentication by an administrative user is required.

       auth_self_keep
           Like auth_self but the authorization is kept for a brief
           period.

       auth_admin_keep
           Like auth_admin but the authorization is kept for a brief
           period.

我希望這能讓你清楚。

此連結以更好的方式 包含其他答案提供的資訊。

特別是這部分:

預設標籤是權限或缺少權限所在的位置。

它包含三個設置:allow_anyallow_inactiveallow_active

非活動會話通常是遠端會話(SSH、VNC 等),而活動會話直接登錄到 TTY 或 X 顯示器上的機器。

allow_any是包含這兩種情況的設置。

對於這些設置中的每一個,都可以使用以下選項:

no: The user is not authorized to carry out the action. There is therefore no need for authentication.
yes: The user is authorized to carry out the action without any authentication.
auth_self: Authentication is required but the user need not be an administrative user.
auth_admin: Authentication as an administrative user is require.
auth_self_keep: The same as auth_self but, like sudo, the authorization lasts a few minutes.
auth_admin_keep: The same as auth_admin but, like sudo, the authorization lasts a few minutes.

另外,這裡是 polkit 的官方手冊頁。

no通過將操作更改為標籤yes內的to和,可以從 cron 打開休眠。 allow_any``org.freedesktop.login1.hibernate``org.freedesktop.login1.hibernate-multiple-sessions

但這不是推薦的解決方案,因為它可以在以後的升級過程中被刪除。

相反,您可以創建一個包含以下內容的文件:

[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes 

com.0.enable-hibernation-from-cron.pkla在目錄中命名/etc/polkit-1/localauthority/50-local.d/以達到相同的效果。

這裡visudo給出了一個更好的解決方案。

引用自:https://unix.stackexchange.com/questions/289123