「Root で X アプリケーションを起動」の版間の差分
ページの作成:「{{lowercase title}} Category:X サーバー en:Running X apps as root ko:Running X apps as root セキュリティ上の理由で、デフォルトでは ro...」 |
Kusanaginoturugi (トーク | 投稿記録) fix en page link. |
||
| (2人の利用者による、間の7版が非表示) | |||
| 1行目: | 1行目: | ||
[[Category:グラフィカルユーザーインターフェイス]] |
|||
{{lowercase title}} |
|||
[[Category: |
[[Category:セキュリティ]] |
||
[[en:Running |
[[en:Running GUI applications as root]] |
||
[[ko:Running X apps as root]] |
[[ko:Running X apps as root]] |
||
{{Warning|1=以下のすべての方法には、ユーザーが注意すべきセキュリティ上の影響があります。GNOME 開発者の Emmanuele Bassi によって [https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5 説明] された通りです。 |
|||
セキュリティ上の理由で、デフォルトでは root は root 以外のユーザーが起動した X サーバーに接続することができません。必要な場合 root から接続できるようにする方法がいくつか存在します。 |
|||
:[...] 誰もが root 権限で GUI アプリケーションを実行すべき理由は、*実際には* 技術的に根拠のあるものではありません。管理者権限で GUI アプリケーションを実行することで、監査されていない膨大な量のコードを特権的な権限のもとで実行することになります。また、$HOME 内のファイルにアクセスし、その所有権を変更する可能性があるコードも実行されます。さらに、IPC を介して他のコードとも接続される可能性があります。 |
|||
==安全な方法== |
|||
:これにより、大規模で重大なセキュリティホールが開くことになります [...]。 |
|||
}} |
|||
== root 実行の回避 == |
|||
安全な方法は単純な方法です。以下のような方法があります: |
|||
=== sudoedit === |
|||
* kdesu ([[KDE]] に含まれています): |
|||
$ kdesu ''name-of-app'' |
|||
* gksu ([[GNOME]] に含まれています): |
|||
$ gksu ''name-of-app'' |
|||
* {{Pkg|bashrun}} (公式リポジトリに存在します): |
|||
$ bashrun --su ''name-of-app'' |
|||
* [[sudo]] (インストールして {{ic|visudo}} で設定が必要です): |
|||
$ sudo ''name-of-app'' |
|||
* {{AUR|sux}} (X のログイン情報を転送する su のラッパー) |
|||
$ sux root ''name-of-app'' |
|||
root でファイルを編集するときは [[sudoedit]] を使ってください。 |
|||
上記の方法はアプリケーションが終了したときに自動的に権限も消えるのでセキュリティのリスクを回避できます。 |
|||
== |
=== GVFS === |
||
{{ic|admin}} [https://wiki.gnome.org/Projects/gvfs/backends バックエンド] の URI を指定することで [[GVFS]] 経由で特権が必要なファイルやディレクトリにアクセスできます [https://bugzilla.redhat.com/show_bug.cgi?id=1274451#c27][https://bugzilla.gnome.org//show_bug.cgi?id=772875#c2]: |
|||
以下の方法でも root からユーザーの X サーバーに接続することができますが、セキュリティ上の危険性が存在し、特に SSH を動作させている場合は危険です。 |
|||
$ nautilus admin:///root/ |
|||
=== 一時的に root のアクセスを許可 === |
|||
または: |
|||
以下のコマンドは一時的に root など他のユーザーが X サーバーに接続することを許可します: |
|||
$ xhost + |
|||
また、以下のコマンドは接続を拒否します: |
|||
$ xhost - |
|||
$ gedit admin:///etc/fstab |
|||
もしくは以下のコマンドを使う方法もあります (X サーバーが TCP 接続を使用するように設定する必要があります): |
|||
$ xhost + localhost |
|||
{{Tip|1=上記の URI はアプリケーションのロケーションバーやファイル選択でも使うことができます。例えば {{Pkg|nautilus}} や {{pkg|gedit}} なら、{{ic|Ctrl+l}} を押してからパスの前に {{ic|admin://}} を付けてください。[https://wiki.gnome.org/Apps/Files?action=AttachFile&do=get&target=network.png Other locations] サーバーアドレスバーでも同じことが可能です。}} |
|||
=== 永続的に root のアクセスを許可 === |
|||
== Xorg == |
|||
セキュリティ上の理由で、デフォルトでは root は root 以外のユーザーが起動した [[Xorg|X サーバー]]に接続することができません。必要な場合 root から接続できるようにする方法がいくつか存在します。 |
|||
以下の行を {{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} に追加してください: |
|||
[https://bbs.archlinux.org/viewtopic.php?pid=999328#p999328 こちらのフォーラムの投稿] にあるように、特権で X の GUI アプリを実行するときの適切かつ推奨される方法は [[Polkit]] ポリシーを作成することです。ただし、この方法は {{man|1|pkexec}} に書かれているように古いプログラムでのみ使用するべきです。アプリケーションは特権操作を最小限のコードに委任して、権限が必要なくなったら自動的に権限を消す必要があります [https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5]。 |
|||
=== 安全な方法 === |
|||
以下の方法ではアプリケーションは昇格フレームワークにラッピングされ、アプリケーションの終了時に権限も落とされます: |
|||
* {{Pkg|kdesu}} (詳しくは {{man|1|kdesu}} を参照): |
|||
$ kdesu ''application'' |
|||
* [[sudo]] ([[Sudo#設定|正しく設定]]する必要があります) |
|||
$ sudo ''application'' |
|||
* {{AUR|sux}} (X のログイン情報を転送する [[su]] のラッパー) |
|||
$ sux root ''application'' |
|||
=== 他の方法 === |
|||
以下の方法でも root からユーザーの X サーバーに接続することができますが、セキュリティ上の危険性が存在し、特に SSH を動作させている場合は危険です。 |
|||
==== Xhost ==== |
|||
[[Xhost]] を使うことで一時的に root のアクセスを許可できます。 |
|||
==== 永続的に root のアクセスを許可 ==== |
|||
:'''方法 1''': 以下の行を追加します |
|||
session optional pam_xauth.so |
session optional pam_xauth.so |
||
その後 |
{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方に追加してください。その後、{{ic|su}} または {{ic|su -}} を使用して root ユーザーに切り替えます。 |
||
:'''方法 2''': グローバルに {{ic|/etc/profile}} で設定 |
|||
以下の行を {{ic|/etc/profile}} に追加します: |
|||
{{hc|/etc/profile|2= |
|||
export XAUTHORITY=/home/''username''/.Xauthority |
|||
}} |
|||
これにより、root が非 root ユーザーの X サーバーに永続的に接続できるようになります。 |
|||
または、特定のアプリだけを指定することもできます: |
|||
# XAUTHORITY=/home/''username''/.Xauthority ''appname'' |
|||
ここで、{{ic|''appname''}} は特定のアプリ名を指します(例: ''kwrite'')。 |
|||
== Wayland == |
|||
[[Wayland]] セッションで [[su]], [[sudo]], [[polkit|pkexec]] を使って root でグラフィカルアプリケーション (例: [[GParted]] や [[Gedit]] など) を実行しようとした場合、以下のようなエラーが表示されます: |
|||
{{bc|$ sudo gedit |
|||
No protocol specified |
|||
Unable to init server: Could not connect: Connection refused |
|||
(gedit:2349): Gtk-WARNING **: cannot open display: :0 |
|||
}} |
|||
Wayland 以前では、特権による GUI アプリケーションの実行は [[Polkit]] ポリシーを作成して正しく実装するか、あるいはターミナルでコマンドの前に {{ic|sudo}} を付けて危なっかしく実行するようになっていましたが、(X)Wayland ではデフォルトでこのようなことはできなくなっています。クライアントの接続を許可されるのは X サーバーを起動したユーザーだけです ([https://bugzilla.redhat.com/show_bug.cgi?id=1266771 バグレポート] や [https://cgit.freedesktop.org/xorg/xserver/commit/?id=c4534a3] [https://cgit.freedesktop.org/xorg/xserver/commit/?id=4b4b908], [https://cgit.freedesktop.org/xorg/xserver/commit/?id=76636ac] を参照)。 |
|||
[[#root 実行の回避]]を見て、できる限りグラフィカルアプリケーションは root で実行しないようにしてください。 |
|||
また、[[#xhost を使う]]ことで、あらゆるグラフィカルアプリケーションを root で実行することができます。 |
|||
=== xhost を使う === |
|||
回避策としては [[xhost]] を使うことで root ユーザーに対して一時的にローカルユーザーの X セッションへのアクセスを許可できます。非特権ユーザーで以下のコマンドを実行してください [https://bugzilla.redhat.com/show_bug.cgi?id=1274451#c64]: |
|||
$ xhost si:localuser:root |
|||
アプリケーションを閉じた後に許可を取り消すには: |
|||
$ xhost -si:localuser:root |
|||
=== sudo -E を使用する === |
|||
次のコマンドでアプリケーションを起動できます: |
|||
$ sudo -E ''program'' |
|||
これにより、WAYLAND_DISPLAY のような環境変数が保持されます。 |
|||
HOME 環境変数をターゲットユーザーに設定したい場合は、次のコマンドを使用します: |
|||
==== 方法 2 ==== |
|||
$ sudo -EH ''program'' |
|||
{{ic|/etc/profile}} に以下の行を追加してください: |
|||
export XAUTHORITY=/home/non-root-usersname/.Xauthority |
|||
詳細は {{man|8|sudo}} を参照してください。 |
|||
上記の設定で root が root 以外のユーザーの X サーバーに永続的に接続できるようになります。 |
|||
{{TranslationStatus|Running GUI applications as root|2024-09-05|812753}} |
|||
あるいは、接続するアプリを指定する場合 (例: kwrite): |
|||
export XAUTHORITY=/home/usersname/.Xauthority kwrite |
|||
2024年9月7日 (土) 18:29時点における最新版
- [...] 誰もが root 権限で GUI アプリケーションを実行すべき理由は、*実際には* 技術的に根拠のあるものではありません。管理者権限で GUI アプリケーションを実行することで、監査されていない膨大な量のコードを特権的な権限のもとで実行することになります。また、$HOME 内のファイルにアクセスし、その所有権を変更する可能性があるコードも実行されます。さらに、IPC を介して他のコードとも接続される可能性があります。
- これにより、大規模で重大なセキュリティホールが開くことになります [...]。
root 実行の回避
sudoedit
root でファイルを編集するときは sudoedit を使ってください。
GVFS
admin バックエンド の URI を指定することで GVFS 経由で特権が必要なファイルやディレクトリにアクセスできます [1][2]:
$ nautilus admin:///root/
または:
$ gedit admin:///etc/fstab
Ctrl+l を押してからパスの前に admin:// を付けてください。Other locations サーバーアドレスバーでも同じことが可能です。Xorg
セキュリティ上の理由で、デフォルトでは root は root 以外のユーザーが起動した X サーバーに接続することができません。必要な場合 root から接続できるようにする方法がいくつか存在します。
こちらのフォーラムの投稿 にあるように、特権で X の GUI アプリを実行するときの適切かつ推奨される方法は Polkit ポリシーを作成することです。ただし、この方法は pkexec(1) に書かれているように古いプログラムでのみ使用するべきです。アプリケーションは特権操作を最小限のコードに委任して、権限が必要なくなったら自動的に権限を消す必要があります [3]。
安全な方法
以下の方法ではアプリケーションは昇格フレームワークにラッピングされ、アプリケーションの終了時に権限も落とされます:
$ kdesu application
$ sudo application
$ sux root application
他の方法
以下の方法でも root からユーザーの X サーバーに接続することができますが、セキュリティ上の危険性が存在し、特に SSH を動作させている場合は危険です。
Xhost
Xhost を使うことで一時的に root のアクセスを許可できます。
永続的に root のアクセスを許可
- 方法 1: 以下の行を追加します
session optional pam_xauth.so
/etc/pam.d/su と /etc/pam.d/su-l の両方に追加してください。その後、su または su - を使用して root ユーザーに切り替えます。
- 方法 2: グローバルに
/etc/profileで設定
以下の行を /etc/profile に追加します:
/etc/profile
export XAUTHORITY=/home/username/.Xauthority
これにより、root が非 root ユーザーの X サーバーに永続的に接続できるようになります。
または、特定のアプリだけを指定することもできます:
# XAUTHORITY=/home/username/.Xauthority appname
ここで、appname は特定のアプリ名を指します(例: kwrite)。
Wayland
Wayland セッションで su, sudo, pkexec を使って root でグラフィカルアプリケーション (例: GParted や Gedit など) を実行しようとした場合、以下のようなエラーが表示されます:
$ sudo gedit No protocol specified Unable to init server: Could not connect: Connection refused (gedit:2349): Gtk-WARNING **: cannot open display: :0
Wayland 以前では、特権による GUI アプリケーションの実行は Polkit ポリシーを作成して正しく実装するか、あるいはターミナルでコマンドの前に sudo を付けて危なっかしく実行するようになっていましたが、(X)Wayland ではデフォルトでこのようなことはできなくなっています。クライアントの接続を許可されるのは X サーバーを起動したユーザーだけです (バグレポート や [4] [5], [6] を参照)。
#root 実行の回避を見て、できる限りグラフィカルアプリケーションは root で実行しないようにしてください。
また、#xhost を使うことで、あらゆるグラフィカルアプリケーションを root で実行することができます。
xhost を使う
回避策としては xhost を使うことで root ユーザーに対して一時的にローカルユーザーの X セッションへのアクセスを許可できます。非特権ユーザーで以下のコマンドを実行してください [7]:
$ xhost si:localuser:root
アプリケーションを閉じた後に許可を取り消すには:
$ xhost -si:localuser:root
sudo -E を使用する
次のコマンドでアプリケーションを起動できます:
$ sudo -E program
これにより、WAYLAND_DISPLAY のような環境変数が保持されます。
HOME 環境変数をターゲットユーザーに設定したい場合は、次のコマンドを使用します:
$ sudo -EH program
詳細は sudo(8) を参照してください。