Linuxでは、ファイルやディレクトリに対して「誰が何をできるか」というアクセス権(パーミッション)を細かく設定できます。
この権限を操作するための基本コマンドがchmod
(change mode)です。
「ファイルを実行できない」
「他人に読み取らせたくない」
「セキュリティを強化したい」
などの課題も、chmod
を使えば解決できます。
この記事では、chmod
コマンドの基本から応用までを表と実例でわかりやすく解説します!
chmodとは?何ができる?

chmodの基本概念
chmod
は「ファイルやディレクトリのアクセス権限(パーミッション)を変更する」コマンドです。
Linuxの権限システム:
- すべてのファイル・ディレクトリには所有者が存在
- 3つの権限(読み取り・書き込み・実行)× 3つの対象(所有者・グループ・その他)= 9つの権限設定
権限を変更できる対象
対象 | 記号 | 説明 |
---|---|---|
所有者(user) | u | ファイルの所有者 |
グループ(group) | g | ファイルが属するグループのメンバー |
その他(others) | o | 所有者とグループ以外のすべてのユーザー |
全体(all) | a | 上記すべてを含む |
3つの基本権限
権限 | 記号 | ファイルの場合 | ディレクトリの場合 |
---|---|---|---|
読み取り | r | ファイル内容の表示 | ディレクトリ内容の一覧表示 |
書き込み | w | ファイル内容の変更・削除 | ディレクトリ内のファイル作成・削除 |
実行 | x | ファイルの実行 | ディレクトリへの移動(cd) |
実際の使用場面
よくあるシチュエーション:
- スクリプトファイルを実行可能にしたい
- 機密ファイルを他人から隠したい
- Webサーバーのファイル権限を適切に設定したい
- 共有フォルダの権限を調整したい
chmodの基本構文と使い方
2つの指定方法
chmodには2つの権限指定方法があります:
1. 数値モード(8進数)
chmod [パーミッション(3桁数字)] [ファイル名]
2. 記号モード(シンボリック)
chmod [対象][演算子][権限] [ファイル名]
演算子の種類
演算子 | 意味 | 使用例 |
---|---|---|
+ | 権限を追加 | chmod u+x file.txt |
- | 権限を削除 | chmod go-r secret.txt |
= | 指定した権限に上書き | chmod a=r document.txt |
オプション
オプション | 説明 | 使用例 |
---|---|---|
-R | 再帰的に適用(ディレクトリ内すべて) | chmod -R 755 /home/user/ |
-v | 詳細な出力(verbose) | chmod -v 644 file.txt |
-c | 変更があった場合のみ出力 | chmod -c +x script.sh |
--help | ヘルプ表示 | chmod --help |
数値モード(3桁数字)での指定
権限の数値表現
数値モードでは、各権限を数値で表現します:
権限 | 数値 | 意味 |
---|---|---|
r (読み取り) | 4 | ファイル内容を読む |
w (書き込み) | 2 | ファイル内容を変更 |
x (実行) | 1 | ファイルを実行またはディレクトリに移動 |
数値の組み合わせ
権限は数値を足し算して表現します:
数字 | 権限の組み合わせ | 記号表示 | 説明 |
---|---|---|---|
7 | 4+2+1 (r+w+x) | rwx | 読み・書き・実行すべて可能 |
6 | 4+2 (r+w) | rw- | 読み・書き可能、実行不可 |
5 | 4+1 (r+x) | r-x | 読み・実行可能、書き込み不可 |
4 | 4 (r) | r-- | 読み取りのみ |
3 | 2+1 (w+x) | -wx | 書き込み・実行可能、読み取り不可 |
2 | 2 (w) | -w- | 書き込みのみ |
1 | 1 (x) | --x | 実行のみ |
0 | なし | --- | 何も許可しない |
よく使われる数値の組み合わせ
パーミッション | 意味 | 用途 |
---|---|---|
755 | rwxr-xr-x | 実行ファイル・ディレクトリの標準設定 |
644 | rw-r–r– | 一般的なファイルの標準設定 |
600 | rw——- | 所有者のみアクセス可能な機密ファイル |
700 | rwx—— | 所有者のみアクセス可能なディレクトリ |
777 | rwxrwxrwx | 誰でもフルアクセス(セキュリティリスク大) |
000 | ——— | 誰もアクセス不可 |
実例:数値モードでの設定
例1:スクリプトファイルの設定
chmod 755 install.sh
- 所有者:読み・書き・実行(7)
- グループ:読み・実行(5)
- その他:読み・実行(5)
例2:設定ファイルの保護
chmod 600 ~/.ssh/id_rsa
- 所有者:読み・書き(6)
- グループ:アクセス不可(0)
- その他:アクセス不可(0)
例3:Webサイトのファイル設定
chmod 644 index.html
- 所有者:読み・書き(6)
- グループ:読み取りのみ(4)
- その他:読み取りのみ(4)
記号モード(シンボリック)での指定

記号モードの利点
記号モードは部分的な権限変更に適しています:
- 既存の権限を維持しながら一部だけ変更
- より直感的で理解しやすい
- 細かい調整が可能
対象の指定
記号 | 対象 | 説明 |
---|---|---|
u | user(所有者) | ファイルの所有者 |
g | group(グループ) | ファイルが属するグループ |
o | others(その他) | 所有者・グループ以外 |
a | all(全員) | すべてのユーザー(省略可) |
実例:記号モードでの設定
例1:実行権限の追加
chmod u+x script.sh
# 所有者に実行権限を追加
chmod +x script.sh
# 全員に実行権限を追加(aは省略可能)
例2:権限の削除
chmod go-r secret.txt
# グループとその他から読み取り権限を削除
chmod a-w readonly.txt
# すべてのユーザーから書き込み権限を削除
例3:権限の上書き
chmod u=rwx,go=r file.txt
# 所有者:読み・書き・実行、グループ・その他:読み取りのみ
chmod a=r document.txt
# すべてのユーザーに読み取りのみを許可
例4:複雑な組み合わせ
chmod u+rw,g+r,o-rwx private.txt
# 所有者:読み・書き追加、グループ:読み取り追加、その他:すべて削除
数値モードと記号モードの使い分け
場面 | 推奨モード | 理由 |
---|---|---|
新規ファイルの権限設定 | 数値モード | 一括で明確な権限設定 |
既存権限の微調整 | 記号モード | 既存設定を維持しながら変更 |
スクリプトでの自動設定 | 数値モード | 確実で予測可能 |
一時的な権限変更 | 記号モード | 元に戻すのが簡単 |
chmodの実用例集
Webサーバーでの使用例
Webサイトファイルの標準設定:
# HTMLファイル
chmod 644 *.html
# CSSファイル
chmod 644 *.css
# JavaScriptファイル
chmod 644 *.js
# CGIスクリプト
chmod 755 *.cgi
# ディレクトリ
chmod 755 public_html/
開発環境での使用例
スクリプトファイルの管理:
# 開発中のスクリプト(テスト実行可能)
chmod 754 dev_script.sh
# 本番用スクリプト(グループ実行可能)
chmod 750 prod_script.sh
# ビルドスクリプト(所有者のみ実行)
chmod 700 build.sh
セキュリティ重視の設定例
機密ファイルの保護:
# SSH秘密鍵
chmod 600 ~/.ssh/id_rsa
# パスワードファイル
chmod 600 /etc/shadow
# 設定ファイル
chmod 640 /etc/mysql/my.cnf
# ログファイル
chmod 640 /var/log/application.log
共有環境での設定例
チーム開発での権限設定:
# 共有ドキュメント(チーム読み書き可能)
chmod 664 team_doc.txt
# 共有スクリプト(チーム実行可能)
chmod 775 shared_script.sh
# プロジェクトディレクトリ
chmod 775 project_dir/
# 一時ファイル(全員読み書き可能)
chmod 666 temp_file.txt
再帰的な権限設定
ディレクトリ全体の権限設定:
# Webサイト全体の設定
chmod -R 644 /var/www/html/
find /var/www/html/ -type d -exec chmod 755 {} \;
# ユーザーホームディレクトリの設定
chmod -R 700 /home/username/
# 共有データディレクトリ
chmod -R 775 /shared/data/
注意: -R
オプションは強力ですが、間違って使うと大量のファイルに影響するため、事前にls -la
で確認することを推奨します。
パーミッションの確認方法

ls -l コマンドでの確認
基本的な確認方法:
ls -l filename
出力例:
-rwxr-xr-x 1 user group 1234 Oct 15 10:30 script.sh
出力の読み方:
部分 | 意味 |
---|---|
最初の文字 | ファイルタイプ(- :ファイル、d :ディレクトリ、l :リンク) |
2-4文字目 | 所有者の権限(rwx ) |
5-7文字目 | グループの権限(r-x ) |
8-10文字目 | その他の権限(r-x ) |
ディレクトリ内のファイル一覧確認
# 詳細な一覧表示
ls -la
# 権限のみに注目した表示
ls -l | awk '{print $1, $9}'
# 特定のパターンのファイル確認
ls -l *.sh
数値形式での権限確認
# statコマンドで数値形式の権限確認
stat -c "%a %n" filename
# 例:755 script.sh
高度なchmodテクニック
特殊権限の設定
SUID(Set User ID):
chmod 4755 command
# 実行時に所有者の権限で動作
SGID(Set Group ID):
chmod 2755 directory
# ディレクトリ内で作成されるファイルがディレクトリのグループを継承
スティッキービット:
chmod 1755 /tmp
# ディレクトリ内のファイルを所有者のみが削除可能
複数ファイルの一括処理
findコマンドとの組み合わせ:
# 特定拡張子のファイルに一括適用
find . -name "*.sh" -exec chmod +x {} \;
# ディレクトリのみに権限適用
find . -type d -exec chmod 755 {} \;
# ファイルのみに権限適用
find . -type f -exec chmod 644 {} \;
条件付き権限変更
xargsとの組み合わせ:
# 実行権限のないスクリプトファイルを探して実行可能にする
find . -name "*.sh" ! -perm /111 | xargs chmod +x
# 権限が777のファイルを探して修正
find . -perm 777 | xargs chmod 755
注意点とトラブル回避
よくある問題と解決法
問題 | 症状 | 解決法 |
---|---|---|
ファイルが実行できない | Permission denied | chmod +x filename |
ディレクトリに入れない | cd: Permission denied | chmod +x directory |
ファイルが編集できない | 読み取り専用エラー | chmod +w filename |
他人にファイルを見られる | セキュリティリスク | chmod 600 filename |
Webページが表示されない | 403 Forbidden | chmod 644 *.html; chmod 755 directories |
セキュリティのベストプラクティス
推奨する権限設定:
ファイルタイプ | 推奨権限 | 理由 |
---|---|---|
実行ファイル | 755 | 所有者は編集可能、他は実行のみ |
設定ファイル | 644 | 所有者は編集可能、他は読み取りのみ |
ログファイル | 640 | 所有者は編集可能、グループは読み取りのみ |
一時ファイル | 600 | 所有者のみアクセス |
SSH鍵 | 600 | 所有者のみアクセス(セキュリティ必須) |
危険な権限設定
避けるべき設定:
権限 | 危険な理由 | 代替案 |
---|---|---|
777 | 誰でもフルアクセス可能 | 755または644 |
666 | 誰でも編集可能 | 644 |
目的不明の777設定 | セキュリティホール | 最小権限の原則 |
rootユーザーでの操作注意
# 危険:システム全体に影響
sudo chmod -R 777 /
# 安全:特定ファイルのみ
sudo chmod 644 /etc/specific_config
実践的なワークフロー

新しいプロジェクトでの権限設定
手順1:ディレクトリ構造の作成
mkdir -p project/{src,docs,scripts,config}
手順2:基本権限の設定
# ディレクトリの権限設定
chmod 755 project/
chmod 755 project/*
# ソースファイルの権限
chmod 644 project/src/*
# スクリプトファイルの権限
chmod 755 project/scripts/*
# 設定ファイルの権限
chmod 600 project/config/*
サーバー移行時の権限復元
権限のバックアップ:
# 権限情報をファイルに保存
find /var/www -printf "%m %p\n" > permissions_backup.txt
権限の復元:
# バックアップから権限を復元
while read perm path; do
chmod "$perm" "$path"
done < permissions_backup.txt
よくある質問と回答
Q: chmodとchownの違いは?
A: 役割が異なります
コマンド | 変更対象 | 例 |
---|---|---|
chmod | 権限(パーミッション) | chmod 755 file |
chown | 所有者・グループ | chown user:group file |
Q: ディレクトリの実行権限(x)の意味は?
A: ディレクトリへの「移動(cd)」権限です
# 実行権限なし:ディレクトリに入れない
chmod 644 mydir # エラー
cd mydir
# 実行権限あり:ディレクトリに入れる
chmod 755 mydir # 成功
cd mydir
Q: 権限を間違えて設定してしまった場合は?
A: 段階的に修正しましょう
# 1. 現在の権限を確認
ls -la problematic_file
# 2. 所有者権限を安全な状態に戻す
chmod u+rw problematic_file
# 3. 適切な権限に設定
chmod 644 problematic_file
Q: どの権限設定が適切かわからない場合は?
A: 最小権限の原則に従ってください
- 所有者のみアクセスが必要 → 600または700
- チームでの共有が必要 → 664または775
- 公開が必要 → 644または755
便利なエイリアスとスクリプト
便利なエイリアス設定
# ~/.bashrc に追加
alias ll='ls -la'
alias lh='ls -lah'
alias perm='ls -la | awk "{print \$1, \$9}"'
# 権限確認用
alias checkperm='stat -c "%a %n"'
# よく使う権限設定
alias mkexec='chmod +x'
alias mksafe='chmod 600'
alias mkpublic='chmod 644'
権限チェックスクリプト
#!/bin/bash
# permission_check.sh
echo "=== 権限チェックツール ==="
echo "ファイル/ディレクトリ: $1"
if [ -f "$1" ]; then
echo "タイプ: ファイル"
elif [ -d "$1" ]; then
echo "タイプ: ディレクトリ"
else
echo "エラー: ファイルまたはディレクトリが見つかりません"
exit 1
fi
echo "権限(記号): $(ls -ld "$1" | cut -d' ' -f1)"
echo "権限(数値): $(stat -c "%a" "$1")"
echo "所有者: $(stat -c "%U" "$1")"
echo "グループ: $(stat -c "%G" "$1")"
まとめ:chmodを使いこなせば、Linux管理がもっと安全に!
今回学んだ重要なポイント:
コマンド例 | 用途 |
---|---|
chmod 755 file | 実行ファイルや公開ディレクトリの標準設定 |
chmod 644 file | 一般的なファイルの標準設定 |
chmod +x file | ファイルを実行可能にする |
chmod -R 755 dir/ | ディレクトリ内すべてに再帰的適用 |
ls -la | 現在の権限を確認 |
実際に使ってみよう:
- 基本的な権限確認から始める(
ls -la
) - 簡単な権限変更を練習(
chmod +x
) - 数値モードで一括設定を試す(
chmod 644
) - セキュリティを意識した設定を実践
セキュリティのポイント:
- 最小権限の原則:必要最小限の権限のみ付与
- 定期的な権限チェック:不適切な権限がないか確認
- 機密ファイルの保護:600または700で厳重に管理
コメント