Linuxのパーミッション入門|ファイルの権限と読み書き実行の仕組みを初心者向けに解説

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > 【Linux入門】初心者のための基礎知識・講座 > Linuxのパーミッション入門|ファイルの権限と読み書き実行の仕組みを初心者向けに解説
「ファイルを編集しようとしたら Permission denied って出て、何もできない。」
「ls -l で表示される rwxr-xr-x って何の暗号?」

Linuxを触り始めた人が最初にぶつかる壁が、この「パーミッション(権限)」です。
Windowsではファイルをダブルクリックすれば開けますし、上書き保存も自由にできます。ところがLinuxでは「誰が」「何をしてよいか」がファイルごとに厳密に決められており、その設定を理解しないと操作が先に進みません。

この記事では、Linuxのパーミッションの仕組みを、Windowsとの違いを交えながら初心者向けに解説します。
「なぜ権限という仕組みがあるのか」「rwxとは何か」「ls -l の読み方」「chmod の基本と一括変更」「Permission denied の対処法」までをカバーするので、
読み終えたころには Permission denied の意味がわかり、自分で対処できるようになっています。

想定環境: Ubuntu 24.04 LTS(WSL2)

この記事のポイント

・パーミッションはLinuxの安全を守る「鍵」の仕組み
・rwxは読み(read)・書き(write)・実行(execute)を意味する
・ls -l の出力で「誰に何が許可されているか」を読み取れる
・755・644などの数字はr=4・w=2・x=1の足し算で決まる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜパーミッション(権限)があるのか?

Linuxは、もともと複数のユーザーが同時にログインして使う「マルチユーザーOS」として設計されています。
会社のサーバーを思い浮かべてください。開発チームのAさん、経理部のBさん、外部の協力会社Cさんが同じサーバーにログインしている状況です。

もし全員がすべてのファイルを自由に読み書きできたら、どうなるでしょうか。

・Aさんが書いたプログラムをCさんが誤って上書きしてしまう
・Bさんの給与計算データをAさんが覗けてしまう
・誰かが間違えてシステムの設定ファイルを消してしまい、サーバーが止まる

こうした事故を防ぐために、Linuxではファイルやディレクトリの一つひとつに「誰が」「何をしてよいか」を設定できるようになっています。
これがパーミッション(permission = 許可)です。

身近な例でいえば、オフィスの鍵と同じです。
自分のデスクの引き出しは自由に開けられるけれど、社長室の鍵は持っていない。サーバールームは特定の管理者しか入れない。
Linuxのパーミッションは、このような「鍵の管理」をファイル単位で行う仕組みです。

現代のクラウドサーバーやVPSでも、この仕組みは変わりません。AWSのEC2インスタンスでもSSH秘密鍵のパーミッションが正しくないと接続を拒否されます。
パーミッションはLinuxを使ううえで避けて通れない基礎知識です。

Windowsの「アクセス許可」とLinuxの「パーミッション」の違い

実はWindowsにも「アクセス許可」という仕組みがあります。
ファイルを右クリック →「プロパティ」→「セキュリティ」タブを開くと、ユーザーごとの権限を確認できます。
ただ、Windowsでは普段この設定を意識することはほとんどありません。

一方、Linuxではパーミッションが日常的に目に入ります。
ファイルを一覧表示するだけで権限が表示され、権限がないファイルは操作した瞬間にエラーになります。

比較項目 Windows Linux
権限の名前 アクセス許可(ACL) パーミッション
普段の意識 ほとんど意識しない 常に意識する必要がある
確認方法 右クリック → プロパティ → セキュリティ ls -l コマンド一発
権限の単位 ユーザー/グループを細かく追加可能 所有者・グループ・その他の3段階
管理者権限 「管理者として実行」 sudo コマンド
Linuxのパーミッションは、Windowsの「アクセス許可」よりシンプルです。
覚えることが少ない分、一度理解すれば迷うことはありません。

パーミッションの読み方 ~ ls -l の出力を理解する

