# &kdesu; ハンドブック

## 導入

&kdesu; にようこそ！ &kdesu; は、UNIX "`su`"コマンドの、 Kデスクトップ環境のためのグラフィカルフロントエンドです。 これは、他のユーザーのパスワードを適応することによって、そのユーザーとして、プログラムを実行する事が出来ます。 &kdesu; は権利のないプログラムであり、システムのsuを使っています。

KDE su は、パスワードを保持する機能が一つ追加されています。この機能を使えば、 コマンド実行の度にパスワードを入力する必要は無くなります。 この機能と、セキュリティー分析についての詳細は、 sec-password-keepingを御覧下さい。

このプログラムは、コマンドライン、もしくは、 `.desktop`ファイルから実行出来ます。 それは、GUI ダイアログを使って root パスワードを尋ねますが、私は、純粋な GUI プログラムに代る、コマンドラインと GUI のより良い接続法であると考えています。

## インストール

### ダウンロード

&kdesu; は現在、KDE CVS の kdebase に入っています。 全ての (2.x) KDE ディストリビューションに含まれているはずです。 あなたもまた、私の ftp://skynet.stack.nl/pub/users/geertj/ にあるホームページからKDE 1.x バージョンを入手することが出来ます。

### コンパイル

&kdesu; は kdebase に入っていて、あなたは既に持っています、もしくは、 kdebase をインストールする時に入手します。

KDE 1.xバージョンをコンパイルするには、次のようにして下さい。

    $ ./configure
    $ make
    $ make install

最後のステップはrootで実行する必要があります。インストール行程は システムワイドなKDEディレクトリに書き込める必要があるためです。

## &kdesu; の使い方

&kdesu; の使い方は簡単です。文法は次のようになっています。

          kdesu
          USER
          -n
          -t
          -q
          -d
          -f FILE
          -c

    	  COMMAND
    	  ARG1
    	  ARG2

          kdesu

    	-v
    	-h
    	-s

コマンドラインオプションの説明は次のようになっています。

`-c `PROGRAM``

- これは、root として実行するプログラムを指定します。 それは、一つの引数として記述しなければなりません。 例として、新規のファイルマネージャーを実行するのであれば、プロンプトに次のように入力します。 ``kdesu `-c `kfm -sw````

`-f `FILE``

- このオプションは `.desktop` ファイルにおいて、 &kdesu; を効率的に使う事が出来ます。 これは、 `FILE` によって指定されたファイルをテストするということを &kdesu; に伝えます。 もし、このファイルが現在のユーザーによって書き換え可能であれば、 &kdesu; は現在のユーザーとしてそのコマンドを実行します。 もし、書き込み可能でなければ、ユーザー `USER` (デフォルトは root) として、そのコマンドを実行します。

  `FILE` は次のように評価されます。 `FILE` が "/" から始まるのであれば、それは絶対ファイル名として受け取られます。 そうでなければ、グローバル KDE コンフィギュレーションファイル名として扱われます。 例として、K ディスプレイマネージャー kdm を設定するにあたって、次のようにすることが出来ます。 `kdesu `-c kdmconfig -f kdmrc``

`-t`

- ターミナル出力を有効にします。 これはパスワード保持を無効にします。 これは、広く、デバッグ用途に使用します。 もし、コンソールモードのアプリケーションを使いたい時には、 代わりに標準の "`su`" を使います。

`-n`

- パスワードを保持しません。 これは、パスワードダイアログの "keep password" チェックボックスを無効にします。

`-q`

- 無言モードです。

`-d`

- デバッグ情報を表示します。

`-v`

- バージョン情報を表示して終了します。

`-h`

- いくつかのヘルプを表示します。

`-s`

- kdesu デーモンを停止します。 sec-password-keeping を御覧下さい。

## 設定

&kdesu; は kcmkdesu と呼ばれるコントロールモジュールと一緒に配布されます。 K メニューバーの Settings Applications KDE su にあります。 以下の設定を変える事が出来ます。

エコーモード

- これは、入力されるどのような文字列をスクリーンにエコーさせるかの設定です。 可能な選択肢は、一文字ごとにスター、三つのスター、もしくは、全くエコーしない、です。 デフォルトは、一文字ごとにスター、となっています。

パスワードを保持

- "keep password" チェックボックスにチェックすることで、 入力したパスワードを KDE su に覚えさせることが出来ます。 チェックすると、タイムアウト値を下方のテキストフィールドに入力出来るようになります。 これは、パスワードが記憶される時間で、単位は分になっています。 デフォルトでは、パスワード保持しない、になっています。

## 内部

### X 認証

実行したプログラムは root ユーザー ID にて実行され、 一般的にあなたの X ディスプレイにアクセスする権限はありません。 KDE su はあなたのディスプレイのための認証クッキーを一時的な `.Xauthority`ファイルに加えることによって権限を得ています。 コマンドが終了すると、このファイルは取り除かれます。

もし、あなたが Xクッキーを使わないのであれば、自己責任です。 &kdesu; は、これを検出し、クッキーを加えませんが、 root があなたのディスプレイにアクセス出来るようにしておかなければなりません。

