Linuxのファイル権限完全ガイド|chmod・chown・umaskの基礎と実務でよく使う設定

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, セキュリティ > Linuxのファイル権限完全ガイド|chmod・chown・umaskの基礎と実務でよく使う設定
「Linuxのファイルにアクセスできない」「Permission denied が出て作業が止まった」
こういう状況、サーバー管理の現場では日常茶飯事です。

ファイル権限(パーミッション)は、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 は誤設定するとセキュリティリスクになる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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

この10文字の意味を分解すると次のとおりです。

文字位置 意味
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

ディレクトリには「xビット(移動できる)」が必要で、通常ファイルに x を付けるのはセキュリティ上のリスクになります。
一括変更のときは必ず 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

umask をシステム全体に適用するには /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 -l で確認すると、ACLが設定されたファイルはパーミッション欄末尾に「+」が付きます。

ls -la /var/www/html/index.html -rw-rw-r--+ 1 apache apache 2048 May 10 09:00 /var/www/html/index.html

ACLの詳細な使い方は setfacl コマンドの解説も参考にしてください。

実務でよくある設定パターン

現場で頻繁に使うパターンをまとめておきます。覚えておくと作業時間を大幅に削減できます。

用途 推奨設定 コマンド
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サーバー構築の「型」を体系的に身につけたい方へ、
Linux Master Pro Seminar(2日間ハンズオン)では chmod・chown・SELinux・ファイアウォールまで、
実際のサーバーを触りながら権限管理を習得できます。

>> セミナー詳細・お申込みはこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。