こういう状況、サーバー管理の現場では日常茶飯事です。
ファイル権限(パーミッション)は、Linuxを扱う上で最初に身につけるべき基礎知識の一つ。
chmod・chown・umask の使い方を正しく理解しておけば、権限まわりのトラブルの9割は自分で解決できます。
この記事では、Linux のファイル権限の仕組みを基礎から解説し、
chmod・chown・umask の実践的な使い方から、SUID/SGID/Sticky Bit、ACL との組み合わせ、
よくある「Permission denied」エラーの対処まで、現場で役立つ内容を一通りカバーします。
この記事のポイント
・ パーミッションは「所有者/グループ/その他」の3区分で管理される
・ chmod 755 や chmod u+x などの数値・記号両方の書き方を習得する
・ umask はファイル新規作成時のデフォルト権限を決める設定値
・ SUID/SGID/Sticky Bit は誤設定するとセキュリティリスクになる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Linuxのファイル権限(パーミッション)とは
Linuxでは、すべてのファイルとディレクトリに「誰が、何をできるか」を制御する権限が設定されています。ls -l コマンドで確認すると、先頭に権限を示す10文字の文字列が表示されます。[admin@server01 ~]$ ls -l /var/www/html/index.html -rw-r--r-- 1 apache apache 2048 May 10 09:00 /var/www/html/index.html
| 文字位置 | 意味 | 例 |
|---|---|---|
| 1文字目 | ファイル種別(-:通常ファイル、d:ディレクトリ、l:シンボリックリンク) | - |
| 2~4文字目 | 所有者(Owner)の権限 | rw- |
| 5~7文字目 | グループ(Group)の権限 | r-- |
| 8~10文字目 | その他(Other)の権限 | r-- |
r・w・x はそれぞれ以下の意味を持ちます。
・r(read):読み取り(ファイルは内容参照、ディレクトリはファイル一覧取得)
・w(write):書き込み(ファイルは内容変更、ディレクトリはファイルの作成・削除)
・x(execute):実行(ファイルはスクリプト等の実行、ディレクトリは中への移動)
chmodコマンドでファイル権限を変更する
1. 数値(絶対指定)で設定する
もっとも広く使われる方法です。r=4、w=2、x=1 の合計値でそれぞれの権限を表します。| 数値 | 権限 | 意味 |
|---|---|---|
| 7 | rwx | 読み取り・書き込み・実行すべて許可 |
| 6 | rw- | 読み取り・書き込みのみ許可 |
| 5 | r-x | 読み取り・実行のみ許可 |
| 4 | r-- | 読み取りのみ許可 |
| 0 | --- | すべて禁止 |
# Webサーバーで最もよく使う設定(所有者:rw/グループ:r/その他:r) chmod 644 /var/www/html/index.html # シェルスクリプトに実行権限を付与(所有者:rwx/グループ:r-x/その他:r-x) chmod 755 /usr/local/bin/backup.sh # 結果確認 ls -l /var/www/html/index.html -rw-r--r-- 1 apache apache 2048 May 10 09:00 /var/www/html/index.html
2. 記号(相対指定)で設定する
現在の権限を維持しながら「特定の権限だけ追加・削除」したい場面で使います。| 対象 | 記号 | 意味 |
|---|---|---|
| u | 所有者(user) | ファイル所有者 |
| g | グループ(group) | 所有グループのメンバー |
| o | その他(other) | 所有者・グループ以外全員 |
| a | 全員(all) | u+g+o 全員 |
# 所有者に実行権限を追加 chmod u+x script.sh # グループからの書き込み権限を削除 chmod g-w /etc/app.conf # その他ユーザーからの読み取り権限も削除 chmod o-r /home/admin/.ssh/id_rsa # 全員の書き込み権限を一括削除 chmod a-w /etc/cron.d/backup # 確認 ls -la /etc/app.conf -rw-r--r-- 1 root root 512 May 10 09:00 /etc/app.conf
3. ディレクトリ以下を一括変更する(-Rオプション)
【重要】-Rオプションの危険性と正しい使い方
chmod -R は指定したディレクトリ以下のすべてのファイル・ディレクトリに同じ権限を適用します。「ファイルにもディレクトリにも同じ権限を設定する」という誤りが起きやすく、特に注意が必要です。
# NG例:ディレクトリと通常ファイルが混在していても全部に755を適用してしまう chmod -R 755 /var/www/html/ # OK例:findと組み合わせてディレクトリのみに755、ファイルのみに644を適用する find /var/www/html/ -type d -exec chmod 755 {} \; find /var/www/html/ -type f -exec chmod 644 {} \; # 結果確認(ディレクトリとファイルで権限が正しく分かれているか) ls -la /var/www/html/ total 24 drwxr-xr-x 3 apache apache 4096 May 10 09:00 . drwxr-xr-x 5 root root 4096 May 10 08:00 .. -rw-r--r-- 1 apache apache 2048 May 10 09:00 index.html drwxr-xr-x 2 apache apache 4096 May 10 09:00 assets
一括変更のときは必ず find との組み合わせを使いましょう。
chownコマンドで所有者・グループを変更する
chmod が「何をできるか」を変更するのに対し、chown は「誰のファイルか」を変更するコマンドです。chown の実行は root 権限が必要です(
sudo chown ...)。# 所有者をapacheに変更(グループは変更しない) sudo chown apache /var/www/html/index.html # 所有者とグループを同時に変更(「所有者:グループ」の形式) sudo chown apache:apache /var/www/html/ # グループのみ変更(所有者は変更しない) sudo chown :webdev /var/www/html/app.conf # ディレクトリ以下を一括変更 sudo chown -R apache:apache /var/www/html/ # 確認 ls -la /var/www/html/ -rw-r--r-- 1 apache apache 2048 May 10 09:00 index.html
| やりたいこと | コマンド |
|---|---|
| 所有者のみ変更 | sudo chown 新所有者 ファイル名 |
| グループのみ変更 | sudo chown :新グループ ファイル名 |
| 所有者とグループを同時変更 | sudo chown 新所有者:新グループ ファイル名 |
| ディレクトリ以下を一括変更 | sudo chown -R 新所有者:新グループ ディレクトリ |
umaskでデフォルト権限を制御する
1. umaskとは
umask は、ファイルやディレクトリを新規作成したときに「デフォルトで与えない権限」を指定する設定値です。Linuxの初期権限は以下のとおりです。
・通常ファイル:666(rw-rw-rw-)
・ディレクトリ:777(rwxrwxrwx)
ここから umask の値を「引いた」権限が実際に設定されます。
# 現在のumaskを確認 umask 0022 # 計算例(umask 0022の場合) # ファイル:666 - 022 = 644(rw-r--r--) # ディレクトリ:777 - 022 = 755(rwxr-xr-x) # 実際にファイルを作って確認 touch testfile ls -la testfile -rw-r--r-- 1 admin admin 0 May 13 10:00 testfile
2. umaskを変更する
# セキュリティを強化(グループ・その他からの書き込みを禁止) umask 0027 # ファイルが640(rw-r-----)、ディレクトリが750(rwxr-x---)になる # 確認 umask 0027 touch testfile2 ls -la testfile2 -rw-r----- 1 admin admin 0 May 13 10:01 testfile2
/etc/profile や /etc/bashrc、ユーザー個別に適用するには
~/.bashrc または ~/.bash_profile に記述します。SUID・SGID・Sticky Bitの仕組みと注意点
1. SUID(Set User ID)
SUID が設定されたファイルは、実行時に「ファイル所有者の権限で」動作します。代表例は
/usr/bin/passwd です。一般ユーザーがパスワードを変更できるのは、passwd コマンドに SUID が設定されているためです。# SUIDが設定されているファイルの確認(s が所有者のx位置に表示される) ls -la /usr/bin/passwd -rwsr-xr-x 1 root root 27856 Feb 15 2024 /usr/bin/passwd # SUIDを設定する chmod u+s /usr/local/bin/myscript # SUIDを設定されたファイルをシステム内から探す(セキュリティ監査) find / -perm -4000 -type f 2>/dev/null
2. SGID(Set Group ID)
SGID をディレクトリに設定すると、そのディレクトリ内に作成されたファイルは「ディレクトリのグループ」を継承します。チームで共有するディレクトリの運用でよく使われます。
# SGIDを設定(グループ共有ディレクトリの例) sudo chmod g+s /var/shared/team/ # 確認(グループのx位置にsが表示される) ls -ld /var/shared/team/ drwxrwsr-x 2 root devteam 4096 May 13 10:00 /var/shared/team/
3. Sticky Bit
Sticky Bit をディレクトリに設定すると、そのディレクトリ内のファイルは「所有者とroot以外は削除できない」状態になります。/tmp ディレクトリが代表例です。# /tmpのSticky Bit確認(その他のx位置にtが表示される) ls -ld /tmp drwxrwxrwt 10 root root 4096 May 13 10:00 /tmp # Sticky Bitを設定する sudo chmod +t /var/shared/uploads/
ACLとの組み合わせ|特定ユーザーだけ権限を追加する
通常のパーミッションは「所有者・グループ・その他」の3分類しかありませんが、ACL(アクセス制御リスト)を使うと、特定ユーザーや特定グループに個別の権限を設定できます。
# ACLを確認する getfacl /var/www/html/index.html # file: var/www/html/index.html # owner: apache # group: apache user::rw- group::r-- other::r-- # 特定ユーザー(devuser)に書き込み権限を追加 sudo setfacl -m u:devuser:rw /var/www/html/index.html # 設定後の確認 getfacl /var/www/html/index.html # file: var/www/html/index.html # owner: apache # group: apache user::rw- user:devuser:rw- group::r-- mask::rw- other::r-- # ACLを削除する sudo setfacl -x u:devuser /var/www/html/index.html
ls -la /var/www/html/index.html -rw-rw-r--+ 1 apache apache 2048 May 10 09:00 /var/www/html/index.html
実務でよくある設定パターン
現場で頻繁に使うパターンをまとめておきます。覚えておくと作業時間を大幅に削減できます。| 用途 | 推奨設定 | コマンド |
|---|---|---|
| Webコンテンツ(HTML/CSS) | 644 | chmod 644 ファイル名 |
| Webディレクトリ | 755 | chmod 755 ディレクトリ名 |
| シェルスクリプト | 755 | chmod 755 スクリプト.sh |
| SSH秘密鍵 | 600 | chmod 600 ~/.ssh/id_rsa |
| SSH公開鍵・authorized_keys | 644 | chmod 644 ~/.ssh/id_rsa.pub |
| .sshディレクトリ | 700 | chmod 700 ~/.ssh |
| 設定ファイル(パスワードなし) | 644 | chmod 644 設定ファイル |
| 設定ファイル(パスワード含む) | 600 | chmod 600 設定ファイル |
| 共有作業ディレクトリ | 2775(SGID付き) | chmod 2775 ディレクトリ名 |
「Permission denied」が出た時のトラブルシュート
1. まず権限とオーナーを確認する
# Permission denied が出たファイルの詳細確認 ls -la /path/to/file # 現在のユーザーとグループを確認 id uid=1001(admin) gid=1001(admin) groups=1001(admin),1002(webdev)
2. よくある原因と対処
・x ビットがない(スクリプトが実行できない):chmod u+x スクリプト.sh で実行権限を追加・所有者が違う(rootのファイルを一般ユーザーが編集できない):
sudo chown ユーザー名 ファイル名 で所有者を変更・SELinuxが原因(権限は合っているのにアクセスできない):
ausearch -m AVC -ts recent でSELinuxの拒否ログを確認詳細は Linux ポート確認の全コマンド 内のSELinux関連セクションも参考にしてください。
・ディレクトリのxビットがない(cdできない):
chmod u+x ディレクトリ名 でディレクトリへの移動権限を追加・SSHログインできない(.sshの権限が広すぎる):
SSH は .ssh ディレクトリが 700、authorized_keys が 600 以外だと拒否します
3. 777はなぜ危険なのか
「とりあえず 777 にすれば動く」という対応を現場でよく見かけますが、これは最悪の回避策です。777(rwxrwxrwx)はシステム上のすべてのユーザーが「読み取り・書き込み・実行」を行えることを意味します。
Webサーバー上のファイルに777を設定すると、
Apacheプロセス経由で悪意あるスクリプトがそのファイルを改ざんできてしまいます。
「動けばいい」ではなく、必要最小限の権限を正確に設定する。これが権限管理の鉄則です。
セキュリティ設定と合わせて Linux DNS 設定の基本のようなサーバー設定記事も参考にしてください。
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| 権限を数値で設定(例:644) | chmod 644 ファイル名 |
| 権限を記号で追加(例:実行権限) | chmod u+x ファイル名 |
| ディレクトリ以下のファイルに644を一括適用 | find ディレクトリ -type f -exec chmod 644 {} \; |
| ディレクトリ以下のディレクトリに755を一括適用 | find ディレクトリ -type d -exec chmod 755 {} \; |
| 所有者を変更する | sudo chown 新所有者 ファイル名 |
| 所有者とグループを同時変更 | sudo chown 新所有者:新グループ ファイル名 |
| 現在のumaskを確認 | umask |
| umaskを変更する | umask 0027 |
| SUIDを設定する | chmod u+s ファイル名 |
| Sticky Bitを設定する | chmod +t ディレクトリ名 |
| 特定ユーザーにACL権限を追加 | sudo setfacl -m u:ユーザー名:rw ファイル名 |
| ACLを確認する | getfacl ファイル名 |
Linuxの権限管理は「難しい」というよりも「ルールが明確」なので、一度体系的に理解してしまえば迷うことはなくなります。
chmod・chown・umask の組み合わせを日々の作業の中で意識的に使っていくうちに、自然に身についていきます。
「とりあえず777」から卒業して、正確な権限設定を習慣にしてみてください。
Linux Master Pro Seminar(2日間ハンズオン)では chmod・chown・SELinux・ファイアウォールまで、
実際のサーバーを触りながら権限管理を習得できます。
>> セミナー詳細・お申込みはこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:CentOS Stream 9とAlmaLinux 9・Rocky Linux 9の違い|選定基準と移行ガイド
- 前のページへ:AIにLinuxトラブルを解析させる方法|journalctl・dmesgのログをChatGPT・Claudeに渡すコツ
- この記事の属するカテゴリ:Linuxtips・セキュリティへ戻る

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