「Root で X アプリケーションを起動」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「{{lowercase title}} Category:X サーバー en:Running X apps as root ko:Running X apps as root セキュリティ上の理由で、デフォルトでは ro...」)
 
(同期)
1行目: 1行目:
  +
[[Category:グラフィカルユーザーインターフェイス]]
{{lowercase title}}
 
[[Category:X サーバー]]
+
[[Category:セキュリティ]]
[[en:Running X apps as root]]
+
[[en:Running GUI apps as root]]
 
[[ko:Running X apps as root]]
 
[[ko:Running X apps as root]]
  +
{{Warning|1=以下の方法は全てセキュリティに影響があるためユーザーは注意する必要があります。GNOME の開発者である Emmanuele Bassi の発言より: "''root で GUI アプリケーションを実行しなければならないという理由はありません。技術的な裏付けなどは全くないのです。管理者ユーザーとして GUI アプリケーションを実行するということは文字通り数百万行のコードを特権で動かすということに他なりません。$HOME の中のファイルにアクセスするコードを実行してファイルシステムの所有権を変えることができ、IPC で接続することでさらに別のコードも実行できます。大きなセキュリティホールがぽっかりと空いているわけです [...]''"[https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5]。}}
セキュリティ上の理由で、デフォルトでは root は root 以外のユーザーが起動した X サーバーに接続することができません。必要な場合 root から接続できるようにする方法がいくつか存在します。
 
   
  +
グラフィカルアプリケーションを root で実行するのはできるかぎり避けてください。[[#root 実行の回避]]を見てください。
==安全な方法==
 
   
  +
== 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 のアクセスを許可 ===
 
   
==== 方法 1 ====
+
== Xorg ==
  +
  +
セキュリティ上の理由で、デフォルトでは root は root 以外のユーザーが起動した [[Xorg|X サーバー]]に接続することができません。必要な場合 root から接続できるようにする方法がいくつか存在します。
  +
  +
[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''
  +
  +
* {{Pkg|bashrun}}:
  +
$ bashrun --su ''application''
  +
  +
* {{AUR|sux}} (X のログイン情報を転送する [[su]] のラッパー)
  +
$ sux root ''application''
  +
  +
=== 他の方法 ===
  +
  +
以下の方法でも root からユーザーの X サーバーに接続することができますが、セキュリティ上の危険性が存在し、特に SSH を動作させている場合は危険です。
  +
  +
==== Xhost ====
  +
  +
[[Xhost]] を使うことで一時的に root のアクセスを許可できます。
  +
  +
==== 永続的に root のアクセスを許可 ====
  +
  +
===== 方法 1 =====
   
 
以下の行を {{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} に追加してください:
 
以下の行を {{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} に追加してください:
46行目: 65行目:
 
その後 {{ic|su}} や {{ic|su -}} を使って root ユーザーに切り替えてください。
 
その後 {{ic|su}} や {{ic|su -}} を使って root ユーザーに切り替えてください。
   
==== 方法 2 ====
+
===== 方法 2 =====
   
 
{{ic|/etc/profile}} に以下の行を追加してください:
 
{{ic|/etc/profile}} に以下の行を追加してください:
  +
 
export XAUTHORITY=/home/non-root-usersname/.Xauthority
 
export XAUTHORITY=/home/non-root-usersname/.Xauthority
   
54行目: 74行目:
   
 
あるいは、接続するアプリを指定する場合 (例: kwrite):
 
あるいは、接続するアプリを指定する場合 (例: kwrite):
  +
 
export XAUTHORITY=/home/usersname/.Xauthority kwrite
 
export XAUTHORITY=/home/usersname/.Xauthority 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

2018年4月27日 (金) 00:59時点における版

警告: 以下の方法は全てセキュリティに影響があるためユーザーは注意する必要があります。GNOME の開発者である Emmanuele Bassi の発言より: "root で GUI アプリケーションを実行しなければならないという理由はありません。技術的な裏付けなどは全くないのです。管理者ユーザーとして GUI アプリケーションを実行するということは文字通り数百万行のコードを特権で動かすということに他なりません。$HOME の中のファイルにアクセスするコードを実行してファイルシステムの所有権を変えることができ、IPC で接続することでさらに別のコードも実行できます。大きなセキュリティホールがぽっかりと空いているわけです [...]"[1]

グラフィカルアプリケーションを root で実行するのはできるかぎり避けてください。#root 実行の回避を見てください。

root 実行の回避

sudoedit

root でファイルを編集するときは sudoedit を使ってください。

GVFS

admin バックエンド の URI を指定することで GVFS 経由で特権が必要なファイルやディレクトリにアクセスできます [2][3]:

$ nautilus admin:///root/

または:

$ gedit admin:///etc/fstab
ヒント: 上記の URI はアプリケーションのロケーションバーやファイル選択でも使うことができます。例えば nautilusgedit なら、Ctrl+l を押してからパスの前に admin:// を付けてください。Other locations サーバーアドレスバーでも同じことが可能です。

Xorg

セキュリティ上の理由で、デフォルトでは root は root 以外のユーザーが起動した X サーバーに接続することができません。必要な場合 root から接続できるようにする方法がいくつか存在します。

こちらのフォーラムの投稿 にあるように、特権で X の GUI アプリを実行するときの適切かつ推奨される方法は Polkit ポリシーを作成することです。ただし、この方法は pkexec(1) に書かれているように古いプログラムでのみ使用するべきです。アプリケーションは特権操作を最小限のコードに委任して、権限が必要なくなったら自動的に権限を消す必要があります [4]

安全な方法

以下の方法ではアプリケーションは昇格フレームワークにラッピングされ、アプリケーションの終了時に権限も落とされます:

$ kdesu application
$ sudo application
$ bashrun --su application
  • suxAUR (X のログイン情報を転送する su のラッパー)
$ sux root application

他の方法

以下の方法でも root からユーザーの X サーバーに接続することができますが、セキュリティ上の危険性が存在し、特に SSH を動作させている場合は危険です。

Xhost

Xhost を使うことで一時的に root のアクセスを許可できます。

永続的に root のアクセスを許可

方法 1

以下の行を /etc/pam.d/su/etc/pam.d/su-l に追加してください:

session         optional        pam_xauth.so

その後 susu - を使って root ユーザーに切り替えてください。

方法 2

/etc/profile に以下の行を追加してください:

export XAUTHORITY=/home/non-root-usersname/.Xauthority

上記の設定で root が root 以外のユーザーの X サーバーに永続的に接続できるようになります。

あるいは、接続するアプリを指定する場合 (例: kwrite):

export XAUTHORITY=/home/usersname/.Xauthority kwrite

Wayland

Wayland セッションで su, sudo, pkexec を使って root でグラフィカルアプリケーション (例: GPartedGedit など) を実行しようとした場合、以下のようなエラーが表示されます:

$ 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 サーバーを起動したユーザーだけです (バグレポート[5] [6], [7] を参照)。

#root 実行の回避を見て、出来る限りグラフィカルアプリケーションは root で実行しないようにしてください。

また、#xhost を使うことで、あらゆるグラフィカルアプリケーションを root で実行することができます。

xhost を使う

回避策としては xhost を使うことで root ユーザーに対して一時的にローカルユーザーの X セッションへのアクセスを許可できます。非特権ユーザーで以下のコマンドを実行してください [8]:

$ xhost si:localuser:root

アプリケーションを閉じた後に許可を取り消すには:

$ xhost -si:localuser:root