パーミッションを確認する方法は簡単です。ls -l コマンドを実行するだけです。
実際にやってみましょう。

# ホームディレクトリでファイルの詳細を表示する ls -l

実行結果:

-rw-r--r-- 1 tomohiro tomohiro 1024 Apr 13 10:00 memo.txt drwxr-xr-x 2 tomohiro tomohiro 4096 Apr 13 10:05 projects -rwxr-xr-x 1 tomohiro tomohiro 256 Apr 13 10:10 backup.sh

左端に並んでいる -rw-r--r-- や drwxr-xr-x がパーミッション表示です。
これは10文字で構成されており、それぞれ意味があります。

なお、ls -l の出力にはパーミッション以外の情報も含まれています。左から順に「パーミッション」「ハードリンク数」「所有者名」「グループ名」「ファイルサイズ(バイト)」「更新日時」「ファイル名」です。まずはパーミッション(先頭10文字)の読み方をマスターしましょう。

1. ファイルタイプ

先頭の1文字目はファイルの種類を示しています。

・-:通常のファイル
・d:ディレクトリ(フォルダ)
・l:シンボリックリンク(Windowsでいうショートカット)

先ほどの実行結果でいえば、memo.txt は先頭が - なので通常のファイル、projects は先頭が d なのでディレクトリです。

2. rwx(読み・書き・実行)の意味

2文字目以降の rwx が、実際の権限を表しています。

記号 意味 ファイルの場合 ディレクトリの場合
r read(読み取り) ファイルの中身を読める ディレクトリ内のファイル一覧を見られる
w write(書き込み) ファイルの内容を変更できる ディレクトリ内にファイルを作成・削除できる
x execute(実行) プログラムやスクリプトとして実行できる ディレクトリに cd で移動できる
- 権限なし その操作は許可されていない その操作は許可されていない
ここで注意してほしいのは、ディレクトリの場合の意味がファイルと少し違うことです。
ディレクトリに x(実行権限)がないと、そのディレクトリに cd で入ることすらできません。
実務でよくある「ディレクトリに入れない」というトラブルの原因は、この x 権限が外れているケースです。

3. 所有者・グループ・その他の3段階

rwx が3組並んでいることに気づいたでしょうか。
先ほどの -rw-r--r-- を分解すると、次のようになります。

位置 文字 対象 意味
1文字目 - ファイルタイプ 通常のファイル
2~4文字目 rw- 所有者(owner) 読み書きOK、実行NG
5~7文字目 r-- グループ(group) 読みOK、書き・実行NG
8~10文字目 r-- その他(others) 読みOK、書き・実行NG
つまり -rw-r--r-- は「所有者は読み書きできるが、それ以外の人は読むことしかできない」という設定です。

Windowsとの大きな違いは、Linuxでは権限を「所有者」「グループ」「その他」の3段階でシンプルに管理しているところです。
「このファイルは誰のもので、誰がどこまで触れるのか」が一目でわかるのがLinuxの強みです。

なお、ls -l の出力には所有者とグループの名前も表示されています。先ほどの出力例でいえば tomohiro tomohiro の部分です(左が所有者、右がグループ)。
自分が所有者かどうかを確認したい場合は、id コマンドで自分のユーザー名を確認しましょう。

パーミッションを変更する ~ chmod の基本

パーミッションの意味がわかったところで、実際に権限を変更してみましょう。
使うのは chmod(Change Mode)コマンドです。

chmod には「記号モード」と「数値モード」の2つの書き方があります。
どちらも同じことができますが、初心者にはまず記号モードがわかりやすいでしょう。

1. 記号モードで変更する

記号モードは、「誰に」「何を」「追加するか・取り消すか」を直感的に書く方法です。

# backup.shを作成して、中身を書き込む echo '#!/bin/bash' > backup.sh echo 'echo バックアップ完了' >> backup.sh # 現在の権限を確認する ls -l backup.sh

実行結果:

-rw-r--r-- 1 tomohiro tomohiro 45 Apr 13 10:15 backup.sh

x(実行権限)がないので、このままでは実行できません。

