fallocateを使用して生成されたファイルにはどのような脆弱性がありますか?

fallocateを使用して生成されたファイルにはどのような脆弱性がありますか?

Fallocate を使用してスワップファイルを生成すると、ファイルに脆弱性があるという通知が表示されるため、操作は停止します。

この穴は何ですか?

  • 完全なファイル割り当て自体を穴にするのは、割り当てられていないディスク容量ですか?このように:
  • ブロック1 - >空
  • ブロック2 - >空
  • ブロック3 - >空

または

  • 事前に割り当てられたブロックの間に穴があり、連続しませんか?このように:
  • ブロック1
  • ブロック2
  • ブロック3の穴[ディスクの他のファイルが占めている]
  • ブロック4

テスト

fallocate -l 100MB /swap
chmod 600 /swap
mkswap /swap
swapon /swap

出力

swapon: swapfile has holes
swapon: /swap: swapon failed: Invalid argument

ベストアンサー1

ファイルの穴には接続ブロックがありません。を使用して作成されたファイルfallocateにはリンクブロックがなく、サイズのみがあります。割り当てられていないブロックから読み出すと、常にすべて0が返されます。割り当てられていないブロックに書き込むと、ファイルシステムは書き込み前にブロックを割り当てます(少なくとも部分的に脆弱性を満たす)。

カーネルは、ファイルシステムの助けを借りずに(ブロックリストが決定されると)ファイルブロックにアクセスできるようにしたいので、脆弱なファイルをスワップに使用することはできません。一部の書き込みにはファイルシステムが含まれているため、完全に割り当てられていないファイル(穴埋めまたは書き込み時のコピー)はスワップには使用できません。

次のコマンドを使用すると、ファイルが実際に使用しているブロックの数を確認できますstat

$ truncate -s 16K holes
$ stat holes
  File: holes
  Size: 16384           Blocks: 0          IO Block: 4096   regular file
Device: fd13h/64787d    Inode: 36708573    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   steve)   Gid: ( 1000/   steve)
Access: 2019-05-12 20:04:22.498258356 +0200
Modify: 2019-05-12 20:04:22.498258356 +0200
Change: 2019-05-12 20:04:22.498258356 +0200
 Birth: -

filefrag何が割り当てられたのか教えてくれます。

$ /usr/sbin/filefrag holes
holes: 0 extents found

部分的に割り当てられたファイルを強制的に適用すると、脆弱性が軽減されます。

$ fallocate -z -l 8K holes
$ stat holes
  File: holes
  Size: 16384           Blocks: 16         IO Block: 4096   regular file
Device: fd13h/64787d    Inode: 36708573    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   steve)   Gid: ( 1000/   steve)
Access: 2019-05-12 20:04:22.498258356 +0200
Modify: 2019-05-12 20:10:12.520380272 +0200
Change: 2019-05-12 20:10:12.520380272 +0200
 Birth: -
$ /usr/sbin/filefrag -e holes
Filesystem type is: ef53
File size of holes is 16384 (4 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       1:  116741448.. 116741449:      2:             last,unwritten
holes: 1 extent found

おすすめ記事