【ITニュース解説】Mastering Linux: User & Permission Management with a Mock Company Project
2025年09月27日に「Dev.to」が公開したITニュース「Mastering Linux: User & Permission Management with a Mock Company Project」について初心者にもわかりやすく解説しています。
ITニュース概要
Linuxのユーザー・グループ・権限管理は、ファイルへのアクセス制限とチーム協業に必須の基本スキルである。ユーザー作成、グループ割り当て、共有ディレクトリ設定、アクセス権限付与といった実践を通して、`adduser`や`chmod`など主要コマンドの使い方を学ぶ。安全なシステム構築の基礎を理解し、実務で役立つ知識が得られる。
ITニュース解説
Linuxシステム管理において、ユーザー、グループ、そしてファイルやディレクトリに対するアクセス権限(パーミッション)の管理は、非常に重要なスキルである。これは、機密情報を含むファイルに正しい人物だけがアクセスできるようにしたり、共有環境でのチームメンバー間の協業をスムーズに進めたりするために不可欠な要素だからである。本解説では、実際の企業プロジェクトを模倣したシナリオを通じて、これらの管理がいかに実践的であるかを学ぶことができる。具体的には、複数のユーザーを作成し、それらをグループに割り当て、共有ディレクトリやプロジェクトファイルへのアクセスを管理する方法を、主要なコマンドと共に掘り下げていく。
まず、Linuxシステムにおけるユーザー、グループ、パーミッションの基本概念を理解することが重要である。ユーザーとは、システムを利用する個々の人物を指し、それぞれが独自のIDとパスワードを持つ。グループとは、複数のユーザーをまとめた集合体であり、グループ単位でファイルやディレクトリへのアクセス権限を設定することで、個々のユーザーにいちいち権限を設定する手間を省き、管理を効率化する。パーミッションは、ファイルやディレクトリに対して「読み取り(r)」「書き込み(w)」「実行(x)」の3種類の権限を、それぞれ「所有者(u: user)」「グループ(g: group)」「その他(o: others)」の3つのカテゴリに分けて設定する仕組みである。これにより、誰が何に対してどのような操作を許されるのかを細かく制御できる。
プロジェクトの最初のステップは、システム内にチーム構造を構築することから始まる。具体的には、まず「開発者(devs)」と「スタッフ(staff)」という二つのグループをgroupaddコマンドを使って作成する。例えば、「sudo groupadd devs」と入力すれば、devsグループが誕生する。sudoは管理者権限でコマンドを実行するためのもので、システム設定の変更にはほぼ必須である。グループが正しく作成されたかは、getent group devsのようなコマンドで確認可能だ。次に、これらのグループに所属させるための個々のユーザーを作成する。adduserコマンドを使用し、例えば「sudo adduser alice」と入力することで、aliceというユーザーが作成され、パスワードなどの情報も同時に設定できる。ここでは、alice、bob、carol、dave、eveの5人のユーザーを作成したと仮定する。
ユーザーとグループが用意できたら、次にユーザーを適切なグループに割り当てる。usermodコマンドを-aGオプションと組み合わせて使用する。-aは「追加する(append)」、-Gは「グループ(Group)」を意味し、既存のグループにユーザーを追加する際に使う。例えば、「sudo usermod -aG devs alice」と実行すれば、aliceユーザーがdevsグループに追加される。ここでは、aliceとbobをdevsグループに、carol、dave、eveをstaffグループに割り当てるとする。割り当てが正しく行われたかは、sudo getent group devsなどのコマンドで確認可能である。
次に、チームでの協業を可能にするための「共有プロジェクトディレクトリ」を設定する。まず、「/home/company_projects」というディレクトリを、mkdir -p /home/company_projectsというコマンドで作成する。このディレクトリを真のチームワークスペースとして機能させるための重要な設定が、「SGID(Set Group ID)ビット」の適用である。これは、sudo chmod g+s /home/company_projectsというコマンドで設定する。SGIDビットがディレクトリに設定されていると、そのディレクトリ内で新たに作成されたファイルやサブディレクトリは、自動的に親ディレクトリのグループ所有権を継承するようになる。これにより、誰がファイルを作成しても、そのファイルは常にプロジェクトグループに属することになり、グループメンバー全員がアクセスしやすくなる。
さらに、この共有ディレクトリの所有者とグループを適切に設定する。sudo chown root:devs /home/company_projectsというコマンドは、ディレクトリの所有者をrootに、グループをdevsに変更する。これにより、rootユーザーがこのディレクトリの主要な管理者となり、devsグループがプロジェクトファイルの主なアクセス主体となる。そして、chmodコマンドで具体的なパーミッションを設定する。「sudo chmod u+rwx /home/company_projects」は、所有者(root)に読み取り、書き込み、実行の全ての権限を与える。同様に、「sudo chmod g+rwx /home/company_projects」は、グループ(devs)のメンバーにも読み取り、書き込み、実行の全ての権限を与える。これにより、devsグループのメンバーは、このディレクトリ内でファイルの作成、編集、削除、およびディレクトリへの出入りが自由に行える。
この設定が正しく機能するかをテストすることは不可欠である。まず、aliceユーザーとしてログインし、「/home/company_projects」ディレクトリに移動して、「touch file_from_alice.txt」というファイルを作成してみる。ls -lコマンドで確認すると、作成されたファイルの所有者はalice、グループはdevsになっているはずだ。これは、SGIDビットが設定されたディレクトリの効果で、aliceがファイルを作成したにもかかわらず、そのファイルが親ディレクトリのグループであるdevsを継承したことを示している。パーミッションも-rw-rw-r--となっており、所有者とグループメンバーは読み書きが可能であることがわかる。
次に、同じdevsグループのメンバーであるbobユーザーとしてログインし、先ほどaliceが作成したファイルを編集してみる。「echo "hello" >> file_from_alice.txt」のように追記し、catコマンドで内容を確認できれば、bobがdevsグループのメンバーとしてファイルへの書き込み権限を持っていることが証明される。一方で、staffグループに所属しdevsグループのメンバーではないcarolユーザーとしてログインし、同じディレクトリにアクセスしようとすると、「Permission denied(許可が拒否されました)」というエラーが表示されるはずだ。これは、carolがdevsグループに属していないため、devsグループに与えられたアクセス権限が適用されないことを示しており、セキュリティが適切に機能していることを意味する。
既存のファイルの所有者やグループを変更することも可能である。例えば、「sudo chown alice:devs /home/company_projects/somefile.txt」コマンドを使えば、somefile.txtの所有者をaliceに、グループをdevsに変更できる。また、ファイルやディレクトリのグループだけを変更したい場合はchgrpコマンドを使用する。「sudo chgrp staff /home/company_projects」と実行すると、/home/company_projectsディレクトリ自体のグループがdevsからstaffに変更される。この状態でcarolユーザー(staffグループのメンバー)がディレクトリ内でman.txtを作成すると、そのファイルの所有者はcarol、グループはstaffとなる。これも、ディレクトリのSGIDビットと、変更されたディレクトリのグループ設定の影響である。一方、以前にaliceが作成したfile_from_alice.txtは、作成時のグループであるdevsのままであり、既存ファイルのグループはchgrpコマンドで明示的に変更しない限り変わらないことがわかる。
これらの実践を通じて、chown、chgrp、chmodなどのコマンドが、Linuxシステムにおけるファイルやディレクトリの所有権、グループ、アクセス権限をどのように制御するかを深く理解できるだろう。特に、SGIDビットが多人数での協業においていかに便利で強力な機能であるかが明確になったはずだ。システム管理者は、これらの原則を適切に適用することで、セキュアで効率的な共同作業環境を構築し、ファイルやディレクトリに対する厳密な管理と説明責任を維持できるようになる。