|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > s > sudo - システム管理コマンドの説明 sudo - システム管理コマンドの説明 - Linux コマンド集 一覧表名前sudo - 別のユーザとしてコマンドを実行する 書式sudo -V | -h | -l | -L | -v | -k | -K | -s | [ -H ] [-P ] [-S ] [ -b ] | [ -p prompt ] [ -c class |- ] [ -a auth_type ] [ -u username |#uid ] command 説明sudo は、許可されたユーザに対して、スーパーユーザや別のユーザの権限で command を実行することを許す。この指定は sudoers ファイルでなさ れる。実ユーザ ID・グループ ID と実効ユーザ ID・グループ ID は、成り代わるユーザのものと置き換えられる。 passwd ファイルでの指定が用い られる。 (成り代わるユーザが root でない場合、ユーザの入っているグループも初期化される)。デフォルトでは、sudo はパスワードを使った自分 自身に対する認証を必要とする (注意:このときのパスワードはそのユーザのパスワードであり、root パスワードではない)。一度ユーザが認証され ると、タイムスタンプが更新され、短い期間 (sudoers で上書きされない限り、デフォルトでは 5 分間) パスワードなしで sudo を使うことができ る。 sudo は、権限のあるユーザが誰かを /etc/sudoers ファイルによって決定する。 sudo に -v フラグをつけて実行すると、 command を実行すること なく、タイムスタンプを更新できる。パスワードプロンプト自身も、ユーザのパスワードが 5 分間入力されないとタイムアウトする (sudoers で上 書きされない限り)。 sudoers ファイルに記載されていないユーザが sudo を使ってコマンドを実行すると、誰か偉い人にメールが送られる。偉い人を誰にするかは (コン パイルの) 設定時または sudoers ファイルで定義される (デフォルトでは root) 。権限のないユーザが -l または -v フラグをつけて sudo を実行 した場合は、メールが送られないことに注意すること。これにより、ユーザは自分が sudo が使用可能であるかを自分自身で調べることができる。 sudo は成功した命令・失敗した命令の両方を (あるいはエラーも)、 syslog(3) やログファイル (あるいはその両方) に記録できる。デフォルトで は sudo は syslog(3) を使ってログをとる。これはコンパイルの設定時または sudoers ファイルで変更できる。 オプション
返り値プログラムが正常に実行されると、 sudo の返り値は単純に実行されたプログラムの返り値になる。 設定やアクセス権の問題があった場合、もしくは、sudo が指定されたコマンドを実行できなかった場合、 sudo は終了値 1 で終了する。後者の場合 は、エラー文字列が標準エラーに表示される。 sudo がユーザの PATH のエントリのどれかを stat(2) できない場合、エラーが標準エラーに表示さ れる (ディレクトリが存在しない場合、またはエントリが実際のディレクトリでない場合は、エントリは無視され、エラーは表示されない)。これは 通常の環境では起こらない。 stat(2) が "permission denied" を返す最も一般的な理由は、 automounter を稼働させているときに、 PATH にある ディレクトリのどれかが現在アクセスできない計算機上にあるというケースである。 セキュリティ上の注意sudo は外部コマンドを実行する場合、安全であるように努める。動的ロードや動的バインドを制御する環境変数を使って、 sudo が実行するプログ ラムの安全性を下げようとすることができる。これに対抗するため、環境変数 LD_*, _RLD_*, SHLIB_PATH (HP-UX のみ), LIBPATH (AIX のみ) は、 実行されるコマンドに渡される環境変数からは、いかなる場合も削除される。 sudo は、環境変数 IFS, ENV, BASH_ENV, KRB_CONF, KRB- CONFDIR, KRBTKFILE, KRB5_CONFIG, LOCALDOMAIN, RES_OPTIONS, HOSTALIASES, NLSPATH, PATH_LOCALE, TERMINFO, TERMINFO_DIRS, TERMPATH も同様 な脅威を引き起こすので削除する。 TERMCAP にパス名が設定されている場合も無視される。さらに LC_*, LANGUAGE 変数に /, % 文字が含まれてい る場合も無視される。 sudo が SecurID をサポートするようにコンパイルされている場合、 VAR_ACE, USR_ACE, DLC_ACE 変数も削除される。 sudo が削除する環境変数のリストは、 root で sudo -V を実行したときに表示される。 コマンドスプーフィング (だましコマンド) を阻止するため、ユーザの PATH でコマンドを検索するときに、 sudo は (カレントディレクトリを意味 する) "." と "" (のいずれかもしくは両方が PATH にあるかどうか) を最後にチェックする。しかし、実際の環境変数 PATH は修正されず、そのま ま sudo が実行するプログラムに渡されることに注意すること。 使用している OS が共有ライブラリをサポートしているのに、 setuid プログラムに対してユーザ定義のライブラリ検索パスを許している場合 (ほと んどはそうである)、セキュリティのため、これを許さないようにするリンカオプションを使うか、 sudo を静的にリンクすべきである。 sudo はタイムスタンプディレクトリ (デフォルトでは /var/run/sudo) の所有者をチェックし、所有者が root で、かつ root のみの書き込み属性 でない場合、ディレクトリの中身を無視する。 root 以外のユーザでも chown(2) を使って自分のファイルを他人に渡せるようなシステムでは、タイ ムスタンプディレクトリが全てのユーザに書き込み可能なディレクトリ (例えば、/tmp) である場合、ユーザが sudo の実行前にタイムスタンプディ レクトリを作成できてしまう。しかし sudo はディレクトリと中身の所有者とアクセス権をチェックするので、受けるダメージとしては「隠し」ファ イルをタイムスタンプディレクトリに入れられるだけである。タイムスタンプディレクトリを root の所有にして、他のユーザからはアクセス不可能 としてしまえば、そこにファイルを置いたユーザはファイルを取り出せなくなるので、こういったことは起こりづらい。この問題を避けるには、全て のユーザからは書き込めないディレクトリ (例えば、/var/adm/sudo) をタイムスタンプディレクトリとして使うか、システムのスタートアップファ イルで /var/run/sudo を適切な所有者 (root)とアクセス権 (0700) で作成すればよい。 sudo は、遠い未来の時刻になっているタイムスタンプのセットを受け付けない。 current_time + 2 * TIMEOUT より先の時刻になっているタイムス タンプは無視され、sudo はログに記録を残して警告を出す。これにより、ユーザによるファイル譲渡が可能なシステム上で、ユーザが偽の日付でタ イムスタンプを作成するのを防ぐ。 sudo は明示的に実行されたコマンドしかログに記録しない点に注意すること。ユーザが sudo su や sudo sh といったコマンドを実行した場合、シ ェルでそれ以降に実行されたコマンドはログに記録されず、 sudo のアクセス制御も効かない。これはシェルエスケープを提供するコマンド (多くの エディタも含まれる) でも同じである。そのため、sudo を介してユーザがコマンドへアクセスするのを許可する場合は、有効な root のシェルをそ のコマンドでうっかり与えてしまわないように注意しなければならない。 例注意: 以下の例は、適切な sudoers (5) エントリがあることを仮定している。 読み込み不可のディレクトリのファイルリストを取得する。 % sudo ls /usr/local/protected ~yazza の存在するファイルシステムが root でエクスポートされていないマシン上で、 ユーザ yazza のホームディレクトリの中身をリストする。 % sudo -u yazza ls ~yazza ファイル index.html をユーザ www として編集する。 % sudo -u www vi ~www/htdocs/index.html マシンをシャットダウンする。 % sudo shutdown -r +15 "quick reboot" /home パーティションにあるディレクトリのディスク使用量リストを作成する。 (C`cd(C' とファイルリダイレクションが動作するように、 サブシェルでコマンドを実行している点に注意すること。 % sudo sh -c "cd /home ; du -s * | sort -rn > USAGE" 環境変数sudo は、以下の環境変数を使用する。
ファイル/etc/sudoers 誰が何を可能であるかのリスト。 /var/run/sudo タイムスタンプの含まれるディレクトリ。 著者多くの人々が長年に渡り sudo の製作に携わってきた。 このバージョンには、最初に Todd Miller Chris Jepeway によって書かれたコードが含まれている。 sudo の簡単な履歴については、 sudo ディストリビューションの -1HISTORY0 ファイルを参照するか、 http://www.sudo.ws/sudo/history.html を参照すること。 バグsudo のバグを発見したと思った場合は、 http://www.sudo.ws/sudo/bugs/ にバグの報告を送って下さい。 放棄宣言Sudo is provided ``-1AS0 -1IS0'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the -1LICENSE0 file distributed with sudo for complete details. 警告ユーザがシェルエスケープの可能なコマンドにアクセスできる場合、ユーザに root のシェルを入手させないための簡単な方法はない。 ユーザに sudo ALL の権限がある場合、そのユーザの設定に ’!’ 指定をしても、自分でプログラムを書けば root シェルを入手できてしまう。これ を防ぐ簡単な方法はない。 シェルスクリプトを sudo で実行すると、カーネルのバグを突いてしまい、 OS によっては setuid シェルスクリプトを危険なものにしてしまうかも しれない (使用している OS が /dev/fd/ ディレクトリをサポートしている場合、 setuid シェルスクリプトは一般的に安全である)。 関連項目
stat
(2), login_cap
(3), sudoers
(5), passwd
(5), visudo
(8), grep
(1), su
(1).
|
|