Linuxでは、すべてのファイルやディレクトリに「誰が何をできるか」を定める**パーミッション(権限)**が設定されています。 複数のユーザーが同じシステムを使う環境では、パーミッションを正しく理解することがセキュリティの基本になります。
パーミッションの読み方
ls -l を実行すると、ファイルの詳細情報が表示されます。
ls -l myfile.sh
出力例:
-rwxr-xr-- 1 alice developers 1234 Jun 7 10:00 myfile.sh
先頭の10文字がパーミッション情報です。
- rwx r-x r--
│ │ │ └── その他のユーザー(others)
│ │ └────── グループ(group)
│ └────────── 所有者(user/owner)
└──────────── ファイル種別(- = ファイル、d = ディレクトリ)
各3文字は r(読み取り)・w(書き込み)・x(実行)を表します。権限がない場合は - になります。
| 記号 | 意味 | ファイルの場合 | ディレクトリの場合 |
|---|---|---|---|
r | read | 内容を読める | 一覧を表示できる |
w | write | 書き込める | ファイルを作成・削除できる |
x | execute | 実行できる | 中に入れる(cd できる) |
数値表記(オクタル表記)
パーミッションは数値でも表現できます。r=4、w=2、x=1 を合計します。
rwx = 4+2+1 = 7
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
rwxr-xr-- は 754 となります。
chmodでパーミッションを変更する
数値指定
# 所有者に全権限、グループに読み取り+実行、その他に読み取りのみ
chmod 754 myfile.sh
# スクリプトに実行権限を付ける(よく使う)
chmod 755 deploy.sh
記号指定
記号を使うと、既存の設定を保ちつつ特定の権限だけ変更できます。
# 全ユーザーに実行権限を追加(+x)
chmod +x myfile.sh
# その他のユーザーから書き込み権限を削除(o-w)
chmod o-w config.txt
# グループに読み取り権限を付与(g+r)
chmod g+r report.txt
記号の意味:
u= 所有者、g= グループ、o= その他、a= 全員+= 追加、-= 削除、== 指定した権限に設定
ディレクトリを再帰的に変更する
# ディレクトリ以下すべてのパーミッションを変更
chmod -R 755 /var/www/html
chownで所有者を変更する
# 所有者を alice に変更
chown alice myfile.sh
# 所有者を alice、グループを developers に変更
chown alice:developers myfile.sh
# ディレクトリ以下すべての所有者を変更
chown -R alice:developers /home/alice/project/
chownは通常sudoが必要です。
umaskで新規ファイルのデフォルト権限を設定する
ファイルを作成するとき、デフォルトのパーミッションは umask 値によって決まります。
# 現在の umask を確認
umask
# 出力例: 0022
umask 022 の場合、ファイルは 666 - 022 = 644(rw-r—r—)、ディレクトリは 777 - 022 = 755(rwxr-xr-x)で作成されます。
# セッション中のumaskを変更(プライベートなファイルを作る場合)
umask 077
touch secret.txt
ls -l secret.txt
# 出力: -rw------- 1 alice alice 0 Jun 7 10:00 secret.txt
練習問題
問題1
以下の ls -l の出力を読んで答えてください。
-rw-r--r-- 1 bob staff 512 Jun 7 09:00 notes.txt
- このファイルの所有者は誰ですか?
alice(staffグループのメンバー)はこのファイルを編集できますか?carol(staffグループ外)はこのファイルを読めますか?
問題2
script.sh に対して、以下の権限を設定するコマンドを書いてください。
- 所有者: 読み取り・書き込み・実行
- グループ: 読み取り・実行
- その他: なし
数値指定と記号指定の両方で書いてみましょう。
問題3
/var/www/html ディレクトリ以下のすべてのファイルとディレクトリの所有者を www-data、グループを www-data に変更するコマンドを書いてください。
答え
問題1の答え
- 所有者は bob です(3列目)
- 編集できません。staffグループの権限は
r--(読み取りのみ)で、書き込み(w)がありません - 読めます。その他のユーザーの権限は
r--(読み取り可)です
問題2の答え
# 数値指定(rwx=7, r-x=5, ---=0)
chmod 750 script.sh
# 記号指定(現在の権限を上書き)
chmod u=rwx,g=rx,o= script.sh
問題3の答え
sudo chown -R www-data:www-data /var/www/html
-R オプションでディレクトリ以下を再帰的に変更します。sudo が必要な点も忘れずに。