Red Hat Training

A Red Hat training course is available for Red Hat Linux

4.2. sudo コマンド

sudo コマンドを使うことで、ユーザーに管理アクセスを付与する別のアプローチができます。信頼できるユーザーが sudo で管理コマンドに優先する場合、このユーザーは ユーザー自身の パスワードを要求されます。ユーザーが認証され、コマンドが許可されると、管理コマンドは root ユーザーであるかのように実行されます。
sudo コマンドの基本的なフォーマットは、以下の通りです。
sudo <command>
上記の例では、<command> の部分は、通常 root ユーザーのみが使用する mount といったコマンドに置き換えます。
sudo コマンドでは、ハイレベルの柔軟性が可能になります。例えば、/etc/sudoers 設定ファイルに記載されているユーザーのみが sudo コマンドを使うことができ、root シェルではなく、ユーザーの シェルでコマンドが実行されます。つまり、『Red Hat Enterprise Linux 6 セキュリティガイド』 にあるように、root シェルは完全に無効化できるのです。
sudo を使った正常な認証はすべて /var/log/messages ファイルに記録され、この発行者のユーザー名で発行されたコマンドは、/var/log/secure ファイルに記録されます。新たなログが必要な場合は、以下の行を /etc/pam.d/system-auth ファイルに追加して、pam_tty_audit モジュールで特定ユーザーの TTY 監査を有効にします。
session required pam_tty_audit.so disable=<pattern> enable=<pattern>
pattern で表示されるのは、コンマで区切ったユーザーのリストで、グロブをオプションで使います。例えば、以下の設定は、root ユーザーのTTY 監査を有効にし、その他のユーザーについては無効にします。
session required pam_tty_audit.so disable=* enable=root
sudo コマンドのもう一つの利点は、異なるユーザーのニーズに応じて特定のコマンドへのアクセスを管理者が許可できることです。
sudo 設定ファイルである /etc/sudoers の編集を希望する管理者は、visudo コマンドを使用することが推奨されます。
完全な管理権限を誰かに付与する場合は、visudo を入力し、ユーザー権限特定セクションに以下と同様の行を追加します。
juan ALL=(ALL) ALL
この例では、ユーザーの juan はどのホストからでも sudo を実行して、どんなコマンドも実行できます。
以下の例では、sudo を設定する際に可能な粒度を示しています。
%users localhost=/sbin/shutdown -h now
この例が示しているのは、コンソールからであれば、どのユーザーでも /sbin/shutdown -h now コマンドを発行でできるということです。
sudoers の man ページにはこのファイルのオプションの詳細なリストが記載されています。

重要

sudo コマンドの使用時には、潜在的なリスクがいくつかあることを覚えておく必要があります。このリスクは、上記のように visudo を使用して /etc/sudoers 設定ファイルを編集することで回避できます。/etc/sudoers ファイルをデフォルトの状態にしておくと、wheel グループのユーザー全員に無制限の root アクセスを与えることになります。
  • sudo はデフォルトで、sudo コマンド使用者のパスワードをタイムアウトの 5 分間、保存します。この間にコマンドを続けて使うと、ユーザーはパスワードを要求されません。このため、ユーザーがログイン状態のままワークステーションを離れたりロックしない状態にしておくと、攻撃者に悪用されかねません。この動作は、以下の行を /etc/sudoers に追加することで変更できます。
    Defaults    timestamp_timeout=<value>
    <value> には、指定するタイムアウトの分数を入れます。<value> を 0 にすると sudo は毎回パスワードを要求します。
  • sudo 使用者のアカウントが侵害されると、攻撃者は sudo を使って管理権限のある新たな shell を開くことができます。
    sudo /bin/bash
    この方法や同様の方法で root として新たな shell を開くと、/etc/sudoers ファイルで指定されたタイムアウト時間を無視し、新たに開かれたセッションが閉じられるまで攻撃者に sudo パスワード入力を要求することがなく、理論上は攻撃者に時間無制限の管理アクセスを与えることになります。