### `su` へのインターフェース

>&kdesu; は権限を取得するのに、システムの "`su`" を使用します。 この章では、&kdesu; はどのようにこれをするのかの詳細を説明します。

いくつかの `su` の実装 (例えば、Redhatの `su`)では、 標準入力(`stdin`)からのパスワード読み込みを使わないので、 &kdesu; は、 pty/tty のペアを作成し、 tty に接続されたそれ自身の標準ファイルディスクリプターにて "`su`" を実行します。

ユーザーが選択したコマンドを実行するために、 &kdesu; は、対話シェルではなく、 "`-c`" の引数を伴った `su` を使用します。 この引数は、私の知る全てのシェルで認識され、汎用的に動作するはずです。 `su` は、この "`-c`" 引数を、 対象とするユーザーのシェルに渡し、そして、シェルはプログラムを実行します。 コマンド例は、 "`su `root -c `the_program```" となります。

`su` を使って直接ユーザーコマンドを実行する代わりに、&kdesu; は kdesu_stub と呼ばれる小さな スタブプログラムを実行します。 この スタブ(対象のユーザーとして実行されるている)は 、 いくつかの情報を pty/tty チャンネル(スタブの標準入出力)越しに &kdesu; に要求し、 それから、ユーザーのプログラムを実行します。 渡される情報は、Xディスプレイ、(可能であれば)X 認証クッキー、 環境変数 `PATH`、そして、実行するコマンド、となっています。 スタブプログラムが使われる理由は、 X クッキーはプライベートな情報であるためで、コマンドラインに渡すことが出来ないのです。

### パスワードのチェック

&kdesu; は入力されたパスワードをチェックし、正しくなければエラーメッセージを返します。 パスワードチェックは、テストプログラム `/bin/true` を実行することによって行われます。 これが成功すると、パスワードは正しいと、想定されます。

### パスワード保持

便利になるように、 &kdesu; は "keep password"機能を実装しています。もし、あなた がセキュリティーに興味があれば、この項を読むべきです。

&kdesu; にパスワードを保持させる事は、あなたのシステムに(小さな)セキュリティーホールを作ることになります。 明らかに、KDE su は、あなたのユーザー ID を除いて誰にも、パスワードを使う事を許してはいませんが、 もし、注意せずに使うのならば、これは、rootのセキュリティーレベルを一般ユーザー(あなた) のセキュリティーレベルへと下げてしまう事になります。 あなたのアカウントに討ち入ったクラッカーは、root 権限を取得することになります。 &kdesu; はこれを防ごうと努めます。これを使うセキュリティー策は、少なくとも私の考えでは、 合理的に安全であり、ここで説明します。

&kdesu; は、 kdesud というデーモンを使います。 デーモンは `/tmp` にあるUNIXソケットにコマンドを教えます。 ソケットのモードは 0600 なので、だた、あなたのユーザー IDのみがそれに接続することが出来ます。 パスワード保持が有効になっていると、&kdesu; はこのデーモンを通してコマンドを実行します。 それは、上記にあるように、コマンドとroot のパスワードをそのソケットに書き込み、 そして、デーモンは "`su`" を使ってそのコマンドを実行します。 このあと、コマンドと、パスワードは捨てられません。代わって、それらは指定された時間だけ保持されます。 これは、コントロールモジュールの中のタイムアウト値です。 もし、この期間中に、同じコマンドの他のリクエストが来ても、クライアントはパスワードを入力する必要はありません。 あなたのアカウントを打破したクラッカーがデーモンからパスワードを盗む(例えば、デバッガを使って)のを防ぐために、 デーモンは set-group-id nogroup でインストールされています。 これは、全ての一般ユーザー(あなたを含めて)が、kdesud プロセスからパスワードを取得することを防ぐはずです。 また、デーモンは環境変数`DISPLAY`に、デーモンが起動された時のその値をセットします。 クラッカーが唯一することの出来るのは、アプリケーションをあなたのディスプレイ上で実行する、ということだけです。

この解決策の弱点は、恐らく、あなたが実行するプログラムはセキュリティーを考慮にいれて書かれていない、いう点です。 (例えば、setuid のrootのプログラムなど。) これは、それらのプログラムはバッファーオーバーラン、もしくは、その他の問題を持っている可能性があるということを意味していて、 そして、クラッカーはそれらの問題を見付け出すことが出来ます。

パスワード保持機能を使用するかどうかは、セキキュリティーと便利さの兼ね合いに依ります。 その機能を使いたいかどうかを良く考えて、自分で決めることを、私は勧めます。

## 作者

&kdesu;

Copyright 2000 Geert Jansen

&kdesu; は Geert Jansen によって書かれました。 Pietro Iglio の &kdesu; バージョン 0.3 に基づいたsomewhatです。 Pietro と 私は、将来私がこのプログラムの保守をしていくことに合意しています。

作者とは g.t.jansen@stud.tue.nl へのメールで連絡を取ることが出来ます。 バグがあれば、それを私がf修正出来るように、連絡して下さい。 もし提案があれば、気楽に連絡してください。

&underFDL; &underArtisticLicense;