# 実行しようとするとエラーになる ./backup.sh

実行結果:

-bash: ./backup.sh: Permission denied

所有者に実行権限を追加しましょう。

# 所有者(u)に実行権限(x)を追加する chmod u+x backup.sh # 権限を確認する ls -l backup.sh

実行結果:

-rwxr--r-- 1 tomohiro tomohiro 45 Apr 13 10:15 backup.sh

所有者の部分が rwx に変わりました。これで実行できます。

記号モードの書き方をまとめると、次のとおりです。

・u:所有者(user)
・g:グループ(group)
・o:その他(others)
・a:全員(all)

・+:権限を追加
・-:権限を削除
・=:権限を指定した内容に上書き(例:chmod u=rwx backup.sh)

2. 数値モードで変更する

実務の現場では、数値モード(8進数)で権限を指定する方法のほうが多く使われます。

数値モードでは、r=4、w=2、x=1 として足し算で指定します。

権限 数値 意味
rwx 7 読み+書き+実行(4+2+1)
rw- 6 読み+書き(4+2)
r-x 5 読み+実行(4+1)
r-- 4 読みのみ(4)
--- 0 権限なし
これを所有者・グループ・その他の順に3桁で並べます。

# 所有者=rwx(7)、グループ=r-x(5)、その他=r-x(5) に設定する chmod 755 backup.sh # 権限を確認する ls -l backup.sh

実行結果:

-rwxr-xr-x 1 tomohiro tomohiro 45 Apr 13 10:15 backup.sh

755 と 644 はLinuxで最もよく使う2つの数値です。覚えておきましょう。

chmod の全オプション解説はこの記事の範囲を超えるため、詳しくは「chmodコマンドで権限を変更する方法」をご覧ください。

3. findコマンドと組み合わせた一括変更

ディレクトリ以下にある大量のファイルやフォルダのパーミッションをまとめて変更したい場面があります。
そのときは find コマンドと chmod を組み合わせるのが定番の方法です。

# /var/www/html以下のファイル(-type f)だけを644に変更する sudo find /var/www/html -type f -exec chmod 644 {} \; # /var/www/html以下のディレクトリ(-type d)だけを755に変更する sudo find /var/www/html -type d -exec chmod 755 {} \;

この方法が役に立つのは、Webサーバーのドキュメントルート以下のパーミッションを正しい状態に戻したいときです。
ファイルとディレクトリを分けて処理する理由は、ファイルに実行権限(x)は不要なことがほとんどだからです。
-R(再帰)オプションで一括変更する方法もありますが、ファイルとディレクトリを区別せず 777 を設定してしまうミスが起きやすいため、上記の方法が安全です。

実際に手を動かして確認する ~ WSL2・VPS共通手順

理論を学んだら手を動かすのが一番です。WSL2またはVPSのターミナルで以下の手順を試してみましょう。

1. ホームディレクトリのファイルをまとめて確認する

# ホームディレクトリの詳細一覧を表示する(-a は隠しファイルも含む) ls -la ~

実行結果:

total 48 drwxr-x--- 6 tomohiro tomohiro 4096 Oct 10 08:30 . drwxr-xr-x 3 root root 4096 Jan 10 10:00 .. -rw------- 1 tomohiro tomohiro 987 Oct 9 21:45 .bash_history -rw-r--r-- 1 tomohiro tomohiro 220 Jan 10 10:00 .bash_logout -rw-r--r-- 1 tomohiro tomohiro 3526 Jan 10 10:00 .bashrc -rw-r--r-- 1 tomohiro tomohiro 807 Jan 10 10:00 .profile

ホームディレクトリ自体は drwxr-x---(750)になっています。所有者はフルアクセス、グループは読み・実行のみ、その他のユーザーはアクセス不可という設定です。
.bash_history は -rw-------(600)で、コマンド履歴は所有者だけが読み書きできる設定になっています。

2. テストファイルを作って権限の変化を確認する

# テスト用ファイルを作成する touch ~/test_perm.txt # 作成直後のパーミッションを確認する(umask 022 の環境では 644 になる) ls -l ~/test_perm.txt # -rw-r--r-- 1 tomohiro tomohiro 0 Oct 10 08:35 /home/tomohiro/test_perm.txt # chmodで755に変更してみる chmod 755 ~/test_perm.txt # 変更後を確認する ls -l ~/test_perm.txt # -rwxr-xr-x 1 tomohiro tomohiro 0 Oct 10 08:35 /home/tomohiro/test_perm.txt # 確認できたらテストファイルを削除する rm ~/test_perm.txt

ファイルを作成した直後のパーミッションは、環境の umask(デフォルトの権限マスク)の設定によって決まります。
Ubuntu 24.04 LTS の標準では umask 0022 なので、新規ファイルは 644、新規ディレクトリは 755 になります。

応用:よく使うパーミッション設定

運用の現場でよく目にするパーミッションの設定パターンを紹介します。

数値 記号表記 用途の例
644 rw-r--r-- 一般的なファイル(設定ファイル、HTMLなど)
755 rwxr-xr-x 実行ファイル、シェルスクリプト、ディレクトリ
600 rw------- SSH秘密鍵など、他人に見せてはいけないファイル
700 rwx------ 自分だけが使うスクリプトやディレクトリ
444 r--r--r-- 全員が読めるが、書き込みは誰もできない(読み取り専用)

【重要】chmod 777 の危険性

777(rwxrwxrwx)は「全員が何でもできる」状態です。
本番サーバーで 777 を設定するのはセキュリティ上ご法度です。

「動かないから777にする」というのは、鍵を全部外してドアを開け放つのと同じです。
悪意あるユーザーやプログラムが侵入した際、777 のファイルやディレクトリがあると被害が一気に拡大します。

特にWebサーバーでは次のリスクがあります。

・不正なファイルをアップロードされ、Webシェルを設置される
・設定ファイルが書き換えられ、不正なコードが実行される
・他のユーザーのファイルが読み取られ、パスワードや個人情報が漏洩する

原因を調べて、必要最小限の権限を設定してください。
ほとんどの場合、ファイルは 644、ディレクトリは 755 で解決します。

「Permission denied」が出た時の考え方

Linuxでファイル操作をしていると、必ず出会うエラーがこれです。

# /etc/hostnameを編集しようとする echo myserver > /etc/hostname

実行結果:

-bash: /etc/hostname: Permission denied

このエラーが出たら、焦らずに次の3ステップで原因を特定しましょう。

ステップ1: ls -l で権限を確認する

# ファイルの権限と所有者を確認する ls -l /etc/hostname

実行結果:

-rw-r--r-- 1 root root 10 Apr 13 10:00 /etc/hostname

所有者が root(管理者)で、その他ユーザーには r--(読みのみ)しか許可されていません。
一般ユーザーが書き込もうとしたために Permission denied になったわけです。

ステップ2: 自分が誰か確認する

# 自分のユーザー名とグループを確認する id

実行結果:

uid=1000(tomohiro) gid=1000(tomohiro) groups=1000(tomohiro),4(adm),27(sudo)

自分が tomohiro であり、ファイルの所有者 root ではないことがわかります。

ステップ3: 対処を判断する

・自分のファイルなら → chmod で権限を変更する
・システムファイルなら → sudo をつけて管理者権限で実行する
・他人のファイルなら → ファイルの所有者か管理者に依頼する

システムファイルの場合は sudo を使うのが正解です。

# sudoをつけて管理者権限で書き込む sudo sh -c 'echo myserver > /etc/hostname' # 書き込まれたか確認する cat /etc/hostname

実行結果:

myserver

「Permission denied が出たら、まず ls -l と id で現状を確認する」。
この習慣をつけるだけで、権限トラブルの大半は自力で解決できるようになります。

シェルスクリプトが実行できない場合

シェルスクリプト(.sh ファイル)は作成直後に実行権限(x)がありません。
chmod +x で実行権限を追加するのが定番の対処です。

# スクリプトの現在のパーミッションを確認する ls -l myscript.sh # -rw-r--r-- 1 tomohiro tomohiro 45 Oct 10 08:40 myscript.sh # 実行権限を追加する chmod +x myscript.sh # 実行権限が付いたか確認する ls -l myscript.sh # -rwxr-xr-x 1 tomohiro tomohiro 45 Oct 10 08:40 myscript.sh

SSH接続時に「WARNING: UNPROTECTED PRIVATE KEY FILE!」が出る場合

SSH秘密鍵のパーミッションが緩すぎると、SSHクライアントが接続を拒否します。
秘密鍵は 600、.ssh ディレクトリは 700 に設定するのが必須です。

# SSH秘密鍵は600(所有者のみ読み書き)に設定する chmod 600 ~/.ssh/id_rsa # .sshディレクトリは700(所有者のみアクセス可能)に設定する chmod 700 ~/.ssh # 設定後に確認する ls -la ~/.ssh/

秘密鍵のパーミッションが 644 や 664 になっていると「他の人に読まれる可能性がある」とSSHが判断し、接続を拒否します。
VPSやクラウドサーバーに接続できないときは、まず秘密鍵のパーミッションを確認してみてください。

関連記事 ~ 次のステップへ進む

パーミッションの基本が身についたら、次はより実践的なLinuxスキルに挑戦しましょう。

Linux入門シリーズ
・Linuxとは何か?WindowsやMacとの違いを初心者向けに解説
・Linuxを学ぶメリットとは|初心者が今から始めるべき5つの理由
・WSL2でLinuxを始める手順|インストールから基本コマンドまで
・Linuxのディレクトリ構造を初心者向けに解説
・Linuxのファイル操作入門|コピー・移動・削除の基本コマンドを初心者向けに解説

実務で使うLinuxスキル 7テーマ
・tmuxコマンドでターミナルを分割・管理する方法(シェルスクリプト)
・chmodコマンドで権限を変更する方法(セキュリティ)
・Apacheのタイムアウト設定を変更・確認する方法(サーバー構築)
・straceコマンドでプロセスのシステムコールを追跡する方法(トラブルシューティング)
・ncコマンドでネットワーク接続をテストする方法(ネットワーク)
・rsyncコマンドでファイルを同期・転送する方法(ファイルシステム・ストレージ)
・Linuxでポート番号の状態を確認するコマンド(現場コラム)

本記事のまとめ

この記事では、Linuxのパーミッション(権限)の基本を解説しました。

知りたいこと やること
ファイルの権限を確認する ls -l ファイル名
隠しファイルも含めて詳細表示する ls -la ディレクトリ
rwxの意味を知る r=読み(4)、w=書き(2)、x=実行(1)、-=なし
3組の対象を知る 所有者・グループ・その他の順
記号モードで権限を変更する chmod u+x ファイル名
数値モードで権限を変更する chmod 755 ファイル名
ディレクトリ以下を一括変更する find パス -type f -exec chmod 644 {} \;
Permission denied の原因を調べる ls -l と id で確認
管理者権限で操作する コマンドの先頭に sudo をつける
SSH秘密鍵のパーミッションを設定する chmod 600 ~/.ssh/id_rsa
パーミッションは、Linuxを使ううえで避けて通れない基本中の基本です。
最初は暗号のように見える -rwxr-xr-x も、この記事で解説した3つのルール(ファイルタイプ・rwx・3段階の対象)がわかれば、もう怖くありません。

まずは ls -l でファイルの権限を眺めてみてください。
「読めるけど書き込めない」「実行権限がないから動かない」。そういった状況を自分で読み取れるようになったら、あなたはもうLinuxの権限管理の第一歩を踏み出しています。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンドを「なんとなく打つ」段階から卒業したい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>

<PR>手元に置いて学びを深める1冊

基礎からしっかり学ぶ Linux入門

chmodによるパーミッション設定やアクセス権の仕組みを入門レベルから丁寧に解説しており、まず無料メルマガで学ぶのが第一歩、加えて手元に置くなら本書です。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。