Ubuntu の権限確認と chmod・chown の使い分け|Permission denied への対処

  • URLをコピーしました!
目次

はじめに

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: 読み取り OK
  • w: 書き込み OK
  • x: 実行 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(読み・実行)

よく使う数値の組み合わせ一覧

実務で頻出する組み合わせをまとめました。

数値設定される権限用途・意味
644rw-r--r--ファイルの標準設定。所有者は編集でき、他のユーザーは読み取りのみ(HTML ファイルや設定ファイルなど)
755rwxr-xr-xディレクトリやプログラムの標準設定。所有者は全操作可、他のユーザーは実行(ディレクトリなら移動)と閲覧が可能
700rwx------自分専用。他のユーザーは一切アクセス不可(SSH 秘密鍵ディレクトリ ~/.ssh など)
600rw-------自分専用(読み書き)。機密情報を含むファイル(SSH 秘密鍵ファイルなど)
777rwxrwxrwx誰でも全操作可能。本番環境では避けることを強く推奨

用途別の推奨権限早見表

実務で迷いやすい代表的なケースを用途別にまとめました。

用途推奨権限補足
SSH 用ディレクトリ ~/.ssh/700これより緩いと SSH が鍵を拒否することがある
SSH 秘密鍵 id_rsa / id_ed25519600グループや他に読み取り権限が漏れていると SSH 接続失敗
SSH 公開鍵 id_rsa.pub644公開しても問題ない
authorized_keys600厳格な権限が要求される
Web 公開ディレクトリ(ファイル)644Web サーバーが読めればよい
Web 公開ディレクトリ(ディレクトリ)755Web サーバーがトラバースできる必要あり
機密設定ファイル(.env 等)600DB パスワード等を含む場合

記号(シンボリック表記)で設定する方法

「現在の権限に、実行権限だけ追加したい」といった差分での変更に便利です。

構文: [誰に][どうする][何の権限を]

  • 誰に: u(所有者)、g(グループ)、o(その他)、a(全員)
  • どうする: +(追加)、-(削除)、=(指定値にする)
  • 何の権限: rwx

使用例

全員に実行権限を追加(スクリプトを実行可能にする際によく使用)

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)

chmodchown コマンドを実行した際、以下のようなエラーが表示されることがあります。

chmod: changing permissions of 'filename': Operation not permitted
(chmod: 'filename' のパーミッションを変更中: 操作が許可されていません)

これは、「そのファイルを変更できるのは、ファイルの所有者か、システム管理者(root)のみ」という Linux の基本ルールに従った挙動です。たとえ自分が PC のメインユーザーであっても、システム全体に関わるファイルや、他のユーザーが作成したファイルを勝手に書き換えることはできません。

「操作が許可されていません」が出た場合の対応

このエラーが出た場合は、コマンドの先頭に sudo を付けて実行することで解決できます。sudo(SuperUser DO)は、一時的に「管理者(スーパーユーザー)」としてコマンドを実行する仕組みです。

NG(エラーになる)

chmod 755 /etc/hosts

OK(成功する)

sudo chmod 755 /etc/hosts

実行時にパスワードを求められますが、これは「ログインユーザー自身のパスワード」を入力します。

管理者権限(root)での実行が必要なケース

基本的に、自分のホームディレクトリ(~/)以外の場所にあるファイルを操作する際は、ほとんどの場合 sudo が必要になると考えてよいでしょう。

  • システム設定ファイルの変更(/etc/ 以下のファイルなど)
  • Web 公開ディレクトリの操作(/var/www/html/ など)
  • ログファイルの操作(/var/log/ など)
  • 所有者の変更(chown コマンドは基本的に sudo が必須)

注意: sudo の使用に関する留意点
sudo は強力なコマンドであり、誤ったコマンドを実行すると OS が起動しなくなる恐れがあります。コマンドの意味を理解した上で実行することを推奨します。

Permission denied を切り分けるトラブルシュート手順

「Permission denied」と表示された場合、原因は単純な権限不足だけとは限りません。所有者の問題、ディレクトリの実行権限、ACL(アクセス制御リスト)など複数の可能性があります。原因を効率よく切り分けるための手順を紹介します。

STEP
まず ls -l で対象ファイルの権限と所有者を確認

最初に、対象ファイルの権限と所有者を確認します。

ls -l /path/to/target

以下のポイントをチェックします。

  • 所有者(3 列目): 自分のユーザー名と一致しているか
  • グループ(4 列目): 自分が所属するグループになっているか(groups コマンドで自身の所属を確認可能)
  • 権限(先頭 10 文字): 必要な権限(r/w/x)が付与されているか
STEP
パス全体の権限を namei -l で追跡する

ファイル単体の権限が正しくても、途中のディレクトリに実行権限(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------(所有者以外アクセス不可)になっているような場合、データファイル自体の権限が緩くてもアクセスできません。

STEP
実効権限を stat で精査する

権限の数値表記を直接確認したいときは stat が便利です。

stat /path/to/target

Access: (0644/-rw-r--r--) のように、数値とシンボリックの両方が表示されます。

STEP
ACL(拡張権限)の有無を確認する

通常の rwx 以外に、ACL(Access Control List)で個別の権限が設定されている可能性があります。ls -l の権限末尾に + が付いている場合は ACL が設定されています。

$ ls -l /path/to/target
-rw-r--r--+ 1 user user 4096 Jan 1 12:00 target

ACL の詳細は getfacl で確認できます。

getfacl /path/to/target
STEP
プロセス実行ユーザーを確認する

Web サーバーや cron 経由で動くスクリプトが書き込みできない場合、スクリプトの実行ユーザーが想定通りかを確認します。例えば Apache / Nginx は www-data ユーザーで動くため、ファイルが user:user 所有のままだと書き込みできません。

# 現在のプロセスのユーザーを確認
whoami
id

Permission denied 切り分けチェックリスト

確認項目コマンドチェックポイント
対象ファイルの権限ls -l target必要な r/w/x が付与されているか
パス上の各ディレクトリの権限namei -l /full/path途中に x(実行権限)がないディレクトリがないか
数値表記での権限stat targetchmod で指定する数値の確認
ACL の有無ls -l(末尾に +)/getfacl拡張権限が影響していないか
自身の所属グループgroups期待するグループに所属しているか
実行ユーザーwhoami / idスクリプト実行時のユーザーが想定通りか

権限変更で避けたいアンチパターン

chmodchown は強力なコマンドであるため、誤った使い方をするとセキュリティリスクやシステム障害につながります。実務で遭遇しやすいアンチパターンと、推奨される対処法を整理しました。

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 が外れて sudopasswd が動作しなくなる、ログファイルの権限が崩れるなど、重大な障害につながります。

推奨される対処

  • システム関連の権限は基本的に変更しない
  • 万一権限が崩れた場合は、同一バージョンの 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 での表示位置
SUID4u+s所有者の x 位置が s
SGID2g+sグループの x 位置が s
Sticky Bit1+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 で全体像を把握し、詳細は statnamei -l で深掘りする
  • 権限を変更する(chmod: 基本は数値表記、差分変更はシンボリック表記と使い分ける
  • 所有者を変更する(chown: Permission denied の解消は、まず所有者の見直しから検討する
  • トラブル時の切り分け: パス全体の権限・ACL・実行ユーザーまで含めて確認する
  • 危険な操作を避ける: chmod 777sudo chmod -R は最小限にとどめる
  • 特殊権限を理解する: SUID/SGID/Sticky Bit はシステムを支える仕組みであり、定期的な棚卸しを推奨

権限管理はセキュリティの基礎であり、日常的な運用品質に直結します。基本コマンドの使い方だけでなく、「なぜその権限が必要か」を考える習慣が、安全なシステム運用への近道です。

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次