# &kdesu; ハンドブック

## はじめに

ようこそ &kdesu; へ！ &kdesu; は &UNIX; `su` コマンドの KDE 用フロントエンドです。これを用いて異なるユーザの権限でコマンドを実行することができます。必要な場合はパスワードの入力が促されます。&kdesu; 自体に特権はありません。間接的に `su` を使用しています。

&kdesu; は、パスワードを記憶させることができます。この機能を使うと、記憶させたときのコマンドを次に実行する際にパスワードを入力する必要がなくなります。セキュリティに関する情報については パスワードの保存 の節を参照してください。

このプログラムはほとんどの場合、コマンドラインか `.desktop` ファイルから実行されます。&GUI; を用いて root のパスワードを求めますが、これは純粋な &GUI; というよりも、コマンドラインと &GUI; の接着剤のような役割です。

## &kdesu; の使い方

&kdesu; の使い方は簡単です。例えば、以下のような使い方をします。

    kdesu -c -d -f  file -i  icon name -n -p  priority -r -s -t -u  user --nonewdcop command arg1 arg2

    kdesu &kde; Generic Options Qt Generic Options

以下のコマンドラインオプションを受け付けます。

`-c `program``

- 実行するコマンドを指定します。これは、一つの引数として指定する必要があります。例えば、ファイルマネージャを起動する場合、次のように指定します。``kdesu `-c `kfm -sw````

`-d`

- ダイアログに、実行するコマンドを表示しません。

`-f `file``

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

  `file` が書き換え可能かどうかは次のようにテストします。もし、`file` が `/` から始まっていれば、絶対パスとして認識します。それ以外なら、グローバル &kde; コンフィグレーションファイルとして認識します。例えば、kdm を設定する場合、次のような指定をすることができます。`kdesu `-c kdmconfig -f kdmrc``

`-i` `icon name`

- ダイアログで使用するアイコンを指定します。アイコン名 (ディレクトリや拡張子は不要) のみを指定することもできます。

  例えば、`kfmclient` を実行する際に、ダイアログに &konqueror; のアイコンを表示させたいのであれば次のようにします。

      kdesu  -i konqueror kfmclient

`-n`

- パスワードを記憶してほしくないのであれば、パスワードを記憶させる にチェックを入れないでください。

`-p` `priority`

- 優先度を指定します。優先度は 0 から 100 までで指定し、0 が最も低い優先度で 100 が最も高い優先度になります。デフォルトは 50 です。

`-r`

- リアルタイムスケジューリングを使用します。

`-s`

- kdesu デーモンを停止させます。パスワードの保存 の節を参照。

`-t`

- ターミナル出力を有効にします。このオプションを有効にするとパスワードの保存はされません。このオプションは主にデバッグ用なので、コンソールアプリを実行する場合は代わりに `su` を使用してください。

`-u` `user`

- &kdesu; は一般的に、スーパーユーザとしてコマンドを実行する場合に使用しますが、このオプションで別のユーザとして実行させることができます。

## &kdesu; の内部

### X 認証

あなたが実行するプログラムは root 権限の下で動作し、通常は X にアクセスする権限はありません。&kdesu; は、テンポラリファイル `.Xauthority` に認証クッキーを書き込むことによって、X へアクセス可能にしています。コマンド終了後、このファイルは削除されます。

もしクッキーを使わないのであれば、そのための処理は自分で行ってください。&kdesu; は自動で検出してクッキーを加えませんが、root がディスプレイにアクセスできるようにする必要があります。

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

&kdesu; は、特権を得るために `su` を使用します。この節では、その方法を説明します。

`su` の実装によっては、標準入力からパスワードを読み込まないものがあるので (&RedHat; など)、&kdesu; は pty/tty 一式を用意して、その tty のファイルディスクリプタで `su` を実行します。

ユーザが選んだコマンドを実行するために、&kdesu; は、対話的なシェルではなく `su` の `-c` を使用します。この引数は、私が知る限りではすべてのシェルで使うことができるはずです。`su` は `-c` で指定されたコマンドを対象となるユーザのシェルに渡して実行します。コマンド例: `su `root -c `the_program```

&kdesu; は、直接 `su` を使う代わりに kdesu_stub という小さいスタブプログラムを実行します。このスタブ (対象ユーザの権限で実行される) は、pty/tty チャンネル (スタブの標準入出力) を通していくつかの情報を &kdesu; に要求し、ユーザのプログラムを実行します。スタブへ渡される情報は、X ディスプレイ、(利用可能なら) X の認証クッキー、`PATH` 、実行するコマンドです。スタブプログラムを使う理由は、X クッキーはプライベートな情報なのでコマンドラインに渡すべきではないからです。

### パスワードの確認

&kdesu; は、入力されたパスワードが間違っていればエラーメッセージを返します。チェックの方法は、`/bin/true` を実行して行います。もし成功すればパスワードは正しいと仮定します。

### パスワードの保存

&kdesu; は、パスワード入力の手間を省くためにパスワードを保存させることができます。セキュリティ面が気になるのであれば、この節を読んでください。

&kdesu; にパスワードを覚えさせることは、システムに小さなセキュリティホールをつくることにもなります。もちろん、あなたのユーザ ID 以外にはパスワードを使わせません。しかし、注意して使わなければ `root` のセキュリティレベルは一般ユーザ並になってしまいます。悪徳クラッカーがあなたのアカウントに侵入すれば、`root` 権限は奪われてしまうでしょう。&kdesu; は、これを防ぐために努力します。これから説明するその方法は、少なくとも私の考えではかなり安全です。

&kdesu; は、kdesud というデーモンを使用します。このデーモンは `/tmp` 内の &UNIX; ソケットからコマンドを読み込みます。ソケットのモードは 0600 なので、あなたのユーザだけが接続できます。パスワードの保存が有効になっているのなら、&kdesu; はこのデーモンを使ってコマンドを実行します。上記のとおりに、コマンドと `root` のパスワードをソケットに書き込み、デーモンは `su` を使ってそれを実行します。その際に使ったコマンドとパスワードは破棄せずに、指定された期間だけ保存されます。この期間はコントロールモジュール内のタイムアウト値です。次回同じコマンドを実行したときにパスワードが保存されていれば、パスワードは必要ありません。あなたのアカウントに侵入したクラッカーが、デバッカなどを用いてデーモンからパスワードを盗聴するのを防ぐために、デーモンは set-group-id で nogroup に設定した状態でインストールされています。これで、あなたを含む一般ユーザが kdesud からパスワードを得ることを防げるはずです。また、デーモンは環境変数 `DISPLAY` に起動時の値をセットします。唯一クラッカーができることは、あなたのディスプレイ上でアプリケーションを実行することだけです。

この方法の欠点は、あなたが実行するプログラムはおそらくセキュリティを考慮して書かれていないだろうということです (例えば、setuid が設定されたプログラムなど)。このようなプログラムには、バッファオーバーランなどの脆弱性がある恐れがあり、それをクラッカーに利用される可能性もあります。

パスワードを保存するかどうかは、セキュリティと便利さのどちらをとるかによります。その機能を使うかどうかを自分自身でよく考えることを勧めます。

## 作者

&kdesu;

Copyright 2000 &Geert.Jansen;

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

この文章の著者に &Geert.Jansen.mail; でメールを送ることができます。バグを発見したら、修復できるように私に報告してください。もし提案があれば、遠慮せずに連絡してください。

&underFDL; &underArtisticLicense;