dd
特定のデバイスがコマンドの出力ファイルとコマンドのターゲットになるのを防ぐ方法があるかどうか疑問に思いますfdisk
。私は現在、これら2つのタスクを使用してSDカードに書き込むブートローダ、カーネル、およびルートファイルシステムを設定しています。と混同されるかと常に/dev/sdd
心配です。キーボードの近くにいる場合は、次の形式のコマンドを使用しないようにする方法を見つけたいと思います。sdd
sdb
sda
AD
dd if=/dev/sd[a-zA-Z0-9]* of=/dev/sd[ab]
または
fdisk /dev/sd[ab]
答え1
セカンダリHDDに十分に一意の名前を提供するために、udevルールを作成してみてください。
もう1つの考え方:セキュリティ要件は、「誰が行うのではなく、どのように行うのか」と説明できるたびにタイプの強制について話しており、ほとんどのLinuxディストリビューションではTE MACレベルで行われます。私のMAC経験のほとんどは「SELinux」で行われました。
DACレベルでロックできない、またはデバイスでI / Oを実行することはできません(セキュリティモデルとしてDACが必ずしも失敗するわけではなく、現在のDACポリシーが完全にIDベースであるため、特定のIDで実行されているすべてのプログラムは、追加の管理表現なしで同じ権限を取得することができます一般的なユーザー空間コンポーネントはブロックファイルで何もできませんが、ルートユーティリティとプラットフォームの特定の部分は実行できるようにMACレベルでロックすることができます。デバイスfixed_disk_device_t
はSELinuxタイプと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
新しいタイプのアクセスを許可しないselinuxルールを作成することはfixed_disk_device_t
それほど難しくありません。一般ユーザーの役割はできませんが、その権限を持つユーザーはできるだけ設定sysadm_t
できます。その後、newrole -r root:sysadm_r
ディスクを再分割するか、dd
ブロックデバイスで作業を実行する前に作業を実行する必要があることに注意してください。 be)毎日一日中走るわけではないので、あまり問題ではありませんfdisk
。
必要以上に多くの作業が必要な場合がありますが、TEは直面する一般的な問題を解決するためのメカニズムです。個人的には、このudev
規則はおそらく最も安全な選択です。このような多くの問題を解決することに興味がある場合にのみ、TEについて言及します。
答え2
わからない場合は、/dev/sdx
にある代替デバイス名を使用してください/dev/disk/
。
たとえば、私のSDカードリーダーはです/dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0
。少し冗長ですが、少なくともHDDと混同する方法はありません。
あるいは、hdparm -i /dev/sdx
ハードドライブの場合は、有用な情報を表示し、不幸な事故を避けるのに役立ちます。
答え3
にはより長くより意味のある名前もあります/dev/disk/by-*
。ディスク全体の/dev/disk/by-id
ディスクモデルとシリアル番号を含むディスクデバイスへのシンボリックリンクが含まれています。
さらなる保護のために、自分にデバイスへのアクセス権を与えてsudo chown sj755 /dev/disk/by-id/ata-Yoyodine-50RDF15H
から(たとえば、rootではない)、自分のユーザーとして残りのタスクを実行します。
稼働中のディスクが予期したものと同じであることを確認してください(例:check fdisk -l /dev/whatever
、file - </dev/sdz99
...)。シェルからEsc .呼び出す前のコマンドのパラメータを指定してデバイス名を再入力しないでください。
答え4
これを達成するには2つの方法があります。
- ラッパー(シェル関数)を作成して実際のプログラムに渡す前に、その中のパラメータを確認してください。
- SELinux、AppArmorなどに限定されたシェルでこれらのタスクを実行します。