特定のデバイスがdd
コマンドの出力ファイルおよびfdisk
コマンドのターゲットになるのを防ぐ方法があるかどうか疑問に思っています。私は現在、2つの操作を使用して、SDカードにブートローダー、カーネル、およびルートファイルシステムを書き込むように設定しています。これは/dev/sdd
として表示されます。文字以来、sdd
とsdb
、またはsda
を混同するのではないかといつも少し心配しています。 A そして D はキーボードの近くにあり、この形式のコマンドを防ぐ方法を見つけたいと思います。
dd if=/dev/sd[a-zA-Z0-9]* of=/dev/sd[ab]
または
fdisk /dev/sd[ab]
Udevルールを記述して、補足HDDに十分に一意の名前を付けることができます。
別のアイデア:セキュリティ要件を「誰がやっているのかではなく、彼らがどのようにやっているのか」と表現できるときはいつでも、タイプエンフォースメントについて話しているので、ほとんどのLinuxディストリビューションではTEはMACレベルで行われます。私のMAC経験のほとんどは「SELinux」に関するものです
DACレベルでロックダウンすることはできません。そうしないと、デバイスでI/Oを実行できません(必ずしもセキュリティモデルとしてのDACの障害ではなく、現在のDACポリシーはIDベースであるため、すべてのプログラムが特定のIDで実行すると、追加の管理表現がなくても同一の権限が取得されます)。 MACレベルでロックダウンして、通常のユーザースペースコンポーネントがブロックファイルに対して何も実行できないようにすることができますが、ルートユーティリティとプラットフォームの特定の部分は実行できます。 Fedoraでは、これはすでに、ブロックデバイスがSELinuxタイプのfixed_disk_device_t
で表示され、grubがbootloader_exec_t
を持っている場合の一種です。次の例を参照してください。
[root@localhost ~]# ls -lhZ $(which grub2-install)
-rwxr-xr-x. root root system_u:object_r:bootloader_exec_t:s0 /sbin/grub2-install
[root@localhost ~]# ls -lhZ /dev/sda
brw-rw----+ root disk system_u:object_r:fixed_disk_device_t:s0 /dev/sda
[root@localhost ~]# sesearch --allow | egrep bootloader | grep fixed
allow bootloader_t fixed_disk_device_t : lnk_file { read getattr } ;
allow bootloader_t fixed_disk_device_t : chr_file { ioctl read write getattr lock append open } ;
allow bootloader_t fixed_disk_device_t : blk_file { ioctl read write getattr lock append open } ;
[root@localhost ~]#
dd
には通常のbin_tラベルがありますが、
[root@localhost ~]# ls -lhZ $(which dd)
-rwxr-xr-x. root root system_u:object_r:bin_t:s0 /bin/dd
bin_t
(どうやら)はブロックデバイスに書き込むことができますが、fdisk
とdd
の新しいファイルコンテキストタイプを作成し、新しいタイプがfixed_disk_device_t
にアクセスできないようにするselinuxルールを作成することはそれほど難しくありません。 。通常のユーザーロールでは実行できないようにする必要がありますが、sysadm_t
を持つユーザーは実行できます。その後、ディスクのパーティションを再作成する前、またはdd
を実行する前に、newrole -r root:sysadm_r
を実行することを忘れないでください。ブロックデバイス上で(1日中毎日fdisk
を実行するわけではないので、大したことではないはずです)。
おそらくあなたが探していたよりも多くの作業がありますが、TEはあなたが直面している一般的な問題を解決するメカニズムです。個人的には、udev
ルールがおそらく最も安全な賭けです。これに似た問題のより大きなセットを解決することに興味がある場合にのみ、TEのものについて言及します。
/dev/sdx
がわからない場合は、/dev/disk/
にある別のデバイス名を使用してください。
たとえば、私のSDカードリーダーは/dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0
です。確かにそれは少し冗長ですが、少なくともHDDと混同する方法はありません。
あるいは、hdparm -i /dev/sdx
は、ハードディスクの場合に役立つ情報を表示し、不幸な事故を回避するのに役立つ場合があります...
/dev/disk/by-*
にはもっと長く意味のある名前があります。ディスク全体の場合、/dev/disk/by-id
には、ディスクモデルとシリアル番号を含むディスクデバイスへのシンボリックリンクが含まれます。
保護を強化するには、デバイスにアクセスするためのアクセス許可を自分に与え(例:Sudo chown sj755 /dev/disk/by-id/ata-Yoyodine-50RDF15H
)、残りはrootではなく自分のユーザーで行います。
操作するディスクに期待されるコンテンツが含まれていることを再確認してください。 fdisk -l /dev/whatever
、file - </dev/sdz99
、…を確認してください。シェルでは、 Esc. 前のコマンドの引数を呼び出すために、デバイス名を再入力しないでください。
それを達成するための2つの方法があります。