グループ管理を使うとできること
Linuxでは、ユーザーアカウントをグループにまとめることで、複数人が同じファイルやディレクトリを共同利用できるようになります。たとえば、開発チームのメンバー全員が同じソースツリーを読み書きできるようにしたい場合、グループ単位でパーミッションを設定すると管理が簡潔になります。
この記事では、グループを新規作成してユーザーを追加し、共有ディレクトリにグループ権限を設定するまでの流れを順に説明します。
グループを新規作成する
groupadd コマンドで新しいグループを作成します。以下の例では devteam という名前のグループを作成しています。
sudo groupadd devteam
グループが作成されると、/etc/group にエントリが追加されます。次のコマンドで作成されたか確認できます。
getent group devteam
出力例(グループIDはシステムにより異なります):
devteam:x:1002:
グループIDを明示的に指定したい場合は -g オプションを使います。
sudo groupadd -g 2000 devteam
既存ユーザーをグループに追加する
ユーザーをグループに追加するには usermod -aG を使います。-a(append)を必ず付けてください。-a を省略すると、ユーザーの所属グループがここで指定したグループだけに上書きされてしまいます。
sudo usermod -aG devteam alice
sudo usermod -aG devteam bob
複数のグループに同時に追加したい場合は、カンマ区切りで指定できます。
sudo usermod -aG devteam,another_group alice
グループへの追加は次回ログイン時に有効になります。すでにログイン中のセッションには反映されないため、ユーザー自身が一度ログアウト・再ログインするか、newgrp devteam で一時的にグループを切り替えてから操作を試してください。
共有ディレクトリにグループ権限を設定する
共有用のディレクトリを用意し、所有グループと権限を設定します。ここでは /srv/shared を例に進めます。
ディレクトリを作成してグループを割り当てる
sudo mkdir -p /srv/shared
sudo chgrp devteam /srv/shared
グループに読み書き・実行権限を付与する
sudo chmod 2775 /srv/shared
先頭の 2 は SGID(Set Group ID)ビットです。SGID を設定しておくと、このディレクトリ配下に作成したファイルやサブディレクトリが自動的に devteam グループを継承します。これにより、メンバー全員が新規ファイルにアクセスできる状態を維持しやすくなります。
775 は「所有者とグループは読み書き・実行可、その他は読み取り・実行のみ」という意味です。その他のユーザーへの読み取りも許可したくない場合は 770 を使います。
設定内容を確認する
ユーザーの所属グループを確認する
次のコマンドで、ユーザーが devteam に追加されているか確認できます。
id alice
出力に devteam が含まれていれば追加済みです。
uid=1001(alice) gid=1001(alice) groups=1001(alice),1002(devteam)
ディレクトリのパーミッションを確認する
ls -ld /srv/shared
次のような出力になっていれば、SGIDとグループ権限が正しく設定されています。
drwxrwsr-x 2 root devteam 4096 Nov 10 12:00 /srv/shared
グループ実行ビットの位置に s が表示されていれば、SGIDが有効です。
よくあるつまずきと対処
追加したグループが反映されない
usermod -aG を実行しても、現在のログインセッションには即座に反映されません。ユーザーが再ログインするか、newgrp devteam で一時的にグループを切り替えてから操作を試してください。
-a を付け忘れた場合
usermod -G devteam alice のように -a を省略すると、aliceの所属グループが devteam だけになります。元のグループから外れてしまったときは、id alice で現状を確認し、必要なグループを usermod -aG で追加し直してください。
SGIDを設定したのにグループが継承されない
一部のファイルシステム(NFSなど)では SGIDの動作が異なる場合があります。ローカルのext4・xfsでは一般的に問題ありませんが、マウントオプションや ACLの設定が影響することもあるため、getfacl /srv/shared で ACLも確認してみてください。
グループ削除時の注意
グループを削除するには groupdel devteam を使います。ただし、そのグループを主グループ(プライマリグループ)にしているユーザーがいる場合は削除できません。先に該当ユーザーの主グループを別のグループに変更してから削除してください。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
