6.2. sudo ユーティリティーを使用した管理アクセスを設定

ユーザーに管理アクセスを付与する別のアプローチとして sudo コマンドを利用できます。信頼されるユーザーが、管理コマンドの前に sudo を付けると、このユーザー自身の パスワードが要求されます。ユーザーが認証され、コマンドが許可されると、管理コマンドは root 権限で実行されます。
sudo コマンドの基本的なフォーマットは、以下のとおりです。
sudo command
上記の例の command の部分を、通常は root ユーザーのみが使用する mount といったコマンドに置き換えます。
sudo コマンドでは、ハイレベルの柔軟性が可能になります。たとえば、/etc/sudoers 設定ファイルに記載されているユーザーのみが sudo コマンドを使うことができ、root シェルではなく、そのユーザーの シェルでコマンドが実行されます。つまり、『Red Hat Enterprise Linux 7 セキュリティガイド』 にあるように、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

重要

TTY の監査システムの pam_tty_audit PAM モジュールを設定すると、TTY 入力のみが記録されます。つまり、監査されるユーザーがログインすると、pam_tty_audit には、/var/log/audit/audit.log ファイルに記録されるキーストロークと同じ内容が記録されます。詳細は、man ページの pam_tty_audit(8) を参照してください。
sudo コマンドのもう一つの利点は、各ユーザーのニーズに応じて特定のコマンドへのアクセスを管理者が許可できることです。
管理者が sudo 設定ファイルである /etc/sudoers を編集する場合は、visudo コマンドを使用することが推奨されます。
他のユーザーに完全な管理権限を付与する場合は、visudo と入力し、ユーザー権限の指定セクションに以下の行を追加します。
juan ALL=(ALL) ALL
この例では、ユーザーの juan は、sudo を使用すればどのホストからでもどのコマンドを実行できることを示しています。
以下の例では、sudo を設定する際に可能な粒度を示しています。
%users localhost=/usr/sbin/shutdown -h now
この例が示しているのは、コンソールからであれば、 users システムグループのどのユーザーでも、/sbin/shutdown -h now コマンドを実行できるということです。
sudoers の man ページには、このファイルのオプションの詳細なリストが記載されています。

重要

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