Linux での Su 認証失敗のトラブルシューティング

LinuxBeginner
オンラインで実践に進む

はじめに

Linux の "su" (substitute user) コマンドは、ユーザーが一時的に別のユーザーアカウント、多くの場合 root ユーザーに切り替えて、管理タスクを実行できるようにする強力なツールです。しかし、su の認証失敗が発生すると、アクセス拒否や潜在的なセキュリティリスクにつながる可能性があります。このチュートリアルでは、Linux 上での su 認証失敗のトラブルシューティングプロセスについて説明します。一般的な原因、設定、および安全な su 使用のためのベストプラクティスをカバーします。

su コマンドの理解と基本的な使用法

Linux の su コマンドを使用すると、ユーザーは現在のユーザー ID を別のユーザーに切り替えることができます。これは、権限昇格を必要とする管理タスクを実行する際に特に役立ちます。

su コマンドの基本的な使用法を探り、その仕組みを理解しましょう。

Su の基本的な使用法

LabEx VM 環境でターミナルを開きます。次の構文で su コマンドを使用できます。

su [options] [username]

ユーザー名を指定せずに su を実行すると、デフォルトで root ユーザーになります。

su

root パスワードの入力を求められます。ただし、Ubuntu を含む多くの最新の Linux ディストリビューションでは、セキュリティ上の理由から、root アカウントはデフォルトで無効になっています。

練習用にテストユーザーを作成しましょう。

sudo adduser testuser

プロンプトが表示されたら、必要な情報を入力します。簡単にするために、このテストユーザーのパスワードとして「password」を使用できます。

次に、このユーザーに切り替えてみましょう。

su testuser

プロンプトが表示されたら、testuser 用に作成したパスワードを入力します。認証されると、プロンプトが変わり、testuser として操作していることを示します。

ユーザーが正常に切り替わったことを確認するには、次を実行します。

whoami

出力は次のようになります。

testuser

元のユーザーに戻るには、単に次のように入力します。

exit

オプション付きでの Su の使用

su コマンドはいくつかのオプションをサポートしています。最も一般的なのは - (ハイフン) オプションで、完全なログイン環境を提供します。

su - testuser

これは、ユーザー ID を切り替えるだけでなく、次のことも行います。

  • ターゲットユーザーのホームディレクトリに移動します
  • ターゲットユーザーの環境変数を設定します
  • ログインシェルを提供します

このコマンドを試して、違いを観察してください。

pwd

出力は testuser のホームディレクトリを表示します。

/home/testuser

次のように入力して、testuser から終了します。

exit

su コマンドのこの基本的な理解は、次の手順で認証失敗のトラブルシューティングに役立ちます。

一般的な Su 認証失敗とその原因

su コマンドを使用すると、さまざまな理由で認証失敗が発生する可能性があります。これらの失敗を理解することが、それらを解決するための最初のステップです。

認証失敗のテスト

理解を深めるために、意図的にいくつかの認証失敗を作成してみましょう。

  1. 間違ったパスワードで testuser に切り替えてみます。
su testuser

間違ったパスワードを入力します。次のようなエラーメッセージが表示されます。

su: Authentication failure
  1. 存在しないユーザーに切り替えてみます。
su nonexistentuser

次のようなエラーメッセージが表示されます。

su: user nonexistentuser does not exist

認証失敗の一般的な原因

1. 間違ったパスワード

認証失敗の最も一般的な原因は、単に間違ったパスワードを入力することです。これは、次のような理由で発生する可能性があります。

  • タイプミス
  • Caps Lock が有効になっている
  • パスワードを忘れた

2. アカウントの制限

一部のアカウントは、ログインを防止するように構成されているか、パスワードの有効期限が切れている可能性があります。

これを実証するために、テストユーザーを変更してみましょう。

sudo passwd -l testuser

これにより、testuser のパスワードがロックされます。次に試してください。

su testuser

正しいパスワードを入力しても、認証失敗が表示されます。

次のコマンドでアカウントのロックを解除します。

sudo passwd -u testuser

3. PAM 設定の問題

Pluggable Authentication Modules (PAM) システムは、Linux での認証を制御します。PAM 設定の問題は、su の失敗を引き起こす可能性があります。

su コマンドの PAM 設定を調べてみましょう。

cat /etc/pam.d/su

このファイルには、su コマンドに固有の PAM 設定が含まれています。次のような、アクセスを制限する可能性のある行を探します。

auth       required   pam_wheel.so

この行は、コメントアウトされていない場合、su のアクセスを wheel グループのメンバーに制限します。

4. Su バイナリの権限の問題

su コマンドのバイナリファイルは、正しく機能するために適切な権限を持っている必要があります。

ls -l $(which su)

出力は次のようになります。

-rwsr-xr-x 1 root root 71816 Apr 18  2022 /usr/bin/su

権限の s は、setuid ビットが設定されていることを示しており、プログラムが実行したユーザーではなく、所有者 (root) の権限で実行できるようになります。

5. 認証ログの確認

認証失敗のトラブルシューティングを行う場合、システムログを確認すると貴重な情報が得られます。

sudo tail /var/log/auth.log

このコマンドは、失敗した su の試みなど、最近の認証イベントを表示します。

たとえば、失敗した su の試みは、次のようなエントリを表示する場合があります。

May 10 14:23:45 ubuntu su[12345]: FAILED su for root by labex

su 認証失敗のこれらの一般的な原因を理解することで、次の手順で問題をより効果的に特定して解決できます。

Su コマンドのアクセス制御の設定

Linux は、su コマンドを使用できるユーザーを制御するためのいくつかのメカニズムを提供します。このステップでは、セキュリティを強化するために、これらのアクセス制御を設定する方法を探ります。

PAM 設定の理解

Pluggable Authentication Modules (PAM) システムは、Linux での認証を担当します。su コマンドの設定は、/etc/pam.d/su ファイルに保存されています。

このファイルを詳しく調べてみましょう。

cat /etc/pam.d/su

このファイルには、認証の実行方法を制御するさまざまなディレクティブが含まれています。確認すべき重要な行の 1 つは次のとおりです。

auth       required   pam_wheel.so

この行がコメントアウトされていない場合 ( # で始まっていない場合)、su のアクセスを wheel グループのメンバーに制限します。

Su のアクセスを特定のグループに制限する

su を使用して root に切り替えることを、特定のグループのメンバーに制限できます。これは一般的なセキュリティ対策です。

まず、sugroup という新しいグループを作成しましょう。

sudo groupadd sugroup

次に、テストユーザーをこのグループに追加します。

sudo usermod -aG sugroup testuser

次に、PAM 設定を変更して、su のアクセスをこのグループのメンバーに制限する必要があります。

sudo cp /etc/pam.d/su /etc/pam.d/su.bak

次に、nano エディターで PAM 設定ファイルを開きます。

sudo nano /etc/pam.d/su

次のような行を探します。

## auth       required   pam_wheel.so

この行のコメントを解除し (先頭の # を削除)、wheel の代わりに sugroup を使用するように変更します。

auth       required   pam_wheel.so group=sugroup

Ctrl+O を押してファイルを保存し、Ctrl+X を押して nano を終了します。

設定のテスト

sugroup に属していないユーザーとして su を使用しようとすることで、設定をテストしてみましょう。

まず、別のテストユーザーを作成します。

sudo adduser testuser2

プロンプトが表示されたら、必要な情報を入力します。

次に、testuser2 を使用して root ユーザーに切り替えてみます。

su - testuser2

プロンプトが表示されたら、testuser2 のパスワードを入力します。

次に、root ユーザーに切り替えてみます。

su -

正しい root パスワードを入力しても、認証失敗メッセージが表示されるはずです。これは、testuser2 が sugroup のメンバーではないためです。

次に、元のユーザーに戻ります。

exit

そして、sugroup のメンバーである testuser で su を使用してみます。

su - testuser

プロンプトが表示されたら、testuser のパスワードを入力します。

次に、root ユーザーに切り替えてみます。

su -

正しい root パスワードを入力すると、root ユーザーに正常に切り替えることができるはずです。

変更の元に戻す

このラボの残りの部分を完了するために、PAM 設定への変更を元に戻しましょう。

sudo cp /etc/pam.d/su.bak /etc/pam.d/su

この設定により、su コマンドを使用して root ユーザーに切り替えることができるユーザーを制御し、システムのセキュリティを強化できます。

Su 認証失敗のトラブルシューティングと解決

su 認証失敗の一般的な原因とアクセス制御の設定方法を理解したので、これらの失敗のトラブルシューティングと解決に焦点を当てましょう。

認証失敗の診断

su 認証失敗が発生した場合は、次の体系的な手順に従って問題を診断します。

手順 1: エラーメッセージの確認

エラーメッセージは、失敗の性質に関する貴重な手がかりを提供できます。一般的なエラーメッセージには以下が含まれます。

  • su: Authentication failure - 通常、間違ったパスワードを示します。
  • su: user username does not exist - 指定されたユーザーアカウントが存在しません。
  • su: permission denied - アクセス制御の制限により、操作が妨げられています。

手順 2: ユーザーアカウントの確認

ターゲットユーザーアカウントが存在し、ロックされていないことを確認します。

grep testuser /etc/passwd

これにより、パスワードファイルに testuser のエントリが表示され、アカウントが存在することが確認されます。

アカウントがロックされているかどうかを確認します。

sudo passwd -S testuser

出力には、アカウントのステータスが含まれます。「L」(ロック)と表示されている場合、アカウントはロックされています。

手順 3: アクセス制御の制限の確認

前の手順で学習したように、PAM 設定は su のアクセスを制限できます。そのような制限がないか確認します。

grep -v "^#" /etc/pam.d/su | grep pam_wheel

これが pam_wheel.so を含む行を返す場合、su へのアクセスは特定のグループのメンバーに制限されている可能性があります。

手順 4: システムログの確認

システムログは、認証失敗に関する詳細な情報を提供できます。

sudo tail -n 20 /var/log/auth.log

su の失敗に関連するエントリを探します。これにより、追加のコンテキストが提供される場合があります。

一般的な Su 認証失敗の解決

次に、一般的な su 認証失敗と、それらを解決する方法について説明します。

1. 間違ったパスワード

正しいパスワードを入力しても認証失敗が発生する場合は、パスワードをリセットする必要がある場合があります。

sudo passwd testuser

プロンプトが表示されたら、testuser の新しいパスワードを入力します。

2. アカウントがロックされている

アカウントがロックされている場合は、ロックを解除します。

sudo passwd -u testuser

3. アクセス制御の制限

アクセス制御の制限により su へのアクセスが妨げられている場合は、次のいずれかを実行できます。

a. ユーザーを必要なグループに追加します。

sudo usermod -aG sugroup testuser2

これにより、testuser2 が sugroup に追加されます。

b. PAM 設定の関連行をコメントアウトして、制限を一時的に無効にします。

sudo sed -i 's/^auth\s\+required\s\+pam_wheel.so/#&/' /etc/pam.d/su

このコマンドは、su PAM 設定で pam_wheel.so を含む行をコメントアウトします。

4. ファイル権限の問題

su バイナリに誤った権限がある場合は、修正します。

sudo chmod u+s $(which su)

これにより、su バイナリに setuid ビットが設定されていることが保証されます。

修正のテスト

修正を適用した後、su 認証が正しく機能するかテストします。

su - testuser

プロンプトが表示されたら、testuser のパスワードを入力します。成功した場合、testuser としてログインしているはずです。

root ユーザーに切り替えてみます。

su -

root パスワードがあり、アクセス制御の制限が適切に処理されている場合は、root ユーザーに正常に切り替えることができるはずです。

これらのトラブルシューティング手順と修正は、最も一般的な su 認証失敗に対処します。これらの問題を体系的に診断して解決することにより、システムで su コマンドが正しく機能するようにすることができます。

安全な Su の使用のためのベストプラクティス

この最終ステップでは、su コマンドを安全に使用するためのベストプラクティスを探ります。これらのプラクティスに従うことで、管理タスクを効果的に実行できるようにしながら、セキュリティリスクを最小限に抑えることができます。

可能であれば Su の代わりに Sudo を使用する

sudo コマンドは、一般的に su よりも安全であると考えられています。その理由は次のとおりです。

  • よりきめ細かい権限制御が可能
  • 特権で実行されたコマンドをログに記録する
  • root パスワードを共有する必要がない

su の代わりに sudo を使用する例:

## Instead of:
su -
## Then entering commands as root

## Use:
sudo command

この例を試してください。

sudo ls /root

これは、root ユーザーに切り替えることなく、root 権限で ls コマンドを実行します。

Sudo アクセスを適切に設定する

必要な権限のみを付与するように sudo が正しく設定されていることを確認します。

sudo visudo

これにより、安全なエディターで sudoers ファイルが開きます。ファイルには、次のようなエントリが含まれている必要があります。

## User privilege specification
root    ALL=(ALL:ALL) ALL

## Members of the sudo group may gain root privileges
%sudo   ALL=(ALL:ALL) ALL

変更を加えることなく終了するには、Ctrl+X を押します。

直接 root ログインを制限する

root としての直接ログイン、特に SSH 経由でのログインを推奨しません。代わりに、ユーザーは通常の自分のアカウントでログインし、必要に応じて su または sudo を使用する必要があります。

SSH 経由での直接 root ログインが無効になっているかどうかを確認します。

grep "PermitRootLogin" /etc/ssh/sshd_config

これが PermitRootLogin no を返す場合、直接 root ログインは適切に無効になっています。

強力なパスワードポリシーを実装する

root パスワードと su アクセスを持つユーザーのパスワードが強力であることを確認します。

sudo apt-get install -y libpam-pwquality

これにより、パスワード品質チェック用の PAM モジュールがインストールされます。

PAM 設定を編集して、パスワードポリシーを設定します。

sudo nano /etc/pam.d/common-password

pam_pwquality.so を含む行を探し、次のような適切なパラメーターがあることを確認します。

password requisite pam_pwquality.so retry=3 minlen=12 difok=3

設定を確認しているだけなので、変更を加えることなく終了するには、Ctrl+X を押します。

Su の使用状況を定期的に監査する

ログを確認して、su の使用状況を監視します。

sudo grep "su:" /var/log/auth.log | tail -n 10

これは、最近の su の試行(成功と失敗の両方)を示しています。

攻撃の可能性がある複数の su 試行の失敗に対して、自動アラートを設定することを検討してください。

ダッシュオプション付きで Su を使用する

su を使用して別のユーザー、特に root に切り替える場合は、クリーンな環境を取得するためにダッシュ(-)オプションを使用します。

su - username

これにより、ターゲットユーザーの環境変数を持つログインシェルが提供され、元のユーザーの環境を継承することによって発生する可能性のある問題を回避し、より安全になります。

実践セッション - 安全な Su の使用

これらのベストプラクティスを実践してみましょう。

  1. root になってからコマンドを実行するために su - を使用する代わりに、sudo を使用します。
## Instead of:
## su -
## cat /etc/shadow

## Use:
sudo cat /etc/shadow
  1. クリーンな環境で testuser に切り替えます。
su - testuser
  1. 元のユーザーに戻ります。
exit
  1. su の使用状況について認証ログを確認します。
sudo grep "su:" /var/log/auth.log | tail -n 5

これらのベストプラクティスに従うことで、su コマンドを安全に使用し、システムへの潜在的なセキュリティリスクを最小限に抑えることができます。

まとめ

この実験では、Linux の su コマンドについて調査し、一般的な認証失敗のトラブルシューティング方法を学びました。以下をカバーしました。

  1. su コマンドの基本的な使用法とその仕組みの理解
  2. 間違ったパスワード、アカウント制限、PAM 設定の問題など、su 認証失敗の一般的な原因の特定
  3. セキュリティを強化するための su コマンドのアクセス制御の設定
  4. 体系的な診断による su 認証失敗のトラブルシューティングと解決
  5. 可能な場合は sudo を使用し、強力なパスワードポリシーを設定し、su の使用状況を定期的に監査するなど、安全な su の使用のためのベストプラクティスの実装

これらのテクニックとベストプラクティスを適用することで、Linux システムのセキュリティを維持しながら、su コマンドが正しく機能するようにすることができます。適切な認証管理は、システム管理とセキュリティの重要な側面であることを忘れないでください。