fstab の各フィールドの解説
/dev/sdb1 /mnt/guest-data-01 ext4 defaults,noatime,users,nodev,nosuid,uid=1001,gid=1001 0 2
フィールド | 例 | 説明 |
---|---|---|
デバイス情報 | /dev/sdb1 | HDD のパーティション情報(どのデバイスをマウントするか) |
マウントポイント | /mnt/xxx-01 | マウント先のディレクトリ |
ファイルシステム | ext4 | 使用するファイルシステムの種類 |
マウントオプション | defaults,noatime,users,nodev,nosuid,uid=1001,gid=1001 | マウント時のオプション |
ダンプフラグ | 0 | dump コマンドによるバックアップをするか(通常 0) |
ファイルシステムチェック順序 | 2 | fsck の実行順序(1 はルートパーティション、2 はその他、0 はスキップ) |
/dev/sdb1 の意味
/dev/: デバイスファイルを管理するディレクトリ
sdb: 2 番目の物理ストレージデバイス(通常 1 番目は sda)
1: sdb の第 1 パーティション
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 のグループに強制的に設定するオプション
/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 を適用したディレクトリでは無効になる
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
/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)
ファイルのグループの権限で実行できるようにするフラグ
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 権限で動作
./suid-test
/mnt/data が nosuid 付きでマウントされている場合
/dev/sdb1 /mnt/data ext4 defaults,nodev,noexec,nosuid 0 2
この状態で
suid-test
を実行すると、SUID が無効化され、通常ユーザー権限で動作
./suid-test
Operation not permitted
nosuid を設定する理由
- 悪意ある SUID ファイルの実行を防ぐ(バックドアの防止)
- NFS や外部ストレージ経由で root 権限を奪う攻撃の防止
- Web サーバーの公開ディレクトリ
/var/www
などでの特権昇格リスクを回避