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 ページには、このファイルのオプションの詳細なリストが記載されています。
/etc/sudoers
ファイルで NOPASSWD
オプションを指定して、パスワードを指定する必要がない sudo ユーザーを設定することもできます。
user_name ALL=(ALL) NOPASSWD: ALL
ただし、このようなユーザーであっても、sudo
は PAM (Pluggable Authentication Module) アカウント管理モジュールを実行します。これにより、認証フェーズ外で PAM モジュールに課せられた制限を確認できるようになります。これにより、PAM モジュールが正しく動作するようになります。たとえば、pam_time
モジュールの場合、時間ベースのアカウント制限は失敗しません。
PAM ベースのすべてのアクセス制御ルールで、sudo
を、許可されるサービスのリストに常に含めるようにしてください。そうしないと、ユーザーが sudo
にアクセスしようとしたときに permission denied エラーメッセージが表示されますが、現行のアクセス制御ルールに基づいてアクセスが禁止されます。
詳細は、Red Hat ナレッジベースの記事 After patching to Red Hat Enterprise Linux 7.6 sudo gives a permission denied error. を参照してください。
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
パスワード入力を要求することがないため、理論上は時間の制限なく攻撃者に管理アクセスを与えることになります。