はじめに

こんにちは!今回はchmodコマンドについて解説します。

chmodはファイルやディレクトリのアクセス権限(パーミッション)を変更するコマンドです。「読む」「書く」「実行する」の権限を、所有者・グループ・その他のユーザーに対して設定します。

セキュリティの基本となるコマンドで、Linuxを使う上では絶対に押さえておきたいですね。権限設定がないと、大事なファイルが誰からでも見られてしまったり、修正されてしまったりするので要注意です。


chmodコマンドとは

chmodは、ファイルやディレクトリのアクセス権限を変更する外部コマンドです。“change mode"の略ですね。

Linuxではすべてのファイルに権限が設定されており、誰がそのファイルに対して「読む・書く・実行する」ができるかが決まっています。この権限を変更したい時にchmodを使います。

権限の設定方法は2つあります:

  1. 数字モード(オクタル記法)chmod 755 file.txt のように数字で指定
  2. シンボルモードchmod u+x file.txt のように文字で指定

基本構文

1
chmod [オプション] モード ファイル/ディレクトリ

モードの指定方法:

  • 数字モードchmod 755 file.txt(推奨)
  • シンボルモードchmod u+rwx file.txt

主なオプション

オプション 説明
-R ディレクトリと中身を再帰的に変更
-v 詳細表示(変更内容を表示)
-c 変更があった場合のみ表示
--reference=FILE 別のファイルの権限を参考にして設定

数字モード(オクタル記法)の理解

権限は3桁の数字で表します:

1
2
3
4
5
chmod 755 file.txt
       ↑↑↑
       │└─ その他のユーザーの権限
       └── グループの権限
           所有者の権限

各桁の説明:

  • 1番目(所有者):ファイルの所有者
  • 2番目(グループ):ファイルが属するグループ
  • 3番目(その他):その他すべてのユーザー

各権限の数値:

  • 4(r):読む(read)
  • 2(w):書く(write)
  • 1(x):実行する(execute)

組み合わせ例:

  • 7 = 4 + 2 + 1 = rwx(読む+書く+実行)
  • 6 = 4 + 2 = rw-(読む+書く)
  • 5 = 4 + 1 = r-x(読む+実行)
  • 4 = r--(読むのみ)
  • 0 = ---(権限なし)

使用例

例1: 数字モードで所有者のみ読み書き可能にする

1
chmod 600 secret.txt

実行結果:

1
(成功時は何も表示されない)

secret.txtを所有者のみ読み書き可能(rw-------)に設定します。グループとその他は一切アクセスできません。機密情報を含むファイルに最適です。


例2: スクリプトを実行可能にする

1
chmod 755 script.sh

実行結果:

1
(成功時は何も表示されない)

script.shを実行可能に設定します。所有者は読む・書く・実行、グループとその他は読む・実行ができます。これが最も一般的な設定ですね。


例3: ディレクトリ内のすべてのファイルを一括変更

1
chmod -R 755 myproject/

実行結果:

1
(成功時は何も表示されない)

myprojectディレクトリ配下のすべてのファイル・ディレクトリに対して755を一括適用します。-R(再帰)オプションでサブディレクトリも処理されます。


例4: シンボルモードで所有者に実行権限を追加

1
chmod u+x script.sh

実行結果:

1
(成功時は何も表示されない)

現在の権限に加えて、所有者(u)に実行権限(x)を追加します。既存の権限を保ったまま変更できるので便利です。


例5: グループから書き込み権限を削除

1
chmod g-w file.txt

実行結果:

1
(成功時は何も表示されない)

グループ(g)から書き込み権限(w)を削除します。読む・実行の権限は変わりません。


例6: その他のユーザーから権限をすべて削除

1
chmod o= file.txt

実行結果:

1
(成功時は何も表示されない)

その他(o)のすべての権限を削除します。所有者とグループのみアクセス可能になります。


例7: 複数のユーザーに権限を付与

1
chmod u+rwx,g+rx,o-rwx file.txt

実行結果:

1
(成功時は何も表示されない)

複数の変更を同時に実行:

  • 所有者に読む・書く・実行を追加
  • グループに読む・実行を追加
  • その他から読む・書く・実行をすべて削除

例8: Webサーバーディレクトリの標準権限設定

1
2
chmod 644 *.html
chmod 755 *.php

実行結果:

1
(成功時は何も表示されない)

HTMLファイルは読むのみ(644)、PHPファイルは読む・実行(755)に設定します。Webサーバーの実行ファイルと静的ファイルで権限を分けます。


例9: 詳細表示付きで確認しながら変更

1
chmod -v 644 report.txt

実行結果:

1
mode of 'report.txt' changed from 0644 (rw-r--r--) to 0644 (rw-r--r--)

-vオプションで変更内容を表示します。大量のファイルを変更する時に便利です。


例10: 別ファイルの権限を参考にして設定

1
chmod --reference=template.txt newfile.txt

実行結果:

1
(成功時は何も表示されない)

template.txtと同じ権限をnewfile.txtに適用します。テンプレートファイルに合わせて権限を設定したい時に便利です。


Tips・注意点

シンボルモードとオクタルモードの使い分け

1
2
3
4
5
# オクタルモード:完全に上書き(推奨)
chmod 755 script.sh

# シンボルモード:既存権限を保ったまま変更
chmod u+x script.sh

オクタルモードは既存の権限を完全に上書きします。シンボルモードは特定の権限だけ追加・削除できるので、既存設定を保ちたい時に便利です。


よくある間違い:ファイルと実行ファイルを区別

1
2
3
4
5
# ✗ 間違い:実行可能にしたい時に644を使う
chmod 644 script.sh

# ✓ 正しい:実行可能にするには755
chmod 755 script.sh

実行ファイルには必ずx(実行権限)が必要です。単に644では実行できません。


セキュリティ注意:過度な権限は避ける

1
2
3
4
5
# ✗ 危険:誰もが修正可能
chmod 777 sensitive_data.txt

# ✓ 安全:所有者のみ修正可能
chmod 644 sensitive_data.txt

777(完全オープン)は、よほど理由がない限り使わないでください。セキュリティリスクです。


ディレクトリ権限の意味

1
2
3
4
# ディレクトリに対する権限
r: ディレクトリ内のファイル一覧を表示できる
w: ディレクトリにファイル作成・削除・リネームができる
x: ディレクトリに入ることができる(cd可能)

ディレクトリではファイルとは異なる意味を持ちます。アクセスできなくなるので注意!


実践的な使い方

バックアップファイルを保護する

1
chmod 600 backup_2025.tar.gz

バックアップファイルを所有者のみが読める状態に変更。重要なデータの漏洩を防ぎます。


シェルスクリプトを実行可能にする

1
2
chmod +x deploy.sh
chmod +x /home/user/bin/*.sh

作成したシェルスクリプトを実行可能にします。u+x+xは同じですが、後者は所有者・グループ・その他のユーザーすべてに実行権限を付与します。


Webプロジェクトの権限設定(典型例)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# ディレクトリは755(アクセス・実行必須)
chmod 755 /var/www/myapp
chmod 755 /var/www/myapp/public
chmod 755 /var/www/myapp/src

# PHPファイルは755(Webサーバーが実行)
chmod 755 /var/www/myapp/index.php

# 静的ファイルは644(読むのみ)
chmod 644 /var/www/myapp/public/*.html
chmod 644 /var/www/myapp/public/*.css
chmod 644 /var/www/myapp/public/*.js

# 設定ファイルは600(所有者のみ)
chmod 600 /var/www/myapp/config.php
chmod 600 /var/www/myapp/.env

Webアプリケーションの一般的な権限設定です。ファイルタイプに応じて適切に分ける必要があります。


プロジェクト全体を一括設定

1
2
3
4
5
6
# ディレクトリとファイルで異なる権限を設定
find myproject -type d -exec chmod 755 {} \;
find myproject -type f -exec chmod 644 {} \;

# または、より簡潔に
chmod -R u+rwX,go+rX myproject/

-Rfindを組み合わせて、ディレクトリとファイルで異なる権限を設定できます。Xは「実行権限を持つファイルのみ」という意味です。


まとめ

chmodコマンドのポイント:

  • 数字モードが標準:chmod 755 file.txt
  • 4=読む、2=書く、1=実行(合計で権限を表現)
  • -R:ディレクトリを再帰的に変更
  • 実行ファイルには755静的ファイルには644が基本
  • 777は危険:セキュリティ上よほど理由がない限り使わない
  • よく使う組み合わせ:chmod 755, chmod 644, chmod 600, chmod +x

Linuxのセキュリティを守る重要なコマンドです。ファイルタイプ別の標準的な権限設定を覚えておくと、トラブル知らずですよ!