Xサーバーのアクセスコントロール
XサーバーはGUIの核を成すソフトウェアです。その上にGNOMEやUnityが被さっています。
Xサーバーは”サーバー”と名がつく通り、サーバー・クライアント方式でGUIを実現しています。
今見ている画面がクライアントで、裏でXサーバーが動作しています。
Webに置き換えるとXサーバーが「Webサーバー」で、
今見ている画面が「ブラウザー」といったところでしょうか。
Webサーバーは誰でもアクセスできるものと、ユーザー認証が必要なものがあります。
特に社内サーバーは、セキュリティ上ユーザーの認証が必須です。
XサーバーもWebサーバーと同じようにユーザー認証を行い、
許されたユーザーにのみXサーバーにアクセスできる仕組みがあります。
この仕組みは「アクセスコントロール」といい、Ubuntuではデフォルトで有効になっています。
Ubuntuではログイン時に認証を行い、Xサーバーへのアクセス許可を得ています。
もしこの仕組みが無効になっていると、誰からでもXサーバーにアクセスできてしまいます。
サーバー・クライアント方式ですので、ネットワーク越しにアクセスすることも可能です。
簡潔に言えば、認証の必要がないリモートデスクトップ状態、といったところでしょうか。
アクセスコントロールの種類
Webサーバーには様々なユーザー認証方法がありますが、Xサーバーにも用途に応じて6種類の認証方法が用意されています。
- ホストによる認証
- クッキーによる認証
- DESによる暗号化を施したキーによる認証
- SunOSで実装されているSecure RPCによる認証
- Kerberosによる認証
- Server Interpretedによる認証
サポートされているアクセスコントロールの種類は環境によって異なります。
以前別のユーザーでコマンドを実行する方法を投稿しました。
ただ、単純にその方法ではXサーバーにアクセスする必要のアプリは動作しません。
(ルートユーザーは除く)
GUIなアプリはXサーバーにアクセスする必要があり、
Xサーバーに認証されていないユーザーでは画面にアクセスできないためです。
Xサーバーに認証されていないユーザーのアプリ実行例
前提として、「ubuntu」ユーザーがログインしている環境でコマンドを実行しています。「Ubuntu2」ユーザーに切り替えて「nautilus」を実行しようとすると、
「Cannot open diaplay」と表示されて実行に失敗します。
ログインシェルで実行しても結果は同じです。
同じくログインしても結果は同じです。
ログイン時に認証していると書きましたが、そもそもコンソールはXサーバーを必要としないため、
コンソールによるログインではXServerとの認証は行なっていません。
xhostコマンド
アクセスコントロールリストに許可するホストやユーザーの登録・解除を行うコマンドです。また、アクセスコントロールが有効か無効か調べることもできますし、
現在のアクセスコントロールリストを表示することもできます。
xhostコマンドはルートユーザー以外でも利用できますが、
セキュリティ上アクセス権を変更して、
ルートユーザーのみ実行できるようにしておいたほうが良いでしょう。
アクセスコントロールの状態とアクセスコントロールリストの表示
以下のコマンドを実行します。xhost
アクセスコントロールが有効になっている場合
「access control enabled」と表示されます。アクセスコントロールが無効になっている場合
「access control disabled」と表示されます。アクセスコントロールリスト
アクセスコントロールの状態の下に、アクセスコントロールリストが表示されます。SIというのは「Server Interpreted」の略です。
上記の場合「Server Interpreted」による認証が、
ローカルの「ubuntu」ユーザーに対して行われています。
アクセスコントロールを有効・無効にする
既定ではアクセスコントロールは有効になっています。アクセスコントロールリストを有効にする
以下のコマンドを実行します。xhost -
アクセスコントロールリストを無効にする
アクセスコントロールの無効化は、セキュリティ上危険ですのでお勧めしません。以下のコマンドを実行します。
xhost +