Linuxのユーザー・グループ・パーミッションとは?chmod・chownまで初心者向けに解説
Linuxでは、1台のコンピューターを複数のユーザーが利用することを想定した仕組みがあります。
そこで重要になるのが、
- ユーザー
- グループ
- パーミッション
です。
これらを利用することで、
「誰がこのファイルを使えるのか?」
「誰ならファイルを書き換えてよいのか?」
といったアクセス制御ができます。
今回は実際のコマンドも見ながら、Linuxのユーザー・グループ・パーミッションについて学びます。
Linuxのユーザーとは?
Linuxでは、ユーザーごとにアカウントを作成できます。
たとえば、
Linuxサーバー
├── user01
├── user02
└── user03
というように複数のユーザーを作成できます。
ユーザーごとに、
- ユーザーID
- ホームディレクトリ
- 所属グループ
- ファイルへのアクセス権限
などを管理できます。
これによって、同じLinuxサーバーを利用していてもユーザーごとに操作できる範囲を分けられます。
rootとは?
Linuxにはrootと呼ばれる特権ユーザーがあります。
rootはシステム全体に対して非常に強い権限を持っています。
重要な設定ファイルの変更やシステム管理なども行えるため、操作を誤るとシステムへ大きな影響を与える可能性があります。
そのため、普段は一般ユーザーを利用し、管理権限が必要な操作ではsudoなどを利用する方法があります。
現在のユーザーを確認する
現在ログインしているユーザーはwhoamiで確認できます。
whoami
実行例:
user01
さらに詳しい情報を確認するときにはidを利用できます。
id
実行例:
uid=1000(user01) gid=1000(user01) groups=1000(user01)
ここでは、
uid
→ ユーザーID
gid
→ プライマリグループのグループID
groups
→ 所属しているグループ
などを確認できます。
ユーザーを作成する
ユーザーを作成するときにはuseraddを利用できます。
sudo useradd user02
ホームディレクトリも作成する場合には、環境に応じて次のように指定できます。
sudo useradd -m user02
パスワードを設定する場合は、
sudo passwd user02
を利用します。
useraddのデフォルト動作などはディストリビューションによって異なる場合があるため、利用している環境の設定も確認しましょう。
グループとは?
**グループ(Group)**は、複数のユーザーをまとめて管理するための仕組みです。
たとえばWebサーバーを管理するユーザーとして、
webteam
├── user01
├── user02
└── user03
というグループを作ることができます。
これによって、
「webteamに所属しているユーザーには、このファイルを読ませる」
といった権限設定ができます。
ユーザー一人ひとりへ個別に設定するのではなく、グループ単位で管理できるのがポイントです。
グループを作成する
グループを作成するときはgroupaddを利用します。
sudo groupadd webteam
作成したグループへユーザーを追加する場合は、
sudo usermod -aG webteam user02
のように指定できます。
所属グループを確認してみましょう。
id user02
環境やログイン状態によっては、新しいグループ所属を現在のセッションへ反映するために再ログインなどが必要になる場合があります。
ファイルには所有者と所有グループがある
Linuxのファイルには、
所有者(Owner)
と、
所有グループ(Group)
があります。
確認するときはls -lを利用します。
ls -l
たとえば次のように表示されたとします。
-rw-r----- 1 user01 webteam 1200 Sep 16 20:00 index.html
この中の、
user01 webteam
は、
所有者 → user01
所有グループ → webteam
を表しています。
パーミッションとは?
**パーミッション(Permission)**とは、ファイルやディレクトリに対して、
「誰が何をしてよいのか」
を決める権限です。
基本となる権限は3種類あります。
| 記号 | 意味 |
|---|---|
r |
Read:読み取り |
w |
Write:書き込み |
x |
Execute:実行 |
さらに、「誰に対する権限なのか」も3種類に分けます。
所有者
所有グループ
その他のユーザー
つまりLinuxでは、
誰に × 何を許可するか
という組み合わせで権限を管理します。
パーミッションを読んでみよう
次のファイルを見てみましょう。
-rw-r----- 1 user01 webteam 1200 Sep 16 20:00 index.html
先頭のパーミッション部分を分解します。
- rw- r-- ---
│ │ │
│ │ └── その他のユーザー
│ └────── 所有グループ
└────────── 所有者
つまり、
所有者
user01
→ rw-
→ 読み取り・書き込み可能
所有グループ
webteam
→ r--
→ 読み取りのみ可能
その他
→ ---
→ 権限なし
という設定です。
なぜ「所有者・グループ・その他」に分けるの?
ここがパーミッションを理解するときの重要なポイントです。
会社のWebサーバーを例に考えてみます。
ユーザーが3人いるとします。
user01 → webteam
user02 → webteam
user03 → sales
そして、
index.html
というWebサイトのファイルがあります。
このファイルを、
所有者 → user01
所有グループ → webteam
とします。
パーミッションは、
rw-r-----
です。
すると、
user01
↓
所有者なので
読み取り・書き込みOK
user02
↓
webteam所属なので
読み取りOK
user03
↓
所有者でもwebteamでもないので
アクセス不可
という制御ができます。
つまり、
本人
同じチームの人
それ以外の人
で権限を分けられるわけです。
パーミッションを数字で表す
Linuxではパーミッションを数字で表すこともあります。
基本となる数字は、
r = 4
w = 2
x = 1
です。
必要な権限を足し算します。
rwx
4 + 2 + 1
= 7
rw-
4 + 2
= 6
r-x
4 + 1
= 5
r--
4
= 4
たとえば、
rw-r-----
の場合、
所有者
rw-
4 + 2 = 6
グループ
r--
4
その他
---
0
となるので、
640
と表せます。
755とは?
Linuxを使っていると、
755
という数字を目にすることがあります。
これも同じように分解できます。
7 → rwx
5 → r-x
5 → r-x
つまり、
rwxr-xr-x
です。
所有者
→ 読み取り・書き込み・実行
所有グループ
→ 読み取り・実行
その他
→ 読み取り・実行
という意味になります。
数字を丸暗記するより、
r = 4
w = 2
x = 1
から計算できるようにすると理解しやすくなります。
chmod:パーミッションを変更する
パーミッションを変更するときにはchmodを利用します。
たとえば、
chmod 640 index.html
とすると、
rw-r-----
というパーミッションになります。
また、
chmod 755 script.sh
なら、
rwxr-xr-x
となります。
chmodを記号で指定する
chmodは数字だけでなく、記号でも指定できます。
対象を表す記号として、
u → user(所有者)
g → group(所有グループ)
o → others(その他)
a → all(すべて)
があります。
たとえば、
chmod u+x script.sh
なら、
所有者に実行権限を追加する
という意味です。
chmod g+w sample.txt
なら、
所有グループに書き込み権限を追加する
という意味になります。
+で権限を追加し、-で権限を削除できます。
たとえば、
chmod o-r sample.txt
なら、その他のユーザーから読み取り権限を外します。
chown:所有者を変更する
ファイルの所有者を変更するときにはchownを利用します。
sudo chown user02 sample.txt
これでsample.txtの所有者をuser02へ変更できます。
所有者と所有グループを同時に指定することもできます。
sudo chown user02:webteam sample.txt
確認するときは、
ls -l sample.txt
を利用します。
所有者 → user02
所有グループ → webteam
となっていることを確認できます。
ファイルとディレクトリではrwxの意味が違う
パーミッションを理解するときに注意したいのが、ファイルとディレクトリではrwxの意味が少し異なることです。
ファイルの場合は、
| 権限 | 意味 |
|---|---|
r |
ファイルの内容を読み取る |
w |
ファイルの内容を書き換える |
x |
ファイルを実行する |
となります。
一方、ディレクトリの場合は、
| 権限 | 意味 |
|---|---|
r |
ディレクトリ内の名前を一覧できる |
w |
ディレクトリ内のファイル作成・削除などができる |
x |
ディレクトリを通って中の項目へアクセスできる |
となります。
特にディレクトリのxは、
「ディレクトリを実行する」
という意味ではありません。
そのディレクトリを通って中へアクセスするための権限
と考えると理解しやすくなります。
実際にパーミッションを変更してみよう
練習用ファイルを作ります。
touch permission-test.txt
現在の状態を確認します。
ls -l permission-test.txt
次に、
chmod 640 permission-test.txt
を実行します。
もう一度確認します。
ls -l permission-test.txt
パーミッション部分が、
-rw-r-----
となっていれば、
rw- → 所有者
r-- → 所有グループ
--- → その他
という設定になっています。
次に、
chmod 600 permission-test.txt
としてみます。
すると、
rw-------
となります。
これは、
所有者
→ 読み取り・書き込み可能
所有グループ
→ 権限なし
その他
→ 権限なし
という設定です。
このように実際にchmodを変更しながらls -lで確認すると、パーミッションを理解しやすくなります。
Minecraftサーバーではどう使う?
今後Linux上にMinecraftサーバーを構築するときにも、ユーザーとパーミッションの知識を利用できます。
たとえば、
adminuser
→ Linuxを管理するユーザー
minecraft
→ Minecraftサーバーを動かす専用ユーザー
のように役割を分けます。
Minecraft関連ファイルを、
/opt/minecraft
├── server.jar
├── server.properties
├── world
└── logs
に配置するとします。
所有者をMinecraft用ユーザーに変更する場合、
sudo chown -R minecraft:minecraft /opt/minecraft
のように設定できます。
これによって、Minecraftサーバーを動かすためのファイルをMinecraft用ユーザーに管理させる構成にできます。
サーバーでは、
「すべてのプログラムを強い権限で動かす」のではなく、必要なユーザーに必要な権限を与える
という考え方が重要です。
🍯 はちみつメモ
パーミッションは「誰が・何をしていいか」を決めるルール!
Linuxでは、
所有者・所有グループ・その他
の3つに分けて、
読む・書く・実行する
という権限を設定できます。
640を見たら、6 → rw- 4 → r-- 0 → ---と分解して考えてみましょう。
まとめ
- Linuxでは複数のユーザーを管理できる
useraddでユーザーを作成できるgroupaddでグループを作成できる- グループを利用すると複数ユーザーをまとめて管理できる
- ファイルには所有者と所有グループがある
- パーミッションは所有者・所有グループ・その他に分かれる
rは読み取り、wは書き込み、xは実行を基本としているr=4、w=2、x=1として数字でも指定できるchmodでパーミッションを変更できるchownで所有者や所有グループを変更できる- ファイルとディレクトリでは
rwxの意味が異なる - サーバーでは用途ごとにユーザーや権限を分けることが重要
Linuxのパーミッションは、数字だけを暗記するのではなく、
「誰に、何を許可したいのか?」
と考えることが大切です。