Linux授權(quán)彈窗:polkit

在開發(fā)Linux桌面軟件的時候,我們有時候需要用其他用戶的身份執(zhí)行一些操作,通常是root用戶。

  • 方法一:sudo命令
    echo "passwd" | sudo -S gedit
    sudo-S選項是從標(biāo)準(zhǔn)輸出流讀取密碼,如果使用這種方法不能調(diào)出上面的彈窗。你可以自己寫一個彈窗,如果這樣,在索要用戶權(quán)限的時候,程序就可以獲得用戶的密碼了(用戶可能會質(zhì)疑),不推薦。
  • 方法二:polkit
    如圖所示:


    深度截圖_deepin-graphics-driver-manager_20180905202415.png

    常見到吧,這個是怎么調(diào)用出來的呢?

常見的Linux發(fā)行版都有polkit模塊,deepin也開發(fā)了一套,dde-polkit-agent是遵守freedesktop規(guī)范的。
我們只要配置好規(guī)則文件然后在終端執(zhí)行:
pkexec [可執(zhí)行文件]
就可以看到這個授權(quán)窗口了

  1. 配置文件
    以deepin的/usr/share/polkit-1/actions/com.deepin.pkexec.dde-file-manager.policy文件為例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
  <vendor>Deepin</vendor>
  <vendor_url>https://www.deepin.com</vendor_url>
  <!-- 權(quán)限ID,這個必須唯一 -->
  <action id="com.deepin.pkexec.dde-file-manager">
    <!-- 圖標(biāo) 這個我不知道存在哪里,再研究研究-->
    <icon_name>folder</icon_name>
    <!-- 彈窗提示 -->
    <message>Authentication is required to run the Deepin File Manager</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
      <!-- 這個defaults節(jié)點下的所有子節(jié)點可以有這些值no,yes,auth_self,auth_admin,auth_self_keep,auth_admin_keep -->
    </defaults>
    <!-- 語言為簡體中文時的彈窗提示 -->
    <message xml:lang="zh_CN">查看文件夾需要輸入密碼</message>
    <!-- 權(quán)限提升的可執(zhí)行文件,需是二進制文件 -->
    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/dde-file-manager</annotate>
    <!-- 這行聽說是是否允許GUI,但是測試的時候好像不起作用 -->
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>
</policyconfig>

只需要根據(jù)你的需要創(chuàng)建一份這樣的文件(以policy結(jié)尾),然后保存到/usr/share/polkit-1/action這個目錄下。
可以執(zhí)行pkaction查看現(xiàn)有的policy

  1. 調(diào)出彈窗
    在終端執(zhí)行
    pkexec [二進制可執(zhí)行文件]
    當(dāng)然,根據(jù)上述配置文件,應(yīng)該是
    pkexec /usr/bin/dde-file-manager

Tips: 如果要給腳本提權(quán)怎么辦呢,我們就需要借助一個shell解釋器——它是一個二進制的可執(zhí)行文件,我們選用/bin/bash,先給bash創(chuàng)建一個policy文件[deepin不用創(chuàng)建,已經(jīng)有了],然后執(zhí)行
pkexec /bin/bash -x [腳本]
將腳本作為bash的參數(shù)【在deepin下執(zhí)行有個副作用,因為深度顯卡驅(qū)動管理器的腳本提權(quán)用到了bash,所以會顯示驅(qū)動管理器的圖標(biāo)和提示】

參考:
freedestop的polkit介紹
freedesktop的pkexec介紹
https://segmentfault.com/a/1190000008063961

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容