InfraAcademy

InfraAcademy Blog

Linuxのファイル権限とは?chmodの数字・rwx・Permission deniedを解説

こんにちは、インフラエンジニアのryuです。

Linuxでファイルを編集したら、Permission deniedと表示された。 chmod 755644を見ても、数字の意味が分からない。

そんなことはありませんか?

Linuxでは、ファイルやディレクトリごとに、誰が読み込み、書き込み、実行できるのかを設定します。

この記事では、権限の確認方法、rwxと数字の読み方、chmodchownの使い方を解説します。

Linuxのファイル権限とは?

ファイル権限とは、ユーザーがファイルやディレクトリに対して行える操作を制限する仕組みです。

重要な設定ファイルを誰でも変更できると、誤操作や不正な書き換えにつながります。

権限が必要な理由

Linuxは、複数のユーザーやサービスが同時に利用することを前提としています。

そのため、所有者やグループごとに操作範囲を分けています。

例えば、設定ファイルは管理者だけが変更し、一般ユーザーは読み取りだけにできます。

読み込み・書き込み・実行の3種類

Linuxの基本的な権限は、rwxの3種類です。

表示 権限 ファイルでの意味 ディレクトリでの意味
r read 内容を読み取る 中の名前を一覧表示する
w write 内容を書き換える 中にファイルを作成・削除する
x execute プログラムとして実行する 中へ移動し、項目へアクセスする

ディレクトリでは、権限の意味が少し異なります。

例えば、ディレクトリにrがあってもxがなければ、一覧は見えても中のファイルへ正常にアクセスできない場合があります。

Linuxの権限を確認する方法

権限を変更する前に、現在の状態を確認しましょう。

ここではls -lstatを使います。

ls -lで確認する

以下のコマンドを実行します。

ls -l test.txt

実行結果の例です。

-rw-r----- 1 user1 developers 1200 Jul 15 10:00 test.txt

左側の-rw-r-----が、ファイルの種類と権限を表しています。

後ろのuser1は所有ユーザー、developersは所有グループです。

10文字の権限表示を読む

-rw-r-----は、次の4つに分けて読みます。

- | rw- | r-- | ---
    所有者  グループ  その他

先頭の1文字はファイルの種類です。

表示 種類
- 通常ファイル
d ディレクトリ
l シンボリックリンク

残りの9文字は、所有者、所有グループ、その他のユーザーの順に3文字ずつ並びます。

この例では、所有者は読み書きでき、グループは読み取りだけ、その他のユーザーには権限がありません。

Linux権限の確認

statで数字の権限も確認する

statを使うと、記号と数字をまとめて確認できます。

stat -c '%A %a %U %G %n' test.txt

実行結果は次のようになります。

-rw-r----- 640 user1 developers test.txt

640が数字で表した権限です。

chmodでファイル権限を変更する

ファイルやディレクトリの権限は、chmodコマンドで変更します。

権限は数字または記号で指定できます。

数字で権限を指定する

基本的な書式は以下です。

chmod 640 test.txt

3桁は、左から所有者、所有グループ、その他のユーザーを表します。

Linux権限の割り当て方法

各桁は、次の数字を足して作ります。

権限 数字
読み込みr 4
書き込みw 2
実行x 1
権限なし 0

例えば、読み込みと書き込みなら4 + 2 = 6です。

読み込みと実行なら4 + 1 = 5になります。

権限の数字の作り方

よく使う644・755・600・700

よく使う権限は以下です。

数字 記号 主な例
644 rw-r--r-- 一般的な設定ファイルやテキスト
755 rwxr-xr-x 実行ファイルや公開ディレクトリ
600 rw------- 秘密鍵や所有者だけが読むファイル
700 rwx------ 所有者だけが使うディレクトリ
640 rw-r----- 所有者とグループだけで共有するファイル

これらは代表例です。

必要な人へ、必要な操作だけを許可することが基本です。

記号で権限を変更する

記号形式では、変更する対象と操作を指定します。

記号 意味
u 所有ユーザー
g 所有グループ
o その他のユーザー
a すべて
+ 権限を追加
- 権限を削除
= 権限を指定内容に設定

所有者へ実行権限を追加する場合は、以下の通りです。

chmod u+x script.sh

その他のユーザーから書き込み権限を削除します。

chmod o-w test.txt

グループを読み取り専用にする場合は、次のように指定します。

chmod g=r test.txt

一部だけ変更するときは、記号形式の方が意図を伝えやすいです。

ディレクトリ内を再帰的に変更する

-Rを付けると、ディレクトリ以下をまとめて変更できます。

chmod -R 755 public/

ただし、ファイルにも実行権限が付くため、安易な一括変更はおすすめしません。

ディレクトリとファイルを分ける場合は、findを使えます。

find public -type d -exec chmod 755 {} +
find public -type f -exec chmod 644 {} +

実行前にfindだけで対象を確認しましょう。

所有者とグループを変更する

権限が正しくても、所有者が想定と違うと操作できない場合があります。

所有者や所有グループはchownで変更します。

chownで所有者を変更する

所有者をuser1へ変更します。

sudo chown user1 test.txt

所有者とグループを同時に変更する場合は、コロンで区切ります。

sudo chown user1:developers test.txt

所有グループだけを変更する場合は、chgrpも使えます。

sudo chgrp developers test.txt

詳しい使い方は、Linuxのchownコマンドで所有者を変更する方法も参考にしてください。

再帰的なchownに注意する

ディレクトリ以下をまとめて変更する場合は、-Rを付けます。

sudo chown -R user1:developers project/

実行範囲を間違えると、OSに必要な所有者まで変わる可能性があります。

sudo chown -Rを実行する前に、現在地と対象パスを必ず確認してください。

Permission deniedが出たときの確認方法

Permission deniedが出ても、すぐにchmod 777を実行してはいけません。

まず、どの権限が不足しているのか確認します。

対象ファイルの権限を確認する

最初に、対象の権限と所有者を確認します。

ls -l test.txt
id

idでは、現在のユーザーと所属グループを確認できます。

uid=1001(user1) gid=1001(user1) groups=1001(user1),1002(developers)

ファイルの所有グループに所属しているかも確認しましょう。

親ディレクトリの権限を確認する

ファイル自体に権限があっても、親ディレクトリへ入れなければアクセスできません。

namei -l /var/www/app/config.ini

namei -lを使うと、パスの各階層の所有者と権限を確認できます。

コマンドがない環境では、各ディレクトリへls -ldを実行します。

ls -ld /var /var/www /var/www/app

ディレクトリには、途中の階層を通過するためのx権限が必要です。

削除できない場合はディレクトリを見る

ファイルを削除できるかどうかは、ファイル自身の書き込み権限だけでは決まりません。

基本的には、そのファイルが置かれているディレクトリのwx権限が関係します。

ls -ld .
ls -l target.txt

削除時のエラーについては、Permission deniedでファイルを削除できない場合の対処方法で解説しています。

chmod 777を安易に使ってはいけない

777は、所有者、グループ、その他の全員へ読み書き実行を許可します。

rwxrwxrwx

エラーは消えても、不要なユーザーへ書き込みを許可します。

必要な権限だけを付ける

実行ファイルなら、所有者へxを追加するだけで解決するかもしれません。

chmod u+x script.sh

グループで共有するなら、所有グループとグループ権限を調整します。

sudo chown user1:developers report.txt
chmod 660 report.txt

権限エラーは、所有者、グループ、親ディレクトリも含めて判断しましょう。

Linuxのファイル権限まとめ

Linuxの基本権限は、読み込みr、書き込みw、実行xの3種類です。

権限は所有者、所有グループ、その他のユーザーごとに設定されます。

現在の状態はls -lで確認できます。

ls -l test.txt

変更はchmod、所有者の変更はchownを使います。

chmod 640 test.txt
sudo chown user1:developers test.txt

エンジニアとして10年以上Linuxを扱っていますが、権限エラーが出たときに、私は最初から777へ変更しません。

ファイル、親ディレクトリ、所有者、実行ユーザーを確認し、不足している権限だけを変更します。

エラーを消すことではなく、必要最小限の権限で正しく動かすことが大切です。

Linuxの権限を実際に練習したい方へ

InfraAcademyでは、ブラウザ上のLinux環境でファイルを作成し、chmodやchownを実行しながら学習できます。

基本的なファイル操作から学びたい方は、Linux入門講座を確認してみてください。

権限管理まで学びたい方は、Linux中級講座がおすすめです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る