ddおよびfdiskコマンドからのデバイスの保護


8

特定の特定のデバイスが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
考えられる解決策の1つは、SDカードへの直接書き込みアクセスのみが可能で、他のストレージデバイスではできないように権限を設定することです。
Sampo Sarrala-codidact.org 2013年

回答:


5

udevルールを作成して、補足的なHDDに十分に一意の名前を付けてみてください。

別のアイデア:セキュリティ要件を「だれが実行しているのかではなく、どのように実行しているのか」と表現できる場合は、型強制について話していることになります。ほとんどのLinuxディストリビューションでは、TEはMACレベルで実行されます。私のMAC経験のほとんどは「SELinux」での経験です

DACレベルでロックダウンすることはできません。そうしないと、デバイスでI / Oを実行できなくなります(必ずしもセキュリティモデルとしてのDACの障害ではなく、現在のDACポリシーはIDベースのみなので、すべてのプログラムが特定のIDで実行している場合、追加の管理表現は不可能であり、同一の権利を取得します。通常のユーザー空間コンポーネントがブロックファイルを使用して何もできないが、ルートユーティリティとプラットフォームの特定の部分はできるように、MACレベルでそれをロックダウンすることができます。Fedoraでは、これはすでに一種のケースであり、SELinuxタイプのfixed_disk_device_tgrub でブロックデバイスが表示され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_tcanを持つユーザーは実行できます。次にnewrole -r root:sysadm_r、ディスクのパーティションを再作成する前に、またはddブロックデバイス全体で実行する前に、それはあなたがfdisk毎日一日中走っているようなものではないので、大したことではありません。

おそらく、あなたが探していたよりも多くの作業が必要ですが、TEは、実行中の一般的な問題を解決するメカニズムです。個人的には、udevルールはおそらくあなたが最も安全な賭けです。この問題と同様のより大きな問題のセットを解決することに関心がある場合にのみ、TEに関するものについて言及します。


4

が不明な場合は/dev/sdx、にある代替デバイス名を使用してください/dev/disk/

たとえば、私のSDカードリーダーは/dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0です。それは確かに少し冗長ですが、少なくともHDDと混同する方法はありません。

または、hdparm -i /dev/sdxハードディスクの場合に役立つ情報を表示し、不幸な事故を回避するのに役立ちます...


デバイスへの一意の名前のリンクを作成することは可能ですか?
sj755 2013年

1
udevルールを使用しますが、それらのルールを使用するボックスでのみ機能します(Live CDの起動時などでは機能しません)。これ/dev/disk/*は、どのLinuxシステムでも使用できます。
frostschutz 2013年

udevルールはこれを実現しますが、シンボリックリンクを使用する方が簡単です(「from」リンク自体が/ dev、/ proc、または/ runにない限り)、または単に(bash / zshのように)変数を作成します。mysdcard=/dev/sdd、そしてもちろん$mysdcardあなたはそれを必要とするところならどこでも引数として使用するだけです。
tgm1024--モニカは

3

には、意味のある長い名前があり/dev/disk/by-*ます。ディスク全体の場合、/dev/disk/by-idディスクモデルとシリアル番号を含むディスクデバイスへのシンボリックリンクが含まれます。

さらに保護するために、デバイスにアクセスするためのアクセス許可を自分に与え(例sudo chown sj755 /dev/disk/by-id/ata-Yoyodine-50RDF15H:)、残りをrootではなく自分のユーザーの下で実行してください。

あなたが行動するつもりだディスクが期待コンテンツ、例えば小切手を持っていることをダブルチェックしていることを確認しfdisk -l /dev/whateverfile - </dev/sdz99、...シェルでは、Esc .デバイス名を再入力し、前のコマンドの引数を決してリコールしないように。


1

私はそれを達成する2つの方法を考えています。

  1. ラッパー(シェル関数)を記述し、実際のプログラムに渡す前にそこで引数を確認します。
  2. これらの操作は、SELinuxやAppArmorなどで制限されているシェルから行ってください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.