「このファイル、なぜか書き込めないんですけど」「逆に、誰でも書き換えられる状態になっていた」――Linuxサーバーを運用していると、ファイルパーミッション(アクセス権限)に関するトラブルは日常茶飯事です。
パーミッションの設定ミスは、単なる不便で済む場合もあれば、機密ファイルの漏洩や改ざんにつながる深刻なセキュリティ事故を引き起こすこともあります。
この記事では、Linuxのファイルパーミッションの基礎から、chmod・chown・umaskといったコマンドの使い方まで、現場で使えるレベルで解説します。数字表記と記号表記の違い、ディレクトリ特有の挙動、SUID/SGIDの基礎、そして現場でよくある設定ミスまで網羅しました。

ファイルパーミッションとは?なぜ重要なのか
Linuxはマルチユーザーを前提に設計されたOSです。1台のサーバー上で複数のユーザーやプロセスが同時に動作するため、「誰がどのファイルに何をできるか」を厳密に制御する仕組みが必要です。それがファイルパーミッションです。
パーミッションは、ファイルやディレクトリに対して3種類の権限を3つのカテゴリで管理します。
・3種類の権限: 読み取り(r)、書き込み(w)、実行(x)
・3つのカテゴリ: 所有者(owner)、グループ(group)、その他(others)
ls -l コマンドで確認すると、次のように表示されます。
# ファイルのパーミッションを確認 ls -l /etc/passwd -rw-r--r-- 1 root root 2847 Apr 1 10:00 /etc/passwd
先頭の -rw-r--r-- がパーミッション表示です。最初の1文字はファイル種別(- は通常ファイル、d はディレクトリ)、続く9文字が3文字ずつ「所有者」「グループ」「その他」の権限を表します。
| 記号 | 意味 | ファイルの場合 | ディレクトリの場合 |
|---|---|---|---|
| r | 読み取り | ファイルの内容を読める | ディレクトリ内のファイル一覧を取得できる |
| w | 書き込み | ファイルの内容を変更できる | ディレクトリ内でファイルの作成・削除ができる |
| x | 実行 | プログラムとして実行できる | ディレクトリ内に移動(cd)できる |
ここで注意したいのが、ディレクトリとファイルでrwxの意味が異なるという点です。特に、ディレクトリのw権限は「中のファイルを削除できる」という強い権限なので、安易に付与してはいけません。
権限設定ミスが招くセキュリティリスク
パーミッションの設定を間違えると、どのようなことが起きるのでしょうか。防御のために、リスクを正しく理解しておきましょう。
1. 機密ファイルの意図しない公開
データベースの接続情報が書かれた設定ファイル、APIキーを含む .env ファイルなどに、その他(others)の読み取り権限が付いていると、同じサーバー上の全ユーザーから中身を読まれてしまいます。共有ホスティング環境では特に致命的です。
2. Webサーバー経由での改ざん
Webアプリケーションの公開ディレクトリに書き込み権限を広く付けてしまうと、脆弱性を突かれた場合にファイルを改ざんされるリスクがあります。「動かないから chmod 777 にした」という対処は、トラブルシューティングとしては最悪の手段です。
3. 実行権限の不適切な付与
シェルスクリプトやバイナリに不必要な実行権限が付いていると、意図しないプログラムの実行を許してしまいます。特にSUID(後述)が設定されたファイルは、所有者の権限で実行されるため、root所有のSUIDファイルがあれば権限昇格の足がかりにされかねません。

具体的なパーミッション管理手順
ここからは、chmod・chown・chgrp・umaskの使い方を実践的に解説します。
1. chmodでパーミッションを変更する
chmod(change mode)はファイルのパーミッションを変更するコマンドです。数字表記と記号表記の2つの指定方法があります。
数字表記(8進数)
rwxをそれぞれ数値に変換し、合計値で指定します。
・r(読み取り)= 4
・w(書き込み)= 2
・x(実行)= 1
3桁の数字で「所有者・グループ・その他」を順番に指定します。
# 所有者: rwx(7)、グループ: r-x(5)、その他: r-x(5) chmod 755 script.sh # 所有者: rw-(6)、グループ: r--(4)、その他: r--(4) chmod 644 config.txt # 所有者: rw-(6)、グループ: ---(0)、その他: ---(0) chmod 600 secret.key
記号表記
「誰に(u/g/o/a)」「何を(+/-/=)」「どの権限を(r/w/x)」の形式で指定します。
# u=所有者、g=グループ、o=その他、a=全員 # 所有者に実行権限を追加 chmod u+x script.sh # その他から書き込み権限を削除 chmod o-w config.txt # グループに読み取りと実行を設定(既存権限をリセット) chmod g=rx shared_dir
現場では数字表記が圧倒的に多く使われます。755や644は頻出なので、意味と合わせて覚えておくと作業が速くなります。
| 数字表記 | 記号表記 | 用途の例 |
|---|---|---|
| 755 | rwxr-xr-x | 実行ファイル、公開ディレクトリ |
| 644 | rw-r–r– | 一般的なファイル、HTML/CSS |
| 600 | rw——- | 秘密鍵、パスワードファイル |
| 700 | rwx—— | .sshディレクトリ |
| 750 | rwxr-x— | グループ内共有ディレクトリ |
2. chown・chgrpで所有者・グループを変更する
chown(change owner)はファイルの所有者とグループを変更するコマンドです。chgrp(change group)はグループのみを変更します。
# 所有者をwebadminに変更 sudo chown webadmin index.html # 所有者とグループを同時に変更 sudo chown webadmin:www-data /var/www/html # ディレクトリ配下を再帰的に変更(-R オプション) sudo chown -R webadmin:www-data /var/www/html/ # グループだけ変更する場合はchgrp sudo chgrp developers project_dir
Webサーバーの公開ディレクトリでは、所有者を管理ユーザー、グループをWebサーバーのプロセスグループ(www-dataやapache)に設定するのが一般的です。こうすることで、管理者がファイルを編集でき、Webサーバーが読み取れるという状態を作れます。
3. umaskでデフォルト権限を制御する
umaskは、新しく作成されるファイルやディレクトリのデフォルト権限を制御する設定です。ファイルの場合は666から、ディレクトリの場合は777からumask値を引いた値がデフォルト権限になります。
# 現在のumask値を確認 umask # 出力例: 0022 # umask 022 の場合: # ファイル: 666 - 022 = 644 (rw-r--r--) # ディレクトリ: 777 - 022 = 755 (rwxr-xr-x) # umaskを変更(その他のアクセスを制限) umask 027 # ファイル: 666 - 027 = 640 (rw-r-----) # ディレクトリ: 777 - 027 = 750 (rwxr-x---)
umaskの設定を恒久的に変更するには、/etc/profile や ~/.bashrc に記述します。サーバー用途では、デフォルトの022よりも027や077のほうがセキュリティ上好ましいケースが多いです。
4. SUID・SGID・スティッキービットを理解する
通常のrwx以外にも、特殊なパーミッションビットがあります。
・SUID(Set User ID): 実行時にファイルの所有者の権限で動作する。passwd コマンドなどで使われている
・SGID(Set Group ID): 実行時にファイルのグループ権限で動作する。ディレクトリに設定すると、中に作られたファイルが親ディレクトリのグループを継承する
・スティッキービット: ディレクトリに設定すると、ファイルの削除を所有者とrootだけに制限する。/tmp ディレクトリに設定されている
# SUIDの確認(sが表示される) ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 ... /usr/bin/passwd # SUID付きファイルをシステム全体から検索 sudo find / -perm -4000 -type f 2>/dev/null # SGIDをディレクトリに設定(共有フォルダ向け) chmod g+s /shared/project # スティッキービットの設定 chmod +t /shared/tmp
SUID付きのファイルは定期的に監査してください。不審なSUIDファイルがあれば、攻撃者がバックドアを仕掛けた可能性があります。
中小企業でも今日からできること
パーミッション管理は特別なツールや費用がなくても、すぐに実践できます。情シス担当者がまず取り組むべきチェックリストを整理しました。
・777のファイルを一掃する: find / -perm -777 -type f で検索し、適切な権限に修正する
・秘密鍵・設定ファイルの権限を確認: SSH秘密鍵は600、設定ファイルは640以下が目安
・umaskを見直す: デフォルトの022を027以上に変更し、不要な公開を防ぐ
・SUIDファイルを定期監査: find / -perm -4000 の結果を定期的に記録し、差分を確認する
・Webディレクトリの権限を最小化: ファイルは644、ディレクトリは755、書き込みが必要な箇所だけ775に限定する
・共有ディレクトリにはSGIDを活用: チームで使うディレクトリにSGIDを設定し、グループ権限を統一する
これらはどれも無料で、コマンドひとつで対応できます。まずは自社サーバーの現状を ls -la で確認するところから始めてみてください。
よくある誤解と注意点
「動かないからchmod 777」は最悪の対処
パーミッションエラーが出たときに chmod 777 で解決しようとする人は少なくありません。確かに一時的には動きますが、全ユーザーに全権限を与えることになり、セキュリティ上は完全に無防備な状態です。正しい対処は、どのユーザー・プロセスがどの権限を必要としているかを特定し、最小限の権限を付与することです。
ディレクトリのx権限を忘れがち
ディレクトリの内容を読むには r 権限だけでなく x 権限も必要です。chmod 644 をディレクトリに設定すると、中にcdできなくなります。ディレクトリには最低でも chmod 755(公開用)や chmod 750(制限用)を設定してください。
chown -Rの影響範囲に注意
chown -R は再帰的にすべてのファイルとサブディレクトリの所有者を変更します。対象ディレクトリを間違えると、システムファイルの所有者まで変更してしまい、OSが起動しなくなることもあります。実行前に対象パスを必ず確認してください。
rootなら何でもできるわけではない
rootユーザーは基本的にパーミッションを無視できますが、SELinux(Security-Enhanced Linux)やAppArmorが有効な環境では、rootでもアクセスが制限されることがあります。パーミッションだけでなく、MAC(強制アクセス制御)の仕組みも合わせて理解しておくと、より堅牢な運用ができます。

本記事のまとめ
Linuxのファイルパーミッションは、セキュリティの最も基本的かつ重要な仕組みです。正しく理解して適切に設定することで、多くのセキュリティリスクを未然に防げます。
| 項目 | ポイント |
|---|---|
| 基本構造 | 所有者・グループ・その他の3カテゴリ × rwxの3権限 |
| chmod | 数字表記(755等)と記号表記(u+x等)でパーミッション変更 |
| chown/chgrp | ファイルの所有者・グループを変更。Webサーバー運用の要 |
| umask | 新規ファイルのデフォルト権限を制御。027以上を推奨 |
| 特殊ビット | SUID/SGID/スティッキービット。特にSUIDは定期監査が必須 |
| 最重要ルール | chmod 777は絶対に使わない。最小権限の原則を徹底する |
Linuxの基本操作やコマンドについては、姉妹サイトLinuxMaster.JPで詳しく解説しています。
サーバーのファイル権限、正しく設定できていますか?
パーミッション管理はLinuxセキュリティの基本であり、設定ミスひとつで大きなリスクにつながります。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。


コメント