· FabLab Westharima Team · ドキュメント · 10 min read
[Unix系OS] [chmod]パーミッションとは?パーミッションを数値で指定
Unix系OSのファイルパーミッションの基本から実践まで。chmodコマンドの使い方、数値指定の方法、SSH鍵やWebサーバーでの具体的な設定例を解説。
パソコンにあるファイルやディレクトリを扱う上で、パーミッション(Permission) を適切に設定しないと、プログラムが正しく実行されなかったり、最悪、情報漏洩などを引き起こしたりすることがあります。
ターミナルでのコマンド入力作業中、パーミッション設定変更に手間取ったことがあり、今後のために、パーミッションの概要・表示方法・見方・チートシートなどを備忘録としてまとめてみました。
パーミッションとは?
Unix系OSでは、ファイルパーミッションやアクセスモードは非常に重要な役割を果たします。これらのパーミッションは、ファイルやディレクトリに対するユーザーやグループのアクセスを制御するために使用されます。正しく設定されていないと、セキュリティリスクにつながる場合があります。
パーミッションの基本
ファイルのパーミッション
| ファイル:パーミッション | 表記 | 意味 |
|---|---|---|
| 読み取り (read): | r | ファイルを読み取る権限 |
| 書き込み (write) | w | ファイルにデータを書き込むまたはファイルを削除する権限 |
| 実行 (execute) | x | ファイル(プログラムやスクリプトなど)を実行する権限 |
| 権限なし | - |
ディレクトリのパーミッション
| ディレクトリ:パーミッション | 表記 | 意味 |
|---|---|---|
| 読み取り (read): | r | ディレクトリ内のファイル名リストを読み取る権限 |
| 書き込み (write) | w | ディレクトリ内でのファイルの作成、削除を許可 |
| 実行 (execute) | x | ディレクトリ内のファイルやサブディレクトリにアクセスする権限 |
| 権限なし | - |
ディレクトリの実行権限が自分にあれば、そのディレクトリに入ることができますが、ディレクトリの実行権限がなければディレクトリに入ることはできません。
ユーザークラス
上記のパーミッションは、3つの異なるクラスのユーザーに対し割り当てることができます。
| 所有者 (user) | ファイルを作成したユーザー |
|---|---|
| 所有グループ (group) | ファイルの作成者が属するグループ |
| その他 (others) | その他全員 |
これらを組み合わせることで、特定のユーザーやグループに対する細かなアクセス制御が可能です。
パーミッションの表示
ターミナルにて ls -l コマンド を使用すると、ファイルパーミッションを確認できます。
ls -l出力例は以下の通りです。
-rwxr-xr-- 1 user group 12345 Jan 23 12:34 example.txt出力例の行は以下の情報を表しています:
| -rwxr-xr— | ファイルパーミッション |
|---|---|
| 1 | リンクの数 |
| user | ファイルの所有者 |
| group | ファイルの所有グループ |
| 12345 | ファイルサイズ(バイト) |
| Jan 23 12:34 | 最終更新日時 |
| example.txt | ファイル名 |
パーミッションの見方
上述の -rwxr-xr-- がパーミッションと言われるもので、それぞれの文字は以下を表します。
最初の1文字 : ファイルの種別
- 「d」はディレクトリ、「-」はファイル
2~4文字目, 5~7文字目, 8~10文字目 : それぞれ3つの異なるクラスのユーザーに対する権限を表しています。
- 2~4文字目 : 所有者のパーミッション
- 5~7文字目 : 所有グループのパーミッション
- 8~10文字目 : その他全員のパーミッション
これを出力例 -rwxr-xr-- で考えると、
最初の1文字
-: ファイル2~4文字目
rwx: 所有者(読み取り、書き込み、実行)5~7文字目
r-x: 所有グループ(読み取り、実行)8~10文字目
r--: その他全員(読み取りのみ)
というパーミッションが設定されていることがわかります。
パーミッションの変更
各ユーザークラスに対するパーミッションを設定するには、chmodを使い、3桁の数値を組み合わせて設定できます。最初の桁は所有者のパーミッション、2桁目はグループのパーミッション、そして3桁目はその他のユーザのパーミッションです。_(chmod は change mode の略で,ファイルやディレクトリのパーミッションを変更するコマンドです。)_
コマンド例(chmod xxx ファイル名)
chmod 644 example.txt重要なのは3桁の数値で、以下の権限の数値の合計となっています。
- 権限:数値
- 読み取り可能:4
- 書き込み可能:2
- 実行可能 :1
したがって、このコマンド例は、ファイル「example.txt」に対し、所有者に読み取りと書き込みの権限を与え、グループとその他のユーザーには読み取りのみの権限を与えたい場合のコマンドとなります。
| 合計 | 数値 | 読み取り r | 書き込み w | 実行可能 x | ||
|---|---|---|---|---|---|---|
| 所有者(owner) | 6 | (4+2+0) | ◯ | ◯ | - | rw- |
| 所有グループ(group) | 4 | (4+0+0) | ◯ | - | - | r— |
| その他ユーザー(others) | 4 | (4+0+0) | ◯ | - | - | r— |
以下は、chmod コマンドを使用した際の主要な数値とそれに対応するパーミッションのチートシートです。
パーミッションのチートシート
基本的なパーミッション数値
| 0 | 何の権限もなし | --- |
|---|---|---|
| 1 | 実行のみ | —x |
| 2 | 書き込みのみ | -w- |
| 3 | 書き込みと実行 | -wx |
| 4 | 読み取りのみ | r— |
| 5 | 読み取りと実行 | r-x |
| 6 | 読み取りと書き込み | rw- |
| 7 | 読み取り、書き込み、実行 | rwx |
chmod コマンド 例
| 数値 | 所有者 | グループ | 他のユーザー |
|---|---|---|---|
| 700 | 全ての権限 | 権限なし | 権限なし |
| 755 | 全ての権限 | 読み取り・実行 | 読み取り・実行 |
| 644 | 読み取りと書き込み | 読み取りのみ | 読み取りのみ |
| 600 | 読み取りと書き込み | 権限なし | 権限なし |
| 666 | 読み取りと書き込み | 読み取りと書き込み | 読み取りと書き込み |
| 400 | 読み取りのみ | 権限なし | 権限なし |
| 444 | 読み取りのみ | 読み取りのみ | 読み取りのみ |
実際の使用例
パーミッション設定が必要になる代表的なケースと、その設定方法を紹介します。
1. SSH秘密鍵のパーミッション設定
SSH接続に使用する秘密鍵ファイルは、セキュリティ上、所有者だけが読み取れるようにする必要があります。
chmod 600 ~/.ssh/id_rsa解説: 600は所有者のみ読み書き可能で、他のユーザーは一切アクセスできません。これにより、秘密鍵の不正利用を防ぎます。
2. Webサーバーのファイル権限
Webサーバー(Apache、Nginxなど)で公開するファイルの典型的な設定です。
# HTMLファイルやCSSファイル
chmod 644 index.html
# ディレクトリ
chmod 755 /var/www/html
# 実行ファイルやスクリプト
chmod 755 script.sh解説:
644: 所有者は編集可能、Webサーバーや訪問者は読み取りのみ755: ディレクトリは実行権限が必要(ディレクトリ内にアクセスするため)
3. 環境変数ファイル(.envなど)
APIキーやデータベースパスワードなど、機密情報を含むファイルの保護です。
chmod 600 .env解説: 開発環境でも本番環境でも、環境変数ファイルは所有者だけがアクセスできるようにします。
4. 共同作業用のディレクトリ
チームで共有するディレクトリで、全員が読み書きできるようにする場合です。
chmod 775 /shared/project解説: 775は所有者とグループメンバーが読み書き・実行可能、その他は読み取りと実行のみです。
5. 実行可能なスクリプトの作成
作成したシェルスクリプトやPythonスクリプトを実行可能にする場合です。
chmod 755 deploy.sh
# または
chmod +x deploy.sh解説: スクリプトファイルには実行権限が必要です。755または+xオプションで実行権限を付与します。
注意事項
注意事項として、パーミッションは、正しく設定されていないと、悪意のある第三者にファイルを不正に見られたり書き換えられる可能性があります。
そのため、権限を設定する際は、必要最小限の権限をユーザーに与えることで、セキュリティリスクを減らします。 例えば、特定のユーザーがファイルを読み取る必要があるだけの場合、そのユーザーに書き込み権限を与えるべきではありません。

