ZeroLoom

fstab の仕様を理解

April 20, 2025
3 min read
Table of Contents

fstab の各フィールドの解説


/etc/fstab
/dev/sdb1 /mnt/guest-data-01 ext4 defaults,noatime,users,nodev,nosuid,uid=1001,gid=1001 0 2
フィールド説明
デバイス情報/dev/sdb1HDD のパーティション情報(どのデバイスをマウントするか)
マウントポイント/mnt/xxx-01マウント先のディレクトリ
ファイルシステムext4使用するファイルシステムの種類
マウントオプションdefaults,noatime,users,nodev,nosuid,uid=1001,gid=1001マウント時のオプション
ダンプフラグ0dump コマンドによるバックアップをするか(通常 0)
ファイルシステムチェック順序2fsck の実行順序(1 はルートパーティション、2 はその他、0 はスキップ)

/dev/sdb1 の意味

/dev/: デバイスファイルを管理するディレクトリ

sdb: 2 番目の物理ストレージデバイス(通常 1 番目は sda)

1: sdb の第 1 パーティション

HDD のパーティション情報を確認する方法


HDD のパーティション一覧
lsblk
出力例
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0  500G  0 disk
├─sda1   8:1    0  100G  0 part /
├─sda2   8:2    0  200G  0 part /home
└─sda3   8:3    0  200G  0 part [SWAP]
sdb      8:16   0 1000G  0 disk
└─sdb1   8:17   0 1000G  0 part /mnt/xxx-01
ディスクの詳細情報
sudo fdisk -l
出力例
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device    Boot  Start    End    Blocks   Id  System
/dev/sdb1        1      121601 976761600  83  Linux

uid=1001, gid=1001 の設定について


パーティションのファイルやディレクトリの所有者を UID=1001 のユーザー、GID=1001 のグループに強制的に設定するオプション

/etc/fstab
/dev/sdb1 /mnt/mydata ext4 defaults,noatime,users,uid=1001,gid=1001 0 2

通常、ext4 はファイルシステム自体がファイルの所有権を管理している
ext4 などの Linux ネイティブファイルシステムでは uid / gid を明示的に設定する必要はない

明示的に設定する必要がある場合
sudo useradd -u 1001 myuser
sudo mkdir /mnt/mydata
sudo chown myuser:myuser /mnt/mydata

nodev (デバイスファイル作成不可)について


nodev を設定すると、そのパーティション内で特殊デバイスファイル(/dev/* など)の作成や使用が制限される

mknod コマンドを使ってデバイスファイルを作成できるが、nodev を適用したディレクトリでは無効になる

nodev なし(通常動作)の場合
sudo mknod /mnt/data/mydevice b 1 5  # ブロックデバイス(例: /dev/xxx)
sudo mknod /mnt/data/mypipe p        # 名前付きパイプ
作成したデバイスファイルを確認
ls -l /mnt/data/
出力例
brw-r--r-- 1 root root 1, 5 Mar 17 12:00 mydevice
prw-r--r-- 1 root root     Mar 17 12:00 mypipe
nodev あり(デバイスファイル作成不可
/dev/sdb1  /mnt/data  ext4  defaults,nodev,noexec,nosuid  0  2
sudo mknod /mnt/data/mydevice b 1 5
出力例
mknod: '/mnt/data/mydevice': Operation not permitted

nodev を設定する理由

  • 通常、ユーザーが直接 /dev/* 内のデバイスファイルを利用するため、別のマウントポイントでデバイスファイルを作成する必要はない
  • nodev を設定することで、マルウェアなどが偽の /dev/null/dev/xxx を作成して悪用するのを防ぐ
  • ユーザーが特権デバイス(ブロックデバイス、キャラクターデバイス)を作成してシステムに影響を与えるのを防ぐ

nosuid (SUID を持つ実行ファイルが特権実行されない)について


nosuid を設定すると、そのパーティション内の SUID / SGID(Set-User-ID / Set-Group-ID)付きの実行ファイルが特権昇格しなくなる

SUID / SGID とは?

SUID(Set-User-ID)
ファイルの所有者の権限で実行できるようにするフラグ

SGID(Set-Group-ID)
ファイルのグループの権限で実行できるようにするフラグ

SUID を設定
sudo chmod u+s /mnt/data/suid-test
ls -l /mnt/data/suid-test
出力例
-rwsr-xr-x 1 root root  12345 Mar 17 12:00 suid-test

SUID ビットが設定された suid-test というプログラムが /mnt/data にある場合、通常なら root 権限で動作

nosuid なし(通常の SUID 動作)
./suid-test

/mnt/data が nosuid 付きでマウントされている場合

/etc/fstab
/dev/sdb1  /mnt/data  ext4  defaults,nodev,noexec,nosuid  0  2

この状態で suid-test を実行すると、SUID が無効化され、通常ユーザー権限で動作

nosuid あり(SUID 無効化)
./suid-test
出力例
Operation not permitted

nosuid を設定する理由

  • 悪意ある SUID ファイルの実行を防ぐ(バックドアの防止)
  • NFS や外部ストレージ経由で root 権限を奪う攻撃の防止
  • Web サーバーの公開ディレクトリ /var/www などでの特権昇格リスクを回避