危険なLinuxコマンド:ある意味、あるコマンドは有害で、他のコマンドは効果がないように見えますか?

危険なLinuxコマンド:ある意味、あるコマンドは有害で、他のコマンドは効果がないように見えますか?

多くの人が知っているように、>>演算子はコマンドの後に入力する内容にコマンドの出力を追加します。

ファイルを上書きしたり、ファイルにデータを追加したりすることができることを知っていますが、悪意のある方法で使用される可能性があることもわかっています。ドライブまたはパーティションを出力として使用すると、コマンドの出力は次の場所に直接書き込まれます。そのドライブまたはパーティションが破損する可能性があります。

たとえば、>> /dev/sdaコマンドに追加すると、コマンドの出力が/dev/sda

好奇心にUbuntu VMを設定して楽しく使ってみました。コンピュータの仮想ドライブは/dev/vda/dev/vda1ブートパーティションは、/dev/vda2ルートパーティションはであり、別のパーティションがありません/home

今楽しい部分が出てきます。

  • echo "Hello world" >> /dev/vda仮想マシンで(ルートとして)実行してから再起動しても、何も破損しているようには見えません。再起動後は正常に起動し、それ以降はすべて大丈夫に見えました。
  • ただし、echo "Hello world" >> /dev/vda1同じ仮想マシン(ルート)でも実行して再起動すると、起動に失敗します。

だから私は出力書き込みがvda1悪い理由をすでに知っています(ブートパーティションが壊れています)。私の質問は:出力を追加すると/dev/vda何も起こらないようですが、出力を追加すると問題が発生するのはなぜですか/dev/vda1?結果を渡すと、コマンド出力は「/dev/vda2以降」なので記録されますか?/dev/vda1vdavda2

ベストアンサー1

UEFIモードで起動したようです。これは、ブートプロセスがドライブのヘッドエンドを確認しないことを意味します。

BIOSモード(エイリアスCSMレガシーモード)から起動する場合は、ドライブの最初のバイトにマスターブートレコードMBRを含める必要があります。パーティションテーブルもディスクヘッドに非常に近い場所に保存されます。

ブロックデバイスで使用されている場合は、追加せずに>>ドライブヘッドに書き込みます。/dev/sdcUSBフラッシュドライブを含む以下のデモを参照してください。

$ sudo bash -c 'echo "Hello world" >> /dev/sdc'
$ sudo dd if=/dev/sdc bs=12 count=1
Hello world
1+0 poster in
1+0 poster ut
12 byte kopierade, 0,00127171 s, 9,4 kB/s

説明が正しい場合、ヘッドエンドに長いデータブロック(MBRだけでなくパーティションテーブルをカバーするのに十分長い)を書き込むと、プロセスが破損します。

BIOSブート用に設定されたドライブからドライブヘッドに書き込むと、MBRが破損しているため、ブートプロセスが破損します。

編集1:

FAT32ファイルシステムのパーティションヘッダーを同じ方法で書き込むと、ファイルシステムが破損していることがわかります。

$ lsblk -o model,name,size,fstype,label,mountpoint /dev/sdc
MODEL   NAME    SIZE FSTYPE LABEL MOUNTPOINT
Voyager sdc     7,5G              
        ├─sdc1  256M vfat         
        └─sdc2  512M vfat

$ sudo dd if=/dev/sdc1 bs=12 count=1
�X�mkfs.fat1+0 poster in
1+0 poster ut
12 byte kopierade, 0,00118622 s, 10,1 kB/s

$ sudo bash -c 'echo "Hello world" >> /dev/sdc1'

$ lsblk -o model,name,size,fstype,label,mountpoint /dev/sdc
MODEL   NAME    SIZE FSTYPE LABEL MOUNTPOINT
Voyager sdc     7,5G              
        ├─sdc1  256M              
        └─sdc2  512M vfat         

$ sudo dd if=/dev/sdc1 bs=12 count=1
Hello world
1+0 poster in
1+0 poster ut
12 byte kopierade, 0,00118594 s, 10,1 kB/s

編集2:

パーティション#2は影響を受けません。 ASCII以外の文字の見苦しい表現だけでなく、16進ダンプも調べることをお勧めします。

$ sudo dd if=/dev/sdc2 bs=12 count=1 | hexdump -C
1+0 poster in
1+0 poster ut
12 byte kopierade, 0,00129779 s, 9,2 kB/s
00000000  eb 58 90 6d 6b 66 73 2e  66 61 74 00              |.X.mkfs.fat.|
0000000c

おすすめ記事