はじめに
Ubuntu をはじめとする Linux システムにおいて、ファイルやディレクトリの「アクセス権(パーミッション)」は、システムの安全性を守るための基本かつ重要な仕組みです。
Linux は「マルチユーザー」を前提としたシステムです。誰もが全てのファイルを閲覧・変更できる状態では、重要な設定ファイルの誤削除や、悪意のあるプログラムの実行といったリスクを避けられません。それを防ぐために、「誰が」「何をできるか」を厳格に管理しているのがアクセス権です。
本記事は Ubuntu 24.04 LTS および 26.04 LTS で動作確認した内容を基にしています。コマンド体系は他の主要な Linux ディストリビューション(Debian、RHEL 系、Rocky Linux 等)でもほぼ共通です。
「Permission denied」が表示される理由
サーバー構築やアプリ開発の最中に、ターミナル画面で「Permission denied(許可がありません)」というエラーが出て作業が止まった経験のある方は多いのではないでしょうか。
このエラーが表示される主な理由はシンプルで、「操作しようとしているファイルに対して、適切な権限を持っていない」ためです。
例えば、「自分以外のユーザーが作成したファイルを編集しようとした」「実行権限がないスクリプトを動かそうとした」といったケースが該当します。このエラーを解消するには、適切な権限を付与するか、所有者を変更する必要があります。
- アクセス権の仕組み: 読み取り・書き込み・実行権限の基本
- 権限の確認方法:
ls -lおよびstatコマンドの見方 - 権限の変更方法:
chmodコマンドの実践的な使い方 - 所有者の変更方法:
chownコマンドによる管理 Permission deniedの切り分け手順- 権限変更で避けるべきアンチパターン
- 特殊権限(SUID/SGID/Sticky Bit)の概要
アクセス権(パーミッション)の仕組み
Linux(Ubuntu)では、1 つのファイルやディレクトリに対して、「誰が(対象)」「何をできるか(操作)」という組み合わせで権限を管理しています。
参考: Ubuntu Community Help Wiki – FilePermissions
“Permissions: owner = Read & Write (rw-) group = Read (r–) other = Read (r–)”
(所有者は読み書き、グループは読み取り、その他は読み取りのみ)
https://help.ubuntu.com/community/FilePermissions
権限を構成する 3 つの属性(誰が)
システムは、ファイルにアクセスしようとするユーザーを以下の 3 つのカテゴリのいずれかに分類します。
所有者(User / u)
そのファイルやディレクトリを作成したユーザーです。通常、最も強い権限を持ちます。
グループ(Group / g)
特定のユーザーの集まりです(例: 開発チームなど)。グループに権限を与えることで、チーム内でのファイル共有が可能になります。
その他(Others / o)
所有者でもなく、所属グループのメンバーでもない、その他全てのユーザーを指します。Web サーバーで公開するファイルなどでは、この「その他」の権限設定が特に重要になります。


操作を許可する 3 つの権限(何をできるか)
各属性(ユーザー)に対して、以下の 3 つの操作権限を個別に許可・拒否できます。
読み取り(Read / r)
ファイルの中身を見る権限です(例: cat やテキストエディタでの閲覧)。
書き込み(Write / w)
ファイルの内容を変更したり、上書き保存したりする権限です。
実行(Execute / x)
ファイルをプログラムやスクリプトとして実行する権限です(例: シェルスクリプトの実行)。
ディレクトリにおける「実行権限」の意味
ここで重要なポイントがあります。ファイルの「実行(x)」はプログラムを動かすことですが、ディレクトリ(フォルダ)における「実行(x)」は意味が異なります。
- ファイルの実行権限(x): プログラムとして起動できる
- ディレクトリの実行権限(x): ディレクトリの中に移動(
cd)できる、または中のファイルにアクセスできる
ディレクトリに「読み取り(r)」があっても「実行(x)」がない場合、ls コマンドでファイル名の一覧を取得することはできても、そのディレクトリの中に移動したり(cd)、中のファイルの内容を参照したりすることはできません。
「Permission denied」でディレクトリに入れない場合、多くはこの「ディレクトリの実行権限(x)」が不足していることが原因です。
現在の権限を確認する方法
ls -l コマンドで確認する
Ubuntu でファイルやディレクトリの権限を確認するには、ターミナルで ls コマンドに -l(ロングフォーマット)オプションを付けて実行します。
ls -l特定のファイルだけ参照したい場合は、ファイル名を指定します。
ls -l filename.txt実行すると、以下のような情報が表示されます。
-rwxr-xr-x 1 user staff 4096 Jan 1 12:00 filename.txt

stat コマンドで詳細情報を確認する
ls -l よりも詳細な権限情報(数値表記・最終アクセス時刻・i ノード番号など)を取得したい場合は、stat コマンドが便利です。
stat filename.txt実行すると以下のように表示され、Access: (0644/-rw-r--r--) のように 数値表記とシンボリック表記の両方を一度に確認できる ため、chmod で数値を指定する際の確認に活用できます。
File: filename.txt
Size: 4096 Blocks: 8 IO Block: 4096 regular file
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2026-01-01 12:00:00.000000000 +0900
Modify: 2026-01-01 12:00:00.000000000 +0900表示結果の見方
一番左にある 10 桁の英数字(例: -rwxr-xr-x)が、そのファイルのアクセス権限を表しています。以下のように分解して考えます。
先頭の 1 文字: ファイルの種類
-(ハイフン): 通常のファイルd(ディー): ディレクトリl(エル): シンボリックリンク(ショートカットのようなもの)
続く 9 文字: 権限の設定(3 文字 × 3 セット)
残りの 9 文字は、3 文字ずつ「所有者」「グループ」「その他」の順に並んでいます。
| 順番 | 対象 | 説明 | 例(rwx) |
|---|---|---|---|
| 前半 3 文字 | 所有者 | ファイルの持ち主ができること | rwx(全権限あり) |
| 中盤 3 文字 | グループ | 所有グループのメンバーができること | r-x(読み・実行のみ) |
| 後半 3 文字 | その他 | 上記以外の全員ができること | r-x(読み・実行のみ) |
記号の意味は以下の通りです。
r: 読み取り OKw: 書き込み OKx: 実行 OK-: 権限なし(許可されていない)
例えば -rw-r--r-- と表示されていた場合、「ファイルであり、所有者は読み書きできるが、それ以外のユーザーは読み取りのみ可能」という意味になります。
アクセス権を変更する(chmod)
ファイルやディレクトリの権限を変更するには、chmod コマンドを使用します。「Change Mode」の略で、サーバー構築やトラブルシューティングの場面で頻繁に利用します。
参考: GNU Coreutils Documentation – chmod invocation
“chmod changes the file mode bits of each given file according to mode, which can be either a symbolic representation of changes to make, or an octal number representing the bit pattern for the new mode bits.”
(chmod は、変更内容を表すシンボリック表記、または新しいモードビットを示す 8 進数値に従って、各ファイルのモードビットを変更する)
https://www.gnu.org/software/coreutils/manual/html_node/chmod-invocation.html
コマンドの基本構文
chmod [オプション] [権限の設定値] [対象のファイル/ディレクトリ]数値(オクタル表記)で設定する方法
権限を「3 桁の数字」で指定する方法です。「現在の状態に関わらず、指定した権限の状態に上書きする」ため、ミスが少なく、運用現場で広く使われています。
この方法では、各権限を以下の数値に置き換えて足し算します。
- 読み取り(r)= 4
- 書き込み(w)= 2
- 実行(x)= 1
例えば、「読み書き OK(rw-)」なら 4 + 2 = 6、「全権限あり(rwx)」なら 4 + 2 + 1 = 7 となります。これを「所有者」「グループ」「その他」の順に 3 つ並べます。
例: chmod 755 filename の場合
- 所有者(7): 4 + 2 + 1 =
rwx(全権限) - グループ(5): 4 + 0 + 1 =
r-x(読み・実行) - その他(5): 4 + 0 + 1 =
r-x(読み・実行)
よく使う数値の組み合わせ一覧
実務で頻出する組み合わせをまとめました。
| 数値 | 設定される権限 | 用途・意味 |
|---|---|---|
| 644 | rw-r--r-- | ファイルの標準設定。所有者は編集でき、他のユーザーは読み取りのみ(HTML ファイルや設定ファイルなど) |
| 755 | rwxr-xr-x | ディレクトリやプログラムの標準設定。所有者は全操作可、他のユーザーは実行(ディレクトリなら移動)と閲覧が可能 |
| 700 | rwx------ | 自分専用。他のユーザーは一切アクセス不可(SSH 秘密鍵ディレクトリ ~/.ssh など) |
| 600 | rw------- | 自分専用(読み書き)。機密情報を含むファイル(SSH 秘密鍵ファイルなど) |
| 777 | rwxrwxrwx | 誰でも全操作可能。本番環境では避けることを強く推奨 |
用途別の推奨権限早見表
実務で迷いやすい代表的なケースを用途別にまとめました。
| 用途 | 推奨権限 | 補足 |
|---|---|---|
SSH 用ディレクトリ ~/.ssh/ | 700 | これより緩いと SSH が鍵を拒否することがある |
SSH 秘密鍵 id_rsa / id_ed25519 | 600 | グループや他に読み取り権限が漏れていると SSH 接続失敗 |
SSH 公開鍵 id_rsa.pub | 644 | 公開しても問題ない |
authorized_keys | 600 | 厳格な権限が要求される |
| Web 公開ディレクトリ(ファイル) | 644 | Web サーバーが読めればよい |
| Web 公開ディレクトリ(ディレクトリ) | 755 | Web サーバーがトラバースできる必要あり |
機密設定ファイル(.env 等) | 600 | DB パスワード等を含む場合 |
記号(シンボリック表記)で設定する方法
「現在の権限に、実行権限だけ追加したい」といった差分での変更に便利です。
構文: [誰に][どうする][何の権限を]
- 誰に:
u(所有者)、g(グループ)、o(その他)、a(全員) - どうする:
+(追加)、-(削除)、=(指定値にする) - 何の権限:
r、w、x
使用例
全員に実行権限を追加(スクリプトを実行可能にする際によく使用)
chmod +x script.sh
# "a+x" と同じ意味になりますグループの書き込み権限を削除
chmod g-w filename所有者だけ全権限、それ以外を読み取りのみに上書き(= 演算子)
chmod u=rwx,go=r filename数値表記とシンボリック表記の使い分け
両者にはそれぞれ得意な場面があります。状況に応じて使い分けることを推奨します。
| 場面 | 推奨表記 | 理由 |
|---|---|---|
| 権限を初期状態にリセットする | 数値(例: 755) | 現在の状態に依存せず、確実に意図通り設定できる |
| 既存の権限に実行権だけ追加 | シンボリック(+x) | 他の権限を維持したまま差分のみ変更できる |
| 自動化スクリプト・冪等性が必要な処理 | 数値 | 実行結果が現在の状態に依存しない |
| 対話的な微調整 | シンボリック | 直感的で読みやすい |
ディレクトリの中身もまとめて変更する方法(-R オプション)
ディレクトリの権限を変更しても、その中に入っているファイルやサブディレクトリの権限は変わりません。中身も含めて一括で変更したい場合は、-R(Recursive / 再帰的)オプションを使います。
# directory とその中身すべてを 755 に変更
chmod -R 755 directory/ただし、-R 755 のような一律指定は、ファイルにまで実行権限(x)を付与してしまうという副作用があります。Web 公開ディレクトリのように「ディレクトリは 755、ファイルは 644」と分けたい場合は、find コマンドとの組み合わせを推奨します。
# ディレクトリだけ 755 に変更
find /var/www/html -type d -exec chmod 755 {} \;
# ファイルだけ 644 に変更
find /var/www/html -type f -exec chmod 644 {} \;注意: chmod -R の取り扱い-R オプションは強力です。誤ってシステムディレクトリ(/etc や /usr など)に対して実行すると、OS が起動しなくなるなどの重大なトラブルにつながる可能性があるため、実行前にパスを十分確認することを推奨します。
所有者とグループを変更する(chown)
ファイルの所有者や所属グループを変更するには、chown コマンドを使用します。「Change Owner」の略ですが、グループも一緒に変更できる多機能コマンドです。
所有者を変更する操作は、基本的に管理者権限が必要になるため、コマンドの先頭に sudo を付けて実行するのが一般的です。
所有者を変更する基本コマンド
sudo chown [新しい所有者ユーザー名] [対象のファイル/ディレクトリ]使用例: sample.txt の所有者を ubuntu ユーザーに変更する場合
sudo chown ubuntu sample.txt所有者とグループを一度に変更する方法(user:group)
Linux にはグループだけを変更する chgrp コマンドもありますが、実務では chown で「所有者」と「グループ」をまとめて変更するのが一般的です。ユーザー名とグループ名をコロン(:)でつなぎます。
sudo chown [ユーザー名]:[グループ名] [対象]使用例: index.html の所有者・グループを www-data に変更する場合
sudo chown www-data:www-data index.htmlこれさえ覚えておけば、chgrp コマンドを個別に実行する必要はありません。
グループだけを変更する方法
ユーザー名を省略し、コロンの後にグループ名のみを指定すると、グループだけを変更できます。
sudo chown :developers shared.txtディレクトリ全体を一括変更する方法
Web サイトのディレクトリを丸ごとアップロードした際など、中のファイルも含めて全ての所有権を一括で変更したい場合は、-R(再帰的)オプションを使います。
# /var/www/html 以下の全てのファイル・ディレクトリの所有権を変更
sudo chown -R www-data:www-data /var/www/htmlポイント: Permission denied への対処の優先順位
「Permission denied」で書き込みができない時、chmod 777 のように権限を緩めて解決しようとせず、まずは「所有者が自分(または書き込みたいアプリのユーザー)になっているか」を確認し、chown で修正するのがセキュリティ上、適切なアプローチです。
権限変更ができないときの対処法(sudo)
chmod や chown コマンドを実行した際、以下のようなエラーが表示されることがあります。
chmod: changing permissions of 'filename': Operation not permitted
(chmod: 'filename' のパーミッションを変更中: 操作が許可されていません)これは、「そのファイルを変更できるのは、ファイルの所有者か、システム管理者(root)のみ」という Linux の基本ルールに従った挙動です。たとえ自分が PC のメインユーザーであっても、システム全体に関わるファイルや、他のユーザーが作成したファイルを勝手に書き換えることはできません。
「操作が許可されていません」が出た場合の対応
このエラーが出た場合は、コマンドの先頭に sudo を付けて実行することで解決できます。sudo(SuperUser DO)は、一時的に「管理者(スーパーユーザー)」としてコマンドを実行する仕組みです。
NG(エラーになる)
chmod 755 /etc/hostsOK(成功する)
sudo chmod 755 /etc/hosts実行時にパスワードを求められますが、これは「ログインユーザー自身のパスワード」を入力します。
管理者権限(root)での実行が必要なケース
基本的に、自分のホームディレクトリ(~/)以外の場所にあるファイルを操作する際は、ほとんどの場合 sudo が必要になると考えてよいでしょう。
- システム設定ファイルの変更(
/etc/以下のファイルなど) - Web 公開ディレクトリの操作(
/var/www/html/など) - ログファイルの操作(
/var/log/など) - 所有者の変更(
chownコマンドは基本的にsudoが必須)
注意: sudo の使用に関する留意点sudo は強力なコマンドであり、誤ったコマンドを実行すると OS が起動しなくなる恐れがあります。コマンドの意味を理解した上で実行することを推奨します。
Permission denied を切り分けるトラブルシュート手順
「Permission denied」と表示された場合、原因は単純な権限不足だけとは限りません。所有者の問題、ディレクトリの実行権限、ACL(アクセス制御リスト)など複数の可能性があります。原因を効率よく切り分けるための手順を紹介します。
最初に、対象ファイルの権限と所有者を確認します。
ls -l /path/to/target以下のポイントをチェックします。
- 所有者(3 列目): 自分のユーザー名と一致しているか
- グループ(4 列目): 自分が所属するグループになっているか(
groupsコマンドで自身の所属を確認可能) - 権限(先頭 10 文字): 必要な権限(r/w/x)が付与されているか
ファイル単体の権限が正しくても、途中のディレクトリに実行権限(x)がないとアクセスできません。namei -l を使うと、パス上の各ディレクトリの権限を一度に確認できます。
namei -l /path/to/target実行例
$ namei -l /home/user/secret/data.txt
f: /home/user/secret/data.txt
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x user user user
drwx------ user user secret
-rw-r--r-- user user data.txt途中の secret ディレクトリが drwx------(所有者以外アクセス不可)になっているような場合、データファイル自体の権限が緩くてもアクセスできません。
権限の数値表記を直接確認したいときは stat が便利です。
stat /path/to/targetAccess: (0644/-rw-r--r--) のように、数値とシンボリックの両方が表示されます。
通常の rwx 以外に、ACL(Access Control List)で個別の権限が設定されている可能性があります。ls -l の権限末尾に + が付いている場合は ACL が設定されています。
$ ls -l /path/to/target
-rw-r--r--+ 1 user user 4096 Jan 1 12:00 targetACL の詳細は getfacl で確認できます。
getfacl /path/to/targetWeb サーバーや cron 経由で動くスクリプトが書き込みできない場合、スクリプトの実行ユーザーが想定通りかを確認します。例えば Apache / Nginx は www-data ユーザーで動くため、ファイルが user:user 所有のままだと書き込みできません。
# 現在のプロセスのユーザーを確認
whoami
idPermission denied 切り分けチェックリスト
| 確認項目 | コマンド | チェックポイント |
|---|---|---|
| 対象ファイルの権限 | ls -l target | 必要な r/w/x が付与されているか |
| パス上の各ディレクトリの権限 | namei -l /full/path | 途中に x(実行権限)がないディレクトリがないか |
| 数値表記での権限 | stat target | chmod で指定する数値の確認 |
| ACL の有無 | ls -l(末尾に +)/getfacl | 拡張権限が影響していないか |
| 自身の所属グループ | groups | 期待するグループに所属しているか |
| 実行ユーザー | whoami / id | スクリプト実行時のユーザーが想定通りか |
権限変更で避けたいアンチパターン
chmod や chown は強力なコマンドであるため、誤った使い方をするとセキュリティリスクやシステム障害につながります。実務で遭遇しやすいアンチパターンと、推奨される対処法を整理しました。
chmod 777 を解決策として使う
Permission denied を解消するために chmod 777(誰でも全操作可能)を実行するのは、最も避けたいパターンです。Web サーバーで公開しているディレクトリに 777 を設定すると、外部から書き込み可能なディレクトリができあがり、Web シェルの設置や任意ファイル書き込みの起点になり得ます。
参考: linux.recipes – Linux File Permissions Explained
“Avoid chmod 777. It removes protection and is almost never needed.”
(chmod 777 は使わないこと。保護機能を無効化する上、必要なケースはほぼ存在しない)
https://www.linux.recipes/guides/linux-file-permissions-explained-chmod-chown-sudo/
推奨される対処
- まずは
chownで所有者を見直す - 共有が必要ならグループを活用し、ディレクトリには
g+s(SGID)を付与してグループ継承させる - どうしても他者の書き込みが必要な場合は、対象を最小範囲に絞った上で 775 や 770 にとどめる
sudo chmod -R のスペース誤入力
再帰的に権限を変更する sudo chmod -R は、スペース誤入力により取り返しのつかない事故を起こす典型例です。
# 実行したかったコマンド
sudo chmod -R 755 /home/user/Desktop/tempfiles
# 誤って入力してしまったコマンド(/ と home の間に空白)
sudo chmod -R 755 / home/user/Desktop/tempfilesこのコマンドは「/(ルート)以下の全ファイル・ディレクトリ」と「home/user/Desktop/tempfiles」の両方に 755 を適用してしまい、システムが起動しなくなる恐れがあります。
参考: Ubuntu Community Help Wiki – FilePermissions
“Recursively deleting or chown-ing files are extremely dangerous. You will not be the first, nor the last, person to add one too many spaces into the command.”
(再帰的な削除や所有者変更は極めて危険。スペースを 1 つ多く入力してしまう人は、過去にも未来にも数多く存在する)
https://help.ubuntu.com/community/FilePermissions
推奨される対処
-Rを付ける前に、echoを頭に付けて実行内容をプレビューする- システムディレクトリ(
/etc、/usr、/varなど)への再帰的変更は、実行前にチームメンバーへのレビューを依頼する - バックアップやスナップショットを取得しておく
システムディレクトリへの再帰的権限変更
/etc、/usr、/var、/bin などのシステムディレクトリは、OS が動作するために厳格な権限設定がされています。これらを chmod -R 755 などで一括変更すると、SUID が外れて sudo や passwd が動作しなくなる、ログファイルの権限が崩れるなど、重大な障害につながります。
推奨される対処
- システム関連の権限は基本的に変更しない
- 万一権限が崩れた場合は、同一バージョンの Ubuntu でクリーンインストールしたシステムから
statなどで正解の権限を取得して復旧する
シェルスクリプトに SUID を設定する
「実行ユーザーに関わらず root 権限で動かしたい」という意図でシェルスクリプトに SUID を設定するパターンも避けることを推奨します。Linux カーネルはセキュリティ上の理由から、スクリプト(インタプリタ実行されるファイル)への SUID を意図的に無視します。
参考: Command in Line – Linux Special Permissions
“The Linux kernel does not honor the SUID bit on interpreted scripts (Python, Bash, Perl). This is a deliberate security measure.”
(Linux カーネルはインタプリタスクリプト(Python、Bash、Perl)の SUID ビットを尊重しない。これは意図的なセキュリティ対策である)
https://www.commandinline.com/linux-special-permissions-suid-sgid-sticky/
推奨される対処
- 特定コマンドのみ root 権限が必要なら、
/etc/sudoers.d/に専用ルールを追加してパスワードなしsudoを許可する - バインド権限など個別の特権だけ必要なら、
setcapで能力(capabilities)単位の付与を検討する
特殊権限(SUID/SGID/Sticky Bit)の概要
通常の rwx の権限モデルに加えて、Linux には SUID・SGID・Sticky Bit と呼ばれる 3 つの特殊権限があります。日常的に意識する場面は多くありませんが、/usr/bin/passwd や /tmp など、システムの随所で使われている重要な仕組みです。
SUID(Set User ID)
実行ファイルに SUID が設定されていると、そのファイルを誰が実行しても、ファイルの所有者の権限で動作します。
代表例が /usr/bin/passwd です。一般ユーザーがパスワードを変更する際、内部的には /etc/shadow(root 専用ファイル)への書き込みが必要ですが、passwd に SUID が付与されているため、一般ユーザーが実行しても root 権限で動作します。
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Apr 3 2024 /usr/bin/passwd所有者の実行権限位置が x ではなく s になっている部分が SUID の印です。
SGID(Set Group ID)
SGID には 2 つの効果があります。
- 実行ファイルに付与した場合
-
そのファイルを実行するユーザーのグループ権限が、ファイル所有グループの権限に切り替わります。
- ディレクトリに付与した場合
-
そのディレクトリ配下に作成された新規ファイル・ディレクトリは、作成ユーザーの主グループではなく、親ディレクトリの所有グループを継承します。チームでの共有ディレクトリ運用に便利な仕組みです。
# 共有ディレクトリにグループ継承を設定
sudo chmod g+s /shared/projects
ls -ld /shared/projects
# drwxrwsr-x 2 root developers 4096 Jan 1 12:00 /shared/projectsグループの実行権限位置が s になっています。
Sticky Bit
ディレクトリに Sticky Bit を設定すると、そのディレクトリ内のファイルは「ファイル所有者」または「root」だけが削除可能になります。書き込み権限があっても他のユーザーのファイルは削除できなくなる保護機能です。
代表例が /tmp ディレクトリです。
$ ls -ld /tmp
drwxrwxrwt 18 root root 4096 Jan 1 12:00 /tmpその他(others)の実行権限位置が t になっています。/tmp は誰でも書き込み可能(777 相当)ですが、Sticky Bit があるため他のユーザーが作成したファイルを勝手に削除することはできません。
特殊権限の設定方法
特殊権限は、3 桁の通常権限の先頭に 4 桁目の数値を加えることで設定できます。
| 特殊権限 | 数値 | シンボリック | ls -l での表示位置 |
|---|---|---|---|
| SUID | 4 | u+s | 所有者の x 位置が s |
| SGID | 2 | g+s | グループの x 位置が s |
| Sticky Bit | 1 | +t | その他の x 位置が t |
設定例
# SUID を付与(数値表記)
sudo chmod 4755 /usr/local/bin/myapp
# SGID をディレクトリに付与(シンボリック表記)
sudo chmod g+s /shared/projects
# Sticky Bit を付与
sudo chmod +t /shared/uploads特殊権限とセキュリティリスク
SUID と SGID は特権昇格の経路となり得るため、運用上の注意が必要です。攻撃者がシステムへの侵入後に SUID バイナリを設置できれば、root 権限への昇格が可能になります。
参考: oneuptime – Special Permissions on RHEL
“An attacker who gains write access might plant a SUID binary for privilege escalation.”
(書き込み権限を取得した攻撃者が、特権昇格のために SUID バイナリを設置することがある)
https://oneuptime.com/blog/post/2026-03-04-special-permissions-suid-sgid-sticky-bit-rhel-9/view
定期的に SUID/SGID が設定されているファイルを棚卸しすることを推奨します。
# SUID が設定されているファイル一覧
sudo find / -type f -perm /4000 2>/dev/null
# SGID が設定されているファイル一覧
sudo find / -type f -perm /2000 2>/dev/null
# SUID または SGID が設定されているファイル一覧(まとめて確認)
sudo find / -type f -perm /6000 2>/dev/nullベースラインとなる一覧を作成しておき、不審な追加がないかを定期的に比較する運用がセキュリティ強化につながります。
まとめ
本記事では、Ubuntu におけるアクセス権(パーミッション)の仕組みと、コマンドによる確認・変更方法、そして実務でつまずきやすいトラブルシュートとアンチパターンを解説しました。
- 仕組みを理解する: 権限は「所有者・グループ・その他」×「読み・書き・実行」の組み合わせで決まる
- 権限を確認する:
ls -lで全体像を把握し、詳細はstatやnamei -lで深掘りする - 権限を変更する(
chmod): 基本は数値表記、差分変更はシンボリック表記と使い分ける - 所有者を変更する(
chown):Permission deniedの解消は、まず所有者の見直しから検討する - トラブル時の切り分け: パス全体の権限・ACL・実行ユーザーまで含めて確認する
- 危険な操作を避ける:
chmod 777やsudo chmod -Rは最小限にとどめる - 特殊権限を理解する: SUID/SGID/Sticky Bit はシステムを支える仕組みであり、定期的な棚卸しを推奨
権限管理はセキュリティの基礎であり、日常的な運用品質に直結します。基本コマンドの使い方だけでなく、「なぜその権限が必要か」を考える習慣が、安全なシステム運用への近道です。
以上、最後までお読みいただきありがとうございました。


