はじめに
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 のユーザー管理と権限制御に欠かせない手法を学びました。次の概念と操作を実際に確認しました。
ユーザーの作成:
adduserコマンドで新しいユーザーアカウントを作成する方法を学びました。sudo 権限の付与:ユーザーを sudo グループに追加し、管理者権限を与える方法を確認しました。
sudo アクセスの制限:sudoers ファイルを使ってユーザーが実行できるコマンドを限定し、最小権限の原則を実践しました。
sudo のログと監視:sudo の操作が記録される仕組みと、セキュリティのためにログを監視する重要性を確認しました。
sudo アクセスの管理:必要に応じてユーザーの sudo 権限を付与したり、削除したりする方法を学びました。
これらは Linux のシステム管理とセキュリティに欠かせないスキルです。ユーザー権限を適切に管理すれば、システムの完全性やセキュリティを損なうことなく、各ユーザーが必要なリソースにアクセスできる安全なシステムを維持できます。



