今日、私はpkexec
と同様の方法でコマンドラインからSudo
を使用して、root権限でプログラムを実行できることを学びました。誰がこれを行うことができるかをpkexec
がどのように決定するのか興味があります。
pkexec(1)
のmanページには
デフォルトでは、問題のプログラムのアクション定義ファイルが存在しない限り、org.freedesktop.policykit.exec許可が必要です。
これは、policykitに不慣れな人にとっては解析するのが少し難しいです。しかし、少し推測して、/usr/share/polkit-1/actions/org.freedesktop.policykit.policy
を見てみましょう。 org.freedesktop.policykit.exec
セクションには、文字列auth_admin
があります。
polkit(8)
を参照すると、以下が表示されます。
auth_admin
管理ユーザーによる認証が必要です。
この意味で「管理ユーザー」とは正確には誰ですか?ユーザーが「管理者」であるかどうかを判断するためにどのようなテストが行われますか?構成ファイルを見つけて理解するのは次第に難しくなります。
これは設定可能です。たとえば、Ubuntu 15.04のデフォルトを知りたい。
デフォルトでは、/etc/polkit/localauthority.conf.d/
にあるこれらのファイルにより、Sudo
グループのメンバーであり、rootユーザーです。
$ tail /etc/polkit-1/localauthority.conf.d/*
==> /etc/polkit-1/localauthority.conf.d/50-localauthority.conf <==
# Configuration file for the PolicyKit Local Authority.
#
# DO NOT EDIT THIS FILE, it will be overwritten on update.
#
# See the pklocalauthority(8) man page for more information
# about configuring the Local Authority.
#
[Configuration]
AdminIdentities=unix-user:0
==> /etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf <==
[Configuration]
AdminIdentities=unix-group:Sudo;unix-group:admin
最初のファイルはUID 0(root
)へのアクセスを許可し、2番目のファイルはグループSudo
およびadmin
にアクセスを許可します。 admin
はUbuntuでは実際には使用されませんが、Sudo
は使用され、Sudo
へのアクセスを許可するために使用されるグループでもあります。