ファイル操作

Linux chmodコマンド入門|ファイルのアクセス権限を変更する

Linux chmod 権限管理

Linux chmodコマンド入門
ファイルのアクセス権限を変更する

chmodコマンドでファイルの読み取り・書き込み・実行権限を変更する方法を数値モードとシンボリックモードで解説します。

こんな人向けの記事です

  • Linuxのファイル権限の仕組みを理解したい方
  • スクリプトに実行権限を付与する方法を知りたい方
  • Webサーバーやアプリの権限設定を適切に行いたい方

Step 1権限の基本概念

Linuxのファイル権限は「所有者」「グループ」「その他」の3つのカテゴリに対して「読み取り(r)」「書き込み(w)」「実行(x)」の3種類があります。

ターミナル
# 権限を確認
ls -l file.txt
# 出力例: -rw-r--r-- 1 user group 1024 Mar 14 file.txt
#          ↑↑↑↑↑↑↑↑↑
#          │├┤├┤├┤
#          │ │ │ └── その他: r-- (読み取りのみ)
#          │ │ └──── グループ: r-- (読み取りのみ)
#          │ └────── 所有者: rw- (読み書き)
#          └──────── ファイルタイプ: - (通常ファイル)
記号数値説明
r4読み取り(ファイル内容の閲覧)
w2書き込み(ファイル内容の変更)
x1実行(プログラムとして実行)
-0権限なし

Step 2数値モード(8進数)で変更する

3桁の数字で「所有者」「グループ」「その他」の権限をまとめて指定します。各桁はr(4)+w(2)+x(1)の合計値です。

ターミナル
# 基本的な数値モード
chmod 755 script.sh      # rwxr-xr-x(所有者:全権限、他:読み+実行)
chmod 644 file.txt       # rw-r--r--(所有者:読み書き、他:読みのみ)
chmod 600 secret.key     # rw-------(所有者のみ読み書き)
chmod 777 public.txt     # rwxrwxrwx(全員に全権限)
chmod 700 private_dir/   # rwx------(所有者のみ全権限)

# よく使う権限パターン
# 755: 実行可能スクリプト
# 644: 一般的なファイル
# 600: 秘密鍵・設定ファイル
# 700: プライベートディレクトリ

数値の計算方法: r=4, w=2, x=1の合計。例えば755は所有者7(4+2+1=rwx)、グループ5(4+0+1=r-x)、その他5(4+0+1=r-x)です。

Step 3シンボリックモードで変更する

記号を使って直感的に権限を変更する方法です。部分的な変更に適しています。

ターミナル
# 実行権限を追加
chmod +x script.sh           # 全員に実行権限を追加
chmod u+x script.sh          # 所有者のみ実行権限を追加

# 書き込み権限を削除
chmod go-w file.txt          # グループとその他から書き込み削除

# 権限を設定(=で上書き)
chmod u=rwx,go=rx script.sh  # 所有者:rwx、他:rx

# 対象の指定
# u: 所有者(user)  g: グループ(group)
# o: その他(other)  a: 全員(all)
操作説明
+権限を追加chmod +x file
-権限を削除chmod -w file
=権限を設定(上書き)chmod u=rwx file
u所有者chmod u+x file
gグループchmod g+w file
oその他chmod o-x file
a全員chmod a+r file

Step 4よく使うオプション一覧

chmodコマンドの主要なオプションを紹介します。

ターミナル
# ディレクトリ内を再帰的に変更
chmod -R 755 /var/www/html/

# 変更内容を詳細表示
chmod -v 644 file.txt

# 変更があった場合のみ表示
chmod -c 755 script.sh
オプション説明
-Rディレクトリ内を再帰的に変更
-v変更内容を詳細表示
-c変更があった場合のみ表示
--reference=FILE参照ファイルと同じ権限に設定

Step 5実践的な使用例

Webサーバー設定やスクリプト管理での実践例を紹介します。

ターミナル
# シェルスクリプトに実行権限を付与
chmod +x deploy.sh

# SSH鍵の権限設定(必須)
chmod 600 ~/.ssh/id_rsa          # 秘密鍵
chmod 644 ~/.ssh/id_rsa.pub      # 公開鍵
chmod 700 ~/.ssh/                # .sshディレクトリ

# Webサーバーの権限設定
chmod -R 755 /var/www/html/      # ドキュメントルート
chmod 644 /var/www/html/*.html   # HTMLファイル

# ディレクトリとファイルで異なる権限を設定
find /var/www -type d -exec chmod 755 {} +
find /var/www -type f -exec chmod 644 {} +

# 設定ファイルの保護
chmod 600 .env
chmod 600 config/database.yml

注意: chmod 777は全員に全権限を与えるため、セキュリティリスクが高くなります。本番環境では必要最小限の権限を設定しましょう。SSH鍵は600以外の権限だとSSH接続が拒否されます。