Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

Linux概要 - UNIXファイルシステムの概要(2)

Last updated at Posted at 2025-02-24

ファイルディスクリプタと i ノード

UNIX では、ファイルの内容 と ファイルの管理情報 を明確に区別しています。
通常のファイルは単なる バイト列 であり、ファイルの長さや終端情報(EOF)などのメタデータはファイル内部には含まれません。

ファイルを管理するために必要な情報は、i ノード(inode) と呼ばれるデータ構造に格納されます。
各ファイルには一意の i ノードが割り当てられ、ファイルシステム内での識別に使用されます。

UNIX の ファイルシステムの構造 や カーネルのファイル管理機能 は、システムごとに異なります。しかし、POSIX 標準 では、i ノードに格納すべき最低限の属性が規定されています。POSIX 準拠のシステムでは、以下の情報を i ノードに保持する必要があります。

  • ファイルの種類(通常ファイル、ディレクトリ、シンボリックリンクなど)
  • ファイルに関連付けられているハードリンクの数
  • ファイルのバイト数
  • デバイス番号(ファイルがデバイスファイルの場合)
  • i ノード番号(ファイルシステム内での識別用)
  • ファイル所有者のユーザ ID
  • ファイルのグループ ID
  • i ノードの変更時刻、最終アクセス時刻、最終変更時刻(タイムスタンプ情報)
  • アクセス権とファイルのモード(読み取り・書き込み・実行権限など)

このように、i ノードは ファイルのメタデータを管理するための重要なデータ構造 ですが、カーネルのファイル管理全体を担うわけではありません。
たとえば、開いているファイルの一覧やキャッシュ情報 などは、i ノードではなく ファイルディスクリプタや他のデータ構造 によって管理されます。

iノードまとめ

  • i ノードは、ファイルのメタデータを管理する重要なデータ構造 である
  • ファイルの実体(データ)はディスク上のブロックに保存され、i ノードはその管理情報を保持する
  • ファイル名とは無関係に、i ノード番号でファイルを識別する
  • ハードリンクは i ノードを共有するため、異なる名前から同じファイルにアクセスできる
  • ノード数には上限があり、枯渇すると新しいファイルを作成できなくなる

アクセス権とファイルのモード

UNIX では、ファイルのアクセス権はユーザごとに異なり、次の 3 つのカテゴリに分類されます。

  1. 所有者(User, u) - ファイルの所有者であるユーザ
  2. グループ(Group, g) - ファイルのグループに属するユーザ(所有者以外)
  3. その他(Other, o) - 上記 2 つに該当しないすべてのユーザ

各ユーザカテゴリごとに、以下の 3 つのアクセス権が設定されます。

  1. 読み取り(Read, r) - ファイルの内容を閲覧できる
  2. 書き込み(Write, w) - ファイルの内容を変更できる
  3. 実行(Execute, x) - 実行可能なファイル(プログラムやスクリプト)を実行できる

この組み合わせにより、ファイルのアクセス権は 9 ビット(3 × 3)で管理 されます。

また、ファイルの動作を制御するための 補助フラグ(特殊ビット) も 3 つ存在します。

  1. セットユーザ ID(Set User ID, SUID, s)
  2. セットグループ ID(Set Group ID, SGID, s)
  3. スティッキービット(Sticky bit, t)

これらのフラグが設定されると、実行ファイルやディレクトリの動作が以下のように変化します。

特殊フラグの意味(実行ファイルの場合)

SUID(Set User ID)

通常、プログラムを実行したプロセスは、その 実行したユーザの UID で動作します。
しかし、SUID が設定された実行ファイル を実行すると、プロセスは ファイルの所有者の UID で実行されます。

例: passwd コマンド(/usr/bin/passwd)は SUID が設定されており、一般ユーザでもパスワード変更時に /etc/shadow を更新できます。

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Jan 10 12:34 /usr/bin/passwd

(所有者 root の s が SUID を示す)

SGID(Set Group ID)

通常、プロセスは実行時に 実行ユーザの GID を引き継ぎます。
しかし、SGID が設定された実行ファイル は、ファイルのグループ ID で実行 されます。

例: 研究グループ内で共有されるツールを、特定のグループ権限で実行させる場合に使用されます。

$ ls -l /usr/local/bin/shared_tool
-rwxr-sr-x 1 root staff 123456 Jan 10 12:34 /usr/local/bin/shared_tool

(グループ staff の s が SGID を示す)

Sticky ビット(現在では実行ファイルではほぼ使用されない)

かつて Sticky ビットが設定された実行ファイル は、プログラムの実行終了後もメモリ上に残り、再実行時の読み込みを高速化するために使用されていました。
しかし、現代の UNIX システムではほぼ無効化されており、もっぱらディレクトリの制御に使用 されます(詳細は後述)。

SGID の特性(ディレクトリの場合)

SGID は ディレクトリにも適用可能 であり、この場合、そのディレクトリ内で作成されたファイルの GID は親ディレクトリの GID になる という特性があります。

例: /var/www などの共有ディレクトリで、すべてのファイルを www-data グループに自動的に所属させる設定。

$ ls -ld /var/www
drwxr-sr-x 1 root www-data 4096 Jan 10 12:34 /var/www

(ディレクトリの s が SGID を示す)

Sticky ビット(ディレクトリの場合)

Sticky ビットが設定されたディレクトリ では、そのディレクトリ内のファイルを削除できるのは、所有者か root のみ になります。

例: /tmp は多くのユーザがファイルを作成できるが、他のユーザが勝手に削除できないよう Sticky ビットが設定されている。

$ ls -ld /tmp
drwxrwxrwt 1 root root 4096 Jan 10 12:34 /tmp

(t が Sticky ビットを示す)

ファイル作成時の UID/GID の決定

  • 所有者 UID → 作成したプロセスの UID になる。
  • グループ GID は次のルールで決定される:
    1. 親ディレクトリに SGID が設定されていれば → 親ディレクトリの GID を継承
    2. SGID が 設定されていなければ → 作成したプロセスの GID

まとめ

  • ファイルのアクセス権は、所有者 / グループ / その他の 3 つのカテゴリごとに設定される(読み取り・書き込み・実行)
  • SUID → プログラム実行時に 所有者の UID で実行される
  • SGID → プログラム実行時に ファイルの GID で実行される
    • ディレクトリに適用 すると、新規ファイルの GID が親ディレクトリの GID になる
  • Sticky ビット → ディレクトリに適用 すると、ファイルの所有者以外が削除できなくなる

このように、ファイルのモードは UNIX のアクセス制御において重要な役割を果たします。

次の記事へ

前の記事へ

一覧へ戻る

免責事項
本記事は、筆者の理解に基づいて執筆したものです。正確性には十分配慮していますが、内容の誤りや最新の情報と異なる可能性があります。
本記事の内容を参考にしたことによるいかなる損害についても、筆者は責任を負いかねますのでご了承ください。
正確な情報や書籍に書かれている根拠等はサポートしませんので、ご自身で公式ドキュメントをお調べください。
よって、この内容をAIの学習データに活用することはおすすめしません。

2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?