Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステムにおいて、ユーザーを個別に管理するだけでなく、複数のユーザーをまとめる「グループ」の概念は非常に重要です。グループを使うことで、ファイルやディレクトリへのアクセス権限を一括で管理できるようになり、システム運用の効率化とセキュリティ向上に貢献します。
Linuxユーザーは必ず「プライマリグループ」に所属し、さらに必要に応じて複数の「サブグループ(補助グループ)」にも追加できます。プライマリグループはユーザー作成時に自動で割り当てられ、ユーザーの既定のグループとなります。サブグループは、ユーザーが複数のプロジェクトやタスクに関わる際に、それぞれのグループ権限を利用できるようにするために使われます。この記事では、Linuxにおけるユーザーグループの基本的な管理方法について解説します。グループの作成、削除、そしてユーザーのグループへの追加・削除といった操作を通じて、ファイルやディレクトリの権限制御をより柔軟に行うための知識を習得しましょう。
新しいグループを作成するコマンドはgroupaddです。特定の目的のために複数のユーザーに共通の権限を与えたい場合に利用します。
sudo groupadd new_group
groupadd new_group: new_groupという名前の新しいグループを作成します。sudo: グループの作成には管理者権限が必要です。この状況で困ったらコレ: 新しいグループを作成しようとして「groupadd: group 'new_group' already exists」のようなエラーが出た場合、そのグループ名は既に存在しています。別の名前を検討するか、既存グループを利用できないか確認しましょう。
不要になったグループはgroupdelコマンドで削除できます。
sudo groupdel old_group
groupdel old_group: old_groupという名前のグループを削除します。sudo: グループの削除にも管理者権限が必要です。この状況で困ったらコレ: グループを削除しようとして「groupdel: cannot remove the primary group of user 'username'」のようなエラーが出た場合、そのグループが特定のユーザーのプライマリグループとして設定されています。プライマリグループになっているグループは、そのユーザーが他のグループに属していない限り削除できません。事前にユーザーのプライマリグループを変更するか、そのユーザーを削除する必要があります。
既存のユーザーを特定のグループに追加するにはusermodコマンドを使用します。
sudo usermod -aG existing_group username
usermod: ユーザー情報を変更するコマンドです。-a: ユーザーを既存のグループに追加します。(appendの意味)-G: 指定したグループに追加します。(大文字のGであることに注意)existing_group: ユーザーを追加したいグループ名です。username: グループに追加したいユーザー名です。複数のグループに同時に追加する例
sudo usermod -aG group1,group2,group3 username
複数のグループをカンマ区切りで指定して、一度に追加できます。
この状況で困ったらコレ: ユーザーをグループに追加したのに、そのユーザーでログインし直しても権限が反映されないことがあります。これは、シェルがグループ情報を再読み込みしていないためです。ユーザーをグループに追加した後は、一度そのユーザーでログアウトしてから再度ログインし直すか、newgrpコマンドを使ってシェルに新しいグループ情報を適用させる必要があります。
ユーザーをグループから削除するにはgpasswdコマンドを使用するのが一般的です。
sudo gpasswd -d username existing_group
gpasswd: グループパスワードを管理するコマンドですが、ユーザーのグループ所属の管理にも使えます。-d: 指定したユーザーをグループから削除します。(deleteの意味)username: グループから削除したいユーザー名です。existing_group: ユーザーを削除したいグループ名です。ユーザーのプライマリグループを変更するには、usermodコマンドに-g(小文字のg)オプションを使用します。
sudo usermod -g new_primary_group username
new_primary_group: 新しく設定したいプライマリグループ名です。特定のユーザーが現在どのグループに所属しているかを確認するには、groupsコマンドを使います。
groups username
指定したユーザーが所属しているグループの一覧を表示します。usernameを省略してgroupsとだけ入力すると、現在ログインしている自分自身のグループ一覧を確認できます。
システムに登録されている全てのグループを一覧表示するには、getent groupコマンドが便利です。
getent group
このコマンドは/etc/groupファイルの内容を表示するだけでなく、NISなどのネームサービスからもグループ情報を取得します。
chgrpでグループ権限を活用する例複数のユーザーで共通のファイルやディレクトリにアクセス・編集させたい場合、グループ権限を適切に設定することで効率的に管理できます。例えば、特定のプロジェクト用ディレクトリ/projectに複数ユーザーで書き込みを許可する場合、共通グループを作成し、そのディレクトリの所有グループを切り替えることで実現できます。
sudo chgrp projectgroup /project
sudo chmod 2775 /project
sudo chgrp projectgroup /project: /projectディレクトリの所有グループをprojectgroupに変更します。sudo chmod 2775 /project: ディレクトリのパーミッションを設定します。2775の先頭の2はsetgidビットを表します。このビットが立っているディレクトリ内で新規作成されたファイルやディレクトリは、自動的に親ディレクトリと同じグループ所有となります。これにより、メンバー間で簡単にファイルを共有できるようになります。ls -lでファイルのパーミッションを確認し、必要であればchmodコマンドでグループに対する書き込み権限(例: chmod g+w filename または chmod 664 filename など)を付与してください。また、ユーザーが再ログインしているか、newgrpコマンドを実行しているかも確認しましょう。/etc/groupファイルを直接編集してもいいですか?基本的にユーザーグループの管理はgroupadd、groupdel、usermod、gpasswdといったコマンドを通じて行うことを強く推奨します。 コマンドは整合性を保ちながら変更を適用しますが、手動編集ではミスによるシステム不整合のリスクがあります。やむを得ず手動で編集する場合は、必ずバックアップを取り、安全なエディタであるvigrコマンド(visudoのグループ版)を使用しましょう。
sudo cp /etc/group /etc/group.bak # バックアップ
sudo vigr # 安全なグループファイル編集コマンドLinuxのグループ管理は、複数のユーザーに対して効率的にアクセス権限を設定し、システムセキュリティを確保するための重要な要素です。groupaddでグループを作成し、groupdelで削除、そしてusermodやgpasswdを使ってユーザーをグループに追加・削除することで、ファイルやディレクトリへのアクセスを細かく制御できるようになります。
また、groupsコマンドで現在の所属グループを確認したり、chgrpとchmodを組み合わせて具体的な権限設定を行うことで、より実践的なグループ管理が可能になります。これらのコマンドと概念を使いこなすことで、より堅牢で管理しやすいLinux環境を構築できます。
この記事がLinuxのユーザーグループ管理について理解を深める一助となれば幸いです。ご覧いただきありがとうございました。次回は、Linux環境変数の設定について詳しく解説します。