Linux の権限付与

LinuxBeginner

はじめに

Linux システムでは、ユーザー権限とアクセス制御の管理が、システム管理とセキュリティの基本です。sudo コマンドは「superuser do」の略で、許可されたユーザーがスーパーユーザー(通常は root アカウント)の権限でコマンドを実行できるようにします。

この実験では、Linux 環境でユーザーに権限を付与したり、制限したりする方法を学びます。ユーザーを sudo グループに追加して管理タスクを実行できるようにする方法と、実行できるコマンドを限定する方法を確認します。機密性の高い操作へのアクセスを適切に制御し、安全なシステムを維持するために欠かせないスキルです。

ユーザー管理と sudo の基本を理解する

このステップでは、Linux のユーザー管理と sudo コマンドの基本を学びます。新しいユーザーを作成し、そのユーザーに管理者権限を付与する方法を確認します。

sudo とは

sudo コマンドを使うと、許可されたユーザーが別のユーザー(通常はスーパーユーザーの root)の権限でコマンドを実行できます。root ユーザーとしてログインせずに管理タスクを実行できるため、セキュリティ上のベストプラクティスとされています。

新しいユーザーを作成する

まず、新しいユーザーアカウントを作成します。ターミナルを開き、次のコマンドを実行してください。

sudo adduser trusted_advisor

新しいユーザーのパスワードと、任意の情報を入力するよう求められます。この実験では、password123 のような簡単なパスワードを設定し、ほかの項目は Enter キーを押して空欄のままにしてください。

次のような出力が表示されます。

Adding user `trusted_advisor' ...
Adding new group `trusted_advisor' (1001) ...
Adding new user `trusted_advisor' (1001) with group `trusted_advisor' ...
Creating home directory `/home/trusted_advisor' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for trusted_advisor
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

ユーザー情報を確認する

ユーザーが正しく作成されたことを確認するには、/etc/passwd ファイルの内容を調べます。

grep trusted_advisor /etc/passwd

ユーザー情報を含む行が表示されれば、ユーザーが作成されています。

sudo 権限を付与する

ユーザーに sudo 権限を付与するには、そのユーザーを sudo グループに追加します。Ubuntu では、sudo グループのメンバーが sudo コマンドを使用できます。次のコマンドを実行してください。

sudo usermod -aG sudo trusted_advisor

このコマンドは、ユーザー trusted_advisor を sudo グループに追加します。-a は既存のグループ設定を維持して追加する指定で、-G sudo は追加先のグループを指定します。これで、このユーザーは管理者権限でコマンドを実行できるようになります。

sudo アクセスを確認する

新しいユーザーが sudo を使えることを確認するため、そのユーザーアカウントに切り替え、通常は root ユーザーだけがアクセスできる /root ディレクトリの内容を一覧表示します。

su - trusted_advisor

パスワードを求められたら、このユーザーに設定したパスワードを入力してください。続けて、次のコマンドを実行します。

sudo ls /root

初めて sudo を使うときは、もう一度パスワードを求められます。入力後に /root ディレクトリの内容が表示されれば、このユーザーに sudo 権限が付与されています。

最後に、trusted_advisor のユーザーセッションを終了し、元のユーザーに戻ります。

exit

sudoers ファイルで sudo アクセスを制限する

このステップでは、sudoers ファイルを使って、ユーザーが sudo で実行できるコマンドを制限する方法を学びます。これは最小権限の原則に基づく設定です。この原則では、ユーザーにはタスクの実行に必要な最小限の権限だけを与えます。

sudoers ファイルを理解する

/etc/sudoers ファイルは、sudo コマンドを使用できるユーザーと、そのユーザーが実行できるコマンドを管理します。構文エラーがあるとシステムにアクセスできなくなるおそれがあるため、通常のテキストエディターでこのファイルを直接編集しないでください。保存前に構文エラーをチェックする visudo コマンドを必ず使います。

グループによる広範なアクセス権を削除する

一致するルールの sudo 権限は組み合わされます。特定のコマンドだけを許可するルールを追加しても、sudo グループから与えられたすべてのアクセス権は取り消されません。最初に、元の labex セッションから広範なアクセス権を削除してください。

sudo deluser trusted_advisor sudo

グループの変更が反映されるよう、テスト時には新しく su - trusted_advisor セッションを開始してください。

sudoers ファイルを編集する

sudoers ファイルを安全に編集するには、visudo コマンドを使います。

sudo EDITOR=vim visudo

このコマンドは Vim を明示的に開くため、以降の編集と保存のキー操作は Vim に対応しています。G を押してファイルの最終行に移動し、続けて o を押して新しい行を挿入します。

sudoers の構文を理解する

sudoers ファイルに記述する sudo ルールの基本的な構文は次のとおりです。

user_or_group    host=(run_as_user:run_as_group)    NOPASSWD: commands

各項目の意味は次のとおりです。

  • user_or_group:このルールを適用するユーザーまたはグループ
  • host:このルールを適用するホスト名(通常は ALL)
  • run_as_user:コマンドを実行するユーザー(root のみなら root、任意のユーザーなら ALL)
  • run_as_group:コマンドを実行するグループ(省略可能)
  • NOPASSWD:パスワードを入力せずにコマンドを実行できるようにする任意のタグ
  • commands:sudo で実行できる特定のコマンド

sudo アクセスを制限する

ファイルの末尾まで移動し、trusted_advisor が cp と mv コマンドだけをパスワードなしで実行できるよう、次の行を追加してください。

trusted_advisor ALL=(ALL) NOPASSWD: /bin/cp, /bin/mv

また、このコンテナには /var/log/auth.log がないため、コンテナ専用の sudo ログを有効にする次の行も追加してください。

Defaults logfile="/var/log/sudo.log"

Esc を押し、:wq と入力してから Enter キーを押すと、保存して Vim を終了します。visudo が構文エラーを報告した場合は、e を押して編集画面に戻り、修正してください。変更を破棄して Vim を終了するには、Esc を押し、:q! と入力してから Enter キーを押します。

これはコマンドの一致判定を確認する演習です。cp や mv に制限のない root アクセスを与えると、機密ファイルを上書きできてしまいます。本番環境で安全な制限方法ではありません。

制限した sudo アクセスをテストする

次に、sudo アクセスが想定どおりに制限されているかテストします。まず、labex の作業ディレクトリに戻り、テスト用ファイルを作成してください。

cd /home/labex/project
echo "This is a test file" > important_file.txt

次に、trusted_advisor ユーザーに切り替えます。

su - trusted_advisor

パスワードを求められたら入力してください。

ファイルを root ディレクトリにコピーします。この操作は許可されるはずです。

sudo cp /home/labex/project/important_file.txt /root/

パスワードを求められずにコマンドが成功すれば、許可ルールが適用されています。

次に、許可リストにない cat などのコマンドを実行してみます。

sudo -n cat /root/important_file.txt

cat は許可されていないため、このコマンドは失敗しなければなりません。-n はパスワード入力を求めるプロンプトを表示しない指定です。拒否時には、パスワードが必要である、またはコマンドが許可されていないというメッセージが表示される場合があります。ファイルの内容が表示されてはいけません。

ls も許可されたコマンドではないため、コピーを確認する前に制限されたユーザーセッションを終了してください。

exit

labex として、ファイルがコピーされたことを確認します。

sudo ls /root/

出力に important_file.txt が表示されれば、ファイルはコピーされています。

テスト用ファイルを削除する

後片付けとして、テスト用ファイルを削除してください。

sudo rm /home/labex/project/important_file.txt /root/important_file.txt

sudo のログとセキュリティ上の注意点を理解する

このステップでは、sudo のログとセキュリティ上のベストプラクティスを学びます。セキュリティ監視や監査のために、sudo の使用状況を記録して確認することが重要です。

sudo のログ

ユーザーが sudo でコマンドを実行すると、その操作がログに記録されます。ログは監査証跡となり、セキュリティ監視やトラブルシューティングに役立ちます。

システムのログサービスを使う Ubuntu 環境では、通常 /var/log/auth.log に記録されます。このコンテナでは、ステップ 2 で設定した専用ログを使います。labex として、最近の sudo 操作を確認してください。

sudo tail -n 10 /var/log/sudo.log

このコマンドは、sudo に関するログの末尾 10 件を表示します。出力には、タイムスタンプ、ユーザー名、sudo で実行されたコマンドが含まれます。

sudo のセキュリティに関するベストプラクティス

sudo 権限を管理する際は、次の点を守ってください。

  • 最小権限の原則:ユーザーには、タスクの実行に必要な最小限の権限だけを付与します。

  • コマンドを個別に指定する:sudo の全権限を付与するのではなく、ユーザーが実行できるコマンドを明確に指定します。

  • パスワードを必須にする:機密性の高い操作では、sudo の使用時にユーザーがパスワードを入力するようにします。

  • 定期的に監査する:sudo ログと sudoers ファイルを定期的に確認し、設定が適切であることを確かめます。

  • 不要なアクセス権を削除する:ユーザーに管理者権限が不要になったら、速やかに sudo グループから削除します。

sudo アクセスを削除する

ステップ 2 で、trusted_advisor をすでに sudo グループから削除しました。残っているコマンド別のアクセス権も取り消すため、該当するルールを削除してください。

sudo EDITOR=vim visudo

Esc を押し、/^trusted_advisor と入力してから Enter キーを押すと、該当するルールを検索できます。dd を押して、ルールの行全体を削除してください。

trusted_advisor ALL=(ALL) NOPASSWD: /bin/cp, /bin/mv

Defaults logfile の行は残してください。:wq と入力してから Enter キーを押し、保存して終了します。グループへの所属を確認してください。

groups trusted_advisor

出力に sudo が含まれていなければ、グループから削除されています。

sudo アクセスが取り消されたことをテストする

このユーザーが sudo でコマンドを実行できなくなったことを確認します。

su - trusted_advisor

パスワードを求められたら入力してください。

sudo を使ってコマンドを実行してみます。

sudo -n ls /root

trusted_advisor is not in the sudoers file と表示されれば、sudo アクセスは取り消されています。このコマンドは失敗しなければなりません。

trusted_advisor のユーザーセッションを終了します。

exit

sudo アクセスを再び付与する

この実験では、ユーザーを sudo グループに再度追加します。

sudo usermod -aG sudo trusted_advisor

ユーザーが再び sudo グループに所属していることを確認してください。

groups trusted_advisor

出力にグループ一覧の "sudo" が含まれていれば、再追加されています。

まとめ

この実験では、Linux のユーザー管理と権限制御に欠かせない手法を学びました。次の概念と操作を実際に確認しました。

  1. ユーザーの作成:adduser コマンドで新しいユーザーアカウントを作成する方法を学びました。

  2. sudo 権限の付与:ユーザーを sudo グループに追加し、管理者権限を与える方法を確認しました。

  3. sudo アクセスの制限:sudoers ファイルを使ってユーザーが実行できるコマンドを限定し、最小権限の原則を実践しました。

  4. sudo のログと監視:sudo の操作が記録される仕組みと、セキュリティのためにログを監視する重要性を確認しました。

  5. sudo アクセスの管理:必要に応じてユーザーの sudo 権限を付与したり、削除したりする方法を学びました。

これらは Linux のシステム管理とセキュリティに欠かせないスキルです。ユーザー権限を適切に管理すれば、システムの完全性やセキュリティを損なうことなく、各ユーザーが必要なリソースにアクセスできる安全なシステムを維持できます。