Linuxのchmodコマンドとは?権限変更・755/644の意味・実行権限を解説

コマンドリファレンス

Linuxでファイルやディレクトリの権限を変更するには chmod コマンドを使います。本記事では、rwx の意味から数値指定(755・644・600)、記号指定(u+x など)、再帰変更、よくある失敗例まで、実務で必要な知識を整理します。

chmodコマンドとは

chmod(change mode)は、Linuxでファイルやディレクトリのアクセス権限(パーミッション)を変更するコマンドです。「誰が・何をできるか」をファイルごとに制御します。

基本的な構文は以下のとおりです。

chmod [オプション] モード ファイル名

ls -l で現在の権限を確認する

権限を変更する前に、現在の設定を確認しましょう。ls -l コマンドで確認できます。

$ ls -l
-rw-r--r-- 1 alice users 1024 Jun  9 10:00 file.txt
drwxr-xr-x 2 alice users 4096 Jun  9 10:00 mydir/

先頭の10文字がパーミッション情報です。

  • 1文字目:ファイル種別(- は通常ファイル、d はディレクトリ)
  • 2〜4文字目:所有者の権限(rw-
  • 5〜7文字目:グループの権限(r--
  • 8〜10文字目:その他のユーザーの権限(r--

rwx の意味

パーミッションは rwx の3種類の組み合わせで表されます。

  • r(read):読み取り権限。ファイルの内容を読める、ディレクトリの一覧を表示できる
  • w(write):書き込み権限。ファイルの内容を変更できる、ディレクトリ内にファイルを作成・削除できる
  • x(execute):実行権限。ファイルをプログラムとして実行できる、ディレクトリに移動(cd)できる

権限がない場合は - で表示されます(例:rw- は読み書きのみ、実行不可)。

所有者・グループ・その他の違い

権限は3つのカテゴリに対して設定されます。

  • 所有者(user / u):ファイルを作成したユーザー
  • グループ(group / g):ファイルに紐付いたグループに属するユーザー
  • その他(others / o):所有者でも同じグループでもない全ユーザー

たとえば -rwxr-xr-- は「所有者は読み書き実行可、グループは読み実行可、その他は読み取りのみ」を意味します。

数値指定の考え方(r=4, w=2, x=1)

chmodでは権限を数値(8進数)で指定できます。各権限に対応する数値は次のとおりです。

  • r(read)= 4
  • w(write)= 2
  • x(execute)= 1

これらを足し合わせた値を、所有者・グループ・その他の順で3桁で指定します。

例:755 の場合

  • 所有者:7 = 4+2+1 = rwx(読み書き実行)
  • グループ:5 = 4+1 = r-x(読み取りと実行)
  • その他:5 = 4+1 = r-x(読み取りと実行)

よく使う権限設定の一覧

実務でよく使う権限設定をまとめます。

chmod 755(公開スクリプト・実行ファイル)

chmod 755 script.sh

所有者は読み書き実行、グループとその他は読み取りと実行が可能です。Webサーバーのディレクトリやシェルスクリプトに適しています。

chmod 644(一般的なファイル)

chmod 644 file.txt

所有者は読み書き可、グループとその他は読み取りのみです。HTMLファイルや設定ファイルの標準的な権限です。

chmod 600(秘密鍵・パスワードファイル)

chmod 600 ~/.ssh/id_rsa

所有者だけが読み書き可能で、他のユーザーは一切アクセスできません。SSHの秘密鍵など機密ファイルに使います。

chmod 700(個人専用ディレクトリ)

chmod 700 ~/private_dir

所有者だけが読み書き実行可で、他のユーザーはアクセスできません。個人の作業ディレクトリなどに使います。

ディレクトリの実行権限(x)が意味すること

ディレクトリの x 権限は「移動(通過)権限」を意味します。x がないと、cd でそのディレクトリに入れなくなります。

chmod 644 mydir/   # xを外すと入れなくなる(危険)
cd mydir           # Permission denied

ディレクトリには通常 x を付けておく必要があります。r だけでは ls が一部動いても cd できません。

記号指定の使い方(u+x, g-w, o-r)

記号指定では、対象(u/g/o/a)と操作(+/-/=)と権限(r/w/x)を組み合わせます。現在の権限に対して差分で変更できるため、他の権限を変えずに特定の権限だけを追加・削除できます。

実行権限を追加する

chmod u+x script.sh   # 所有者に実行権限を追加
chmod a+x script.sh   # 全員に実行権限を追加(a = all)

権限を削除する

chmod g-w file.txt    # グループから書き込み権限を削除
chmod o-r secret.txt  # その他のユーザーから読み取り権限を削除

複数の変更を同時に行う

chmod u+x,g-w file.txt  # 所有者に実行追加 + グループから書き込み削除

再帰的に権限を変更する(chmod -R)

ディレクトリ以下のすべてのファイルとサブディレクトリの権限をまとめて変更するには -R(recursive)オプションを使います。

chmod -R 755 /var/www/html

chmod -R の危険性と注意点

chmod -R は便利ですが、ファイルとディレクトリを区別せずに同じ権限を設定してしまいます。

問題点:ファイルに 755 を設定すると実行権限(x)が付与されますが、通常のファイル(設定ファイル・テキストファイル)に実行権限は不要です。

ファイルとディレクトリを分けて適用するには find コマンドと組み合わせます。

# ディレクトリのみ 755 に設定
find /var/www/html -type d -exec chmod 755 {} \;

# ファイルのみ 644 に設定
find /var/www/html -type f -exec chmod 644 {} \;

ファイルとディレクトリで適切な権限が違う

権限設定はファイルとディレクトリで意味が異なります。適切な設定の目安は次のとおりです。

  • 通常ファイル:644(所有者が読み書き、他は読み取りのみ)
  • 実行ファイル・スクリプト:755(所有者が読み書き実行、他は読み実行)
  • 機密ファイル:600(所有者だけ読み書き)
  • ディレクトリ:755(所有者が読み書き実行、他は読み実行)
  • 個人専用ディレクトリ:700(所有者だけアクセス可)

シェルスクリプトに実行権限を付ける

作成したシェルスクリプトを実行するには、実行権限が必要です。

vim deploy.sh         # スクリプトを作成
chmod +x deploy.sh    # 実行権限を付与
./deploy.sh           # 実行

chmod +xchmod a+x と同じで、全員に実行権限を追加します。特定のユーザーだけに付けたい場合は chmod u+x を使います。

WebサーバーやWordPressでの権限例

Webサーバーのファイルには適切な権限設定が必要です。権限が緩すぎると不正アクセスのリスクがあり、厳しすぎるとWebサーバーが読めなくなります。

  • ディレクトリ:755
  • PHPファイル・HTMLファイル:644
  • 設定ファイル(wp-config.php など):600 または 640
  • uploads ディレクトリ:755(Webサーバーが書き込めるよう所有者を合わせること)
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
chmod 600 /var/www/html/wp-config.php

chownとの違い

chmodchown は似ていますが、変更対象が異なります。

  • chmod:権限(誰が何をできるか)を変更する
  • chown:所有者・グループを変更する
chmod 644 file.txt           # 権限を変更
chown alice:users file.txt   # 所有者を alice、グループを users に変更

「Webサーバーがファイルを書き込めない」という問題は、権限ではなく所有者の問題であることが多いです。その場合は chown でWebサーバーのユーザー(wwwやwww-dataなど)に所有者を変更します。

よくある失敗例

777を安易に使う

chmod 777 /var/www/html   # 危険:全ユーザーが読み書き実行可

777 は全ユーザーに全権限を与えます。Webサーバー上でこれを使うと、他のユーザーやWebから実行されるスクリプトが書き込みや実行ができてしまい、セキュリティリスクが非常に高くなります。

ディレクトリの実行権限を外して入れなくなる

chmod 644 /home/alice   # xを外すとホームディレクトリに入れなくなる

ディレクトリの x を外すと cd できなくなります。重要なディレクトリで実行してしまうと、自分でも操作できなくなる場合があります。

chmod -R で意図しない範囲まで変更する

chmod -R 777 /   # 最悪の例:システム全体の権限を変更してしまう

chmod -R は指定したパス以下のすべてに適用されます。対象のパスを間違えると取り返しのつかない事態になります。実行前にパスを必ず確認しましょう。

所有者の問題をchmodで解決しようとする

「ファイルにアクセスできない」という問題が所有者(chown)の問題なのに chmod 777 で解決しようとするのはよくある失敗です。まず ls -l で所有者を確認し、問題の原因を特定してから適切なコマンドを選択します。

よくある疑問

chmodは何をするコマンドか

ファイルやディレクトリのアクセス権限(パーミッション)を変更するコマンドです。「誰が読める・書ける・実行できるか」を設定します。

755や644は何を意味するか

3桁の数値はそれぞれ所有者・グループ・その他の権限を表します。各桁は r=4, w=2, x=1 の合計です。755は「所有者が読み書き実行(7)、グループとその他が読み実行(5)」、644は「所有者が読み書き(6)、グループとその他が読み取りのみ(4)」を意味します。

実行権限を付けるにはどうするか

chmod +x script.sh    # 全員に実行権限を追加
chmod u+x script.sh   # 所有者だけに実行権限を追加

ディレクトリのx権限は何を意味するか

ディレクトリの x 権限は「移動(通過)権限」です。x がないと cd でそのディレクトリに入れません。ディレクトリには通常 x を設定しておく必要があります。

chmodとchownは何が違うか

chmod は権限(読み書き実行)を変更し、chown は所有者・グループを変更します。アクセスできない問題の原因が権限なのか所有者なのかを ls -l で確認してから、適切なコマンドを使いましょう。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント