ファイル権限とは?chmodとchownの基本と考え方
LinuxやUnix系OSでファイル操作をしていると、Permission denied にぶつかることがあります。そこで重要になるのがファイル権限です。結論から言うと、ファイル権限は「誰が、そのファイルを、読み取り・書き込み・実行できるか」を決める仕組みで、chmod は権限そのものを変えるコマンド、chown は所有者を変えるコマンドです。
実務では、ログファイルをアプリから書けるようにしたい、共有ディレクトリをチームで扱いたい、スクリプトを実行可能にしたい、といった場面で使います。ここを曖昧にしたまま 777 を付けると、動いても危険です。まずは「何を変えているのか」を整理しておくのが近道です。
chmod: 読む・書く・実行する権限を変えるchown: 所有者とグループを変える- よくある確認手順:
ls -lで状態を見る → 必要最小限だけ変更する - 初心者が先に覚えたい数字:
644、755
ここがポイント: 権限エラーは、コマンドを丸暗記するより「所有者」と「権限」を分けて考えると整理しやすくなります。
まず確認したい前提
この記事は、主に Linux や macOS などの Unix 系環境を前提にしています。chmod と chown は GNU Coreutils や POSIX 系コマンドとして広く使われていますが、細かな挙動は OS やファイルシステムによって差が出ることがあります。
最初に確認するコマンドはこれです。
ls -l sample.sh
出力例:
-rw-r--r-- 1 masa staff 128 Apr 22 10:00 sample.sh
この1行には、実務で必要な情報が詰まっています。
-rw-r--r--: 権限masa: 所有者staff: グループsample.sh: ファイル名
ファイル権限の見方
権限表示は、先頭1文字と、その後の9文字で構成されます。
-rwxr-xr--
短く分けるとこうです。
- 先頭の
-: 通常ファイル - 次の3文字
rwx: 所有者の権限 - 次の3文字
r-x: グループの権限 - 最後の3文字
r--: その他ユーザーの権限
r w x の意味
r: read。ファイルを読むw: write。ファイルを書き換えるx: execute。ファイルを実行する
ディレクトリでは少し意味が変わります。
r: ディレクトリ内の一覧を読めるw: 中身を追加・削除できるx: そのディレクトリに入れる、探索できる
ここが混乱しやすい点です。ファイルの x は実行、ディレクトリの x は通行許可と考えると理解しやすくなります。
chmod で権限を変える
chmod は permission bits、つまりアクセス権を変更するコマンドです。書き方は大きく2つあります。
数字で指定する方法
もっともよく使うのは数字です。
r = 4w = 2x = 1
これを所有者・グループ・その他の順に足して並べます。
chmod 644 memo.txt
chmod 755 script.sh
意味は次の通りです。
644: 所有者は読み書き可、他は読み取りのみ755: 所有者は読み書き実行可、他は読み取りと実行可
実務でよく出る組み合わせ:
600: 秘密情報を含む設定ファイル向け644: 一般的なテキストファイル向け700: 自分だけが使うスクリプトやディレクトリ向け755: 実行スクリプトや公開ディレクトリ向け
記号で指定する方法
「誰に」「何を足すか・消すか」を見ながら書けるのが記号方式です。
u: 所有者g: グループo: その他a: 全員
例:
chmod u+x script.sh
chmod g-w report.txt
chmod o-r secret.txt
chmod a+r readme.txt
これは細かい調整に向いています。既存の設定を保ちながら、必要な分だけ足したいときに便利です。
chown で所有者を変える
chown は owner と group ownership を変更するコマンドです。権限そのものではなく、そのファイルを誰のものとして扱うかを変えます。
chown user1 file.txt
chown user1:devteam file.txt
意味:
chown user1 file.txt: 所有者をuser1に変更chown user1:devteam file.txt: 所有者をuser1、グループをdevteamに変更
たとえば、アプリの実行ユーザーが www-data なのに、アップロード先ディレクトリの所有者が別ユーザーのままだと、書き込みに失敗することがあります。そんなときは chmod だけでなく、chown の確認が必要です。
グループだけ変えたいとき
グループだけ変更したいなら chgrp も使えます。
chgrp devteam shared.txt
チーム共有ディレクトリでは、所有者よりもグループ設計のほうが重要になる場面が少なくありません。
実務でよくある使い方
ここでは「何をしたいか」から逆算して考えます。
スクリプトを実行できるようにしたい
chmod 755 deploy.sh
または、既存権限をなるべく保つならこちらです。
chmod u+x deploy.sh
後者は「所有者に実行権だけ足す」ので、むやみに公開範囲を広げません。
Webアプリが書き込むディレクトリを整えたい
chown -R www-data:www-data uploads
chmod -R 755 uploads
ただし、アプリの要件によっては一部ディレクトリにだけ書き込み権限が必要です。-R 777 のような広すぎる設定は避け、対象を絞るほうが安全です。
秘密情報を含むファイルを自分だけ読めるようにしたい
chmod 600 .env
APIキーや接続情報を含むファイルでは、公開範囲を狭くするのが基本です。共有ストレージやリポジトリに置くなら、権限設定だけでなく保管方法そのものも見直す必要があります。
入力例と出力例
変更前:
-rw-r--r-- 1 masa staff 128 Apr 22 10:00 script.sh
実行権を追加:
chmod u+x script.sh
変更後:
-rwxr--r-- 1 masa staff 128 Apr 22 10:00 script.sh
所有者とグループを変更:
sudo chown appuser:appgroup script.sh
変更後の確認:
-rwxr--r-- 1 appuser appgroup 128 Apr 22 10:00 script.sh
確認まで含めて1セットにすると、意図しない変更に早く気づけます。
よくある失敗と対処
短いコマンドでも、失敗の種類ははっきりしています。
chmod 777 を安易に使う
確かに動くことはあります。ただし、全員に書き込み権限を与えるため、事故や不正変更の入口になりやすい設定です。
避けたい場面:
- Web公開ディレクトリ
- 共有サーバー
- 設定ファイルやログ保存先
まずは次を確認してください。
- 本当に必要なのは権限か、それとも所有者変更か
- 書き込みが必要なのは全員か、特定ユーザーか、特定グループか
- 対象はファイル単体か、ディレクトリ配下全体か
chmod と chown を混同する
- 実行できない:
chmodを確認する - 書き込みユーザーが違う:
chownを確認する
同じ Permission denied でも、原因は別です。ここを分けるだけで調査時間がかなり変わります。
-R を深く考えずに使う
chmod -R 755 /some/dir
chown -R user:group /some/dir
再帰指定は便利ですが、想定外のファイルまで変更しやすいのが難点です。特にシンボリックリンクや大きなディレクトリ配下では、影響範囲を先に確認したほうが安全です。
sudo 前提で考えすぎる
管理者権限で無理やり変えると、その場では解決しても運用が崩れます。アプリの実行ユーザー、デプロイユーザー、共有グループの設計を見直したほうがきれいに収まるケースは多いです。
代替手段と一緒に知っておきたいもの
chmod と chown だけで足りない場面もあります。
umask
新しく作るファイルやディレクトリの初期権限を調整します。毎回 chmod するより、作成時のデフォルトを整えたいときに有効です。
chgrp
所有者はそのまま、グループだけ変更したいときに使います。共同作業ではこちらのほうが目的に合うことがあります。
ACL
「このユーザーには読めるが、他のユーザーには読ませたくない」といった細かい制御が必要なら、通常の rwx だけでは足りません。そういうときは ACL の利用を検討します。
最低限ここだけ覚えるなら
最初は全部覚えなくて構いません。次の4つを押さえるだけでも、現場でかなり役立ちます。
ls -lで現在の所有者と権限を確認するchmodは「権限」を変えるchownは「所有者・グループ」を変える777ではなく、必要最小限の設定を選ぶ
ファイル権限は、コマンドの暗記より「誰に何を許すか」を整理できるかが本質です。次に権限エラーが出たら、まず ls -l を見て、所有者の問題か、権限の問題かを切り分けてみてください。その一手で、対応がかなり具体的になります。
