Linuxのユーザーグループとファイル権限

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

はじめに

Linuxはマルチユーザーオペレーティングシステムです。つまり、複数のユーザーが同時に同じLinuxコンピュータを使用でき、それぞれが独自のプライベートスペースやファイルを持ちつつ、システムリソースを共有することができます。このラボでは、システム管理とセキュリティにおいて不可欠な、Linuxのユーザー管理とファイル権限の基本について学びます。

学習は、ユーザーの確認、ユーザーの作成、グループの管理、そしてファイル所有権と権限の変更という実践的な順序で進めます。Linuxの管理コマンドを初めて使用する場合は、各コマンドを一つずつ実行し、出力結果を例と比較しながら進めてください。

現在のユーザー情報の確認

Linuxでは、各ユーザーに固有のユーザー名が割り当てられています。まずは、現在ログインしているユーザーを確認することから始めましょう。

ターミナルを開き、以下のコマンドを入力してください。

whoami

whoami コマンドは、現在のユーザー名を表示するためのシンプルなツールです。

以下のような出力が表示されるはずです。

labex:project/ $ whoami
labex

これは、現在「labex」というユーザーとしてログインしていることを示しています。

新しいユーザーの作成

次に、新しいユーザーを作成します。Linuxで新しいユーザーを作成するには管理者権限が必要です。この権限を得るために sudo コマンドを使用します。

sudo は「Superuser Do」の略です。通常のユーザーがスーパーユーザー(またはrootユーザー)としてコマンドを実行できるようにします。

新しいユーザーを作成する前に、プライマリグループの概念について説明します。Linuxでは、すべてのユーザーがいずれかのプライマリグループに所属しており、複数のセカンダリグループにも所属できます。プライマリグループは、通常、そのユーザーが作成したファイルのグループ所有者として使用されます。

adduser で新しいユーザーを作成すると、そのユーザー名と同じ名前のプライマリグループが自動的に作成されます。これは「ユーザープライベートグループ(UPG)」スキームと呼ばれます。

以下のコマンドを入力して、「jack」という名前の新しいユーザーを作成してください。

sudo adduser jack

このコマンドは以下の処理を行います:

  1. 「jack」という新しいユーザーを作成する
  2. 「jack」という新しいグループを作成する(プライマリグループ)
  3. ユーザー「jack」をプライマリグループ「jack」に追加する
  4. /home/jack にjackのホームディレクトリを作成する

パスワードの設定と、いくつかの追加情報の入力を求められます。パスワードは簡単なもの(「password」など)を設定し、その他の情報はEnterキーを押してデフォルト値を使用してください。

注意: パスワードを入力する際、画面には何も表示されませんが、これはセキュリティ上の正常な動作です。そのままパスワードを入力してEnterキーを押してください。

ユーザー作成後、jackのホームディレクトリが作成されたか確認し、jackのプライマリグループを確認しましょう:

ls /home
id jack

id コマンドは、jackのユーザーID(UID)、プライマリグループID(GID)、および所属しているセカンダリグループを表示します。

ユーザーグループの確認

Linuxにおいて、ユーザーグループは権限管理のために複数のユーザーを整理する手段です。各ユーザーにはプライマリグループがあり、複数のセカンダリグループに所属できます。現在ログインしているユーザーがどのグループに所属しているか確認してみましょう:

id labex

以下のような出力が表示されるはずです:

uid=5000(labex) gid=5000(labex) groups=5000(labex),27(sudo),121(ssl-cert),5002(public)

これは以下を示しています:

  • ユーザー labex のユーザーID(UID)は5000
  • labex のプライマリグループ名も labex で、グループID(GID)は5000
  • labexsudossl-certpublic を含む複数のセカンダリグループに所属している

次に、システム上のすべてのグループを表示してみましょう:

cat /etc/group | sort

cat コマンドはファイルの内容を表示し、/etc/group はグループ情報が保存されている場所です。| sort は出力をアルファベット順に並べ替えます。

labex に関連するグループのみを表示するには、以下を使用します:

grep "labex" /etc/group

grep は強力な検索ツールです。このコマンドは、グループファイル内で「labex」を含む行を検索します。

新しいグループの作成とユーザーの追加

「developers」という新しいグループを作成し、新しいユーザー「jack」をこのグループに追加してみましょう。

まず、新しいグループを作成します:

sudo groupadd developers

次に、jackをdevelopersグループに追加します:

sudo usermod -aG developers jack

usermod コマンドはユーザーアカウントを変更します。-aG オプションは、ユーザーを補助グループに追加します。

jackがdevelopersグループのメンバーになったことを確認するには、以下を使用します:

groups jack

jackのグループリストの中に「developers」が表示されているはずです。

sudoグループへのユーザー追加

ユーザー jack を作成したので、sudo グループに追加してsudo権限を与えましょう。その前に、なぜこれが必要なのかを理解しておきましょう。

ユーザーをsudoグループに追加すると、スーパーユーザーまたはroot権限でコマンドを実行できるようになります。これにはいくつかの理由があります:

  1. セキュリティ:rootユーザーとしてログインせずに管理タスクを実行できるため、セキュリティリスクを軽減できます。
  2. 説明責任:ユーザーがsudoを使用すると、その操作がログに記録され、管理操作の監査証跡が残ります。
  3. 利便性:時折発生する管理タスクのために、rootユーザーアカウントに切り替える必要がなくなります。
  4. 細かな制御:sudo設定をカスタマイズして、特定のユーザーが特定のコマンドのみを昇格権限で実行できるように制限できます。

jackをsudoグループに追加するには、以下のコマンドを使用します:

sudo usermod -aG sudo jack

このコマンドは usermod を使用してユーザーアカウントを変更します。-aG オプションは「グループに追加(append to group)」を意味し、他のグループから削除することなくjackをsudoグループに追加します。

jackをsudoグループに追加した後、グループ所属を確認できます:

groups jack

jackのグループリストに sudo が表示されているはずです。

jackをsudoグループに追加することで、システム上で管理タスクを実行する権限を与えました。しかし、「大きな力には大きな責任が伴う」ことを忘れないでください。sudo権限を持つユーザーは信頼できる必要があり、システム全体に影響を与える可能性があるため、自分の操作が及ぼす影響を理解しておく必要があります。

ファイル権限と所有権の理解と操作

Linuxにおいて、ファイル権限と所有権はシステムセキュリティにとって極めて重要です。これらの概念を探求し、操作方法を学びましょう。

  1. まず、/home ディレクトリの現在の権限を確認します:
ls -l /home

注意: ls -l の2文字目は数字の 1 ではなく、小文字の l (エル) です。

以下のような出力が表示されます:

total 8
drwxr-xr-x 2 jack  jack  4096 Jul 30 10:00 jack
drwxr-xr-x 5 labex labex 4096 Jul 30 09:55 labex

この意味を分解してみましょう:

  • 最初の文字はファイルタイプを示します(d はディレクトリ、- は通常のファイル)
  • 次の9文字は、所有者、グループ、その他の順で権限を表します
  • r は読み取り権限、w は書き込み権限、x は実行権限を意味します
  • これらの文字の後のユーザー名はファイル所有者、その次がグループ所有者です
  1. 次に、新しいファイルを作成し、その所有権を変更してみましょう:
touch /home/labex/testfile
ls -l /home/labex/testfile
sudo chown jack:jack /home/labex/testfile
ls -l /home/labex/testfile

touch コマンドは空のファイルを作成します。最初はlabexが所有者です。次に chown を使用して、ユーザーとグループの両方の所有権をjackに変更します。

なぜ所有権を変更するのでしょうか?Linuxでは、ファイルの所有者はそのファイルに対して特別な権限を持ちます。所有権を変更することで、jackにこのファイルの完全な制御権を与えています。

  1. 最後に、ファイルの権限を変更します:
sudo chmod 750 /home/labex/testfile
ls -l /home/labex/testfile

chmod コマンドはファイルの権限を変更します。数値の750は、権限を設定するための省略形です:

  • 7 (所有者): 読み取り(4) + 書き込み(2) + 実行(1) = 7
  • 5 (グループ): 読み取り(4) + 実行(1) = 5
  • 0 (その他): 権限なし

この権限設定の意味は以下の通りです:

  • 所有者 (jack) はファイルを読み取り、書き込み、実行できる
  • jackグループのメンバーはファイルを読み取り、実行できる
  • その他のユーザーはファイルに対して何の権限も持たない

なぜこのような権限を設定するのでしょうか?これは、所有者に完全なアクセス権を与え、グループには限定的なアクセス権を与え、それ以外のユーザーのアクセスを制限する一般的な設定です。これはユーザビリティとセキュリティのバランスを取るためのものです。

ファイル権限と所有権を理解することは、Linuxにおいて非常に重要です。これにより、誰がファイルを読み取り、変更し、実行できるかを制御でき、システムセキュリティとユーザープライバシーの基本となります。Linuxを使い続ける中で、ファイルやディレクトリへのアクセスを管理するためにこれらのコマンドを頻繁に使用することになるでしょう。

まとめ

おめでとうございます!「Linuxのユーザーグループとファイル権限」ラボを完了しました。以下の内容を学びました:

  1. ユーザー情報の確認方法
  2. 新しいユーザーの作成とプライマリグループの理解
  3. ユーザーグループの確認と変更
  4. 新しいグループの作成とユーザーの追加
  5. ユーザーへのsudo権限の付与
  6. ファイル権限の確認と理解
  7. ファイル所有権の変更
  8. ファイル権限の変更

これらのスキルは、Linux環境でユーザーを管理し、ファイルを保護するための基本です。Linuxの学習を進める上で、これらの概念はシステム管理とセキュリティにおいて不可欠なものとなります。