「シェルスクリプトを実行しようとしたら Permission denied と怒られた」
Linuxサーバーの運用でPermission deniedに悩んだ経験は、ほぼ全ての人にあるはずです。
この記事では、ファイルやディレクトリの権限(パーミッション)を変更する
chmod(チェンジモード)コマンド の実践的な使い方を解説します。数字指定(755/644)と記号指定(+x/-w)の2つの書き方、ディレクトリ一括変更の
-R オプション、「ファイルは644・ディレクトリは755」に分けて設定する find との組み合わせ、777の危険性まで網羅しました。・755=所有者は全権限・グループ/その他は読み+実行、644=所有者は読み+書き・グループ/その他は読み取りのみ
・-R オプションでディレクトリ以下を再帰的に一括変更できる
・find との組み合わせでファイルは644・ディレクトリは755に分けて設定するのが現場の正しいやり方
・777(全員に全権限)は本番環境では絶対に使用しない
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
1. 基本的な使い方(ファイルの権限を変更する)
chmod の基本書式は以下の通りです。# 基本書式 # chmod パーミッション ファイル名 # ファイルを 644 に変更する(所有者:読み書き、グループ/その他:読み取りのみ) # chmod 644 index.html # ディレクトリを 755 に変更する(所有者:全権限、グループ/その他:読み・実行) # chmod 755 /var/www/html # 変更後に確認する # ls -l index.html -rw-r--r-- 1 apache apache 1024 Apr 7 10:00 index.html
ls -l で確認する習慣をつけましょう。2. ディレクトリの中身ごと一括変更する(-R)
「ディレクトリの中にある数百個のファイル全ての権限を一度に変えたい」そんな時に1つずつコマンドを打つ必要はありません。
-R(Recursive:再帰的)オプションを使います。# /var/www/html 以下の全ファイル・ディレクトリを 755 に変更する # chmod -R 755 /var/www/html/
-R は強力なオプションです。間違ってシステムの大事なディレクトリ(/etcや/usrなど)に対して実行すると、OSが起動しなくなる危険性があるため、対象パスは慎重に入力してください。【実務Tips】ファイルとディレクトリで権限を分けて一括変更する
chmod -R 755 をそのまま実行すると、通常のファイル(HTMLや設定ファイルなど)にも実行権限が付いてしまいます。現場では find コマンドと組み合わせて「ディレクトリは755、ファイルは644」と分けて設定するのが正しいやり方です。# ディレクトリだけを 755 に変更する # find /var/www/html/ -type d -exec chmod 755 {} \; # ファイルだけを 644 に変更する # find /var/www/html/ -type f -exec chmod 644 {} \;
3. 記号を使って「実行権限」だけを追加する(+x)
「今の権限(644など)は変えたくないけど、実行できるようにしたい」という場合は、数字よりも記号を使った相対指定が便利です。最もよく使うのが、実行権限(eXecute)を足す(+) という意味の
+x です。# 全ユーザーに実行権限を追加する # chmod +x script.sh # 自分(所有者)だけに実行権限を追加する # chmod u+x script.sh
-(マイナス)を使います。# 全ユーザーから書き込み権限を剥奪する(読み取り専用にする) # chmod -w important.conf
4. 数字(パーミッション)の計算方法
「755」や「644」という数字は、以下の3つの権限の足し算で決まっています。・4:読み取り(Read)
・2:書き込み(Write)
・1:実行(eXecute)
これらを「所有者」「所有グループ」「その他」の順に3桁で並べたものがパーミッション値です。
例:755 の場合
・所有者: 4+2+1 = 7(全部できる)
・グループ: 4+0+1 = 5(読み・実行)
・その他: 4+0+1 = 5(読み・実行)
【危険】777(全ユーザーに全権限)は使わない
「とりあえず 777 にすれば動く」という対処をする方がいますが、これは絶対に避けてください。777 はすべてのユーザーに読み・書き・実行の全権限を与えるため、不正アクセスやデータ改ざんのリスクが極めて高くなります。本番環境で 777 を使う理由は存在しません。問題が起きた時は原因を特定し、最小限の権限で対処しましょう。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| 権限を755(ディレクトリ・実行ファイル用)にする | chmod 755 ファイル名 |
| 権限を644(一般ファイル標準)にする | chmod 644 ファイル名 |
| 変更後に権限を確認する | ls -l ファイル名 |
| ディレクトリ以下を一括変更する | chmod -R 755 ディレクトリ名/ |
| ディレクトリだけを755に一括変更する | find ディレクトリ名/ -type d -exec chmod 755 {} \; |
| ファイルだけを644に一括変更する | find ディレクトリ名/ -type f -exec chmod 644 {} \; |
| 実行権限を追加する(全ユーザー) | chmod +x ファイル名 |
| 実行権限を追加する(自分だけ) | chmod u+x ファイル名 |
| 書き込み権限を剥奪する(読み取り専用) | chmod -w ファイル名 |
パーミッション設定でサーバーが危険にさらされていませんか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:umaskコマンドの使い方|パーミッション初期値の確認・変更と永続化
- 前のページへ:mkdirコマンドでディレクトリを作成する方法|-pの階層一括作成やパーミッション指定も
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドA-E・ファイル・ディレクトリ管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます