Ich frage mich, ob es eine Möglichkeit gibt, zu verhindern, dass bestimmte Geräte zur Ausgabedatei des dd
Befehls und zum Ziel des fdisk
Befehls werden. Ich verwende derzeit die beiden Vorgänge, um einen Bootloader, einen Kernel und ein Root-Dateisystem auf eine SD-Karte zu schreiben, die als angezeigt wird /dev/sdd
. Ich bin immer ein wenig besorgt , dass ich mischen werde sdd
mit sdb
, oder sda
da die Buchstaben Aund Dsind in der Nähe auf der Tastatur, und ich möchte einen Weg finden , Befehle mit diesem Format zu verhindern:
dd if=/dev/sd[a-zA-Z0-9]* of=/dev/sd[ab]
oder
fdisk /dev/sd[ab]
Antworten:
Sie können versuchen, eine udev-Regel zu schreiben, um den zusätzlichen Festplatten ausreichend eindeutige Namen zu geben.
Eine andere Idee: Wann immer Sie eine Sicherheitsanforderung als "Es ist nicht wer es tut, es ist wie sie es tun" ausdrücken können, sprechen Sie von Typendurchsetzung, und in den meisten Linux-Distributionen wird TE auf MAC-Ebene durchgeführt. Der größte Teil meiner MAC-Erfahrung ist mit "SELinux"
Sie können es nicht auf DAC-Ebene sperren, da Sie sonst keine E / A auf dem Gerät ausführen könnten (nicht unbedingt ein Fehler von DAC als Sicherheitsmodell, sondern nur die aktuelle DAC-Richtlinie basiert ausschließlich auf Identität, sodass alle Programme Laufen unter einer bestimmten Identität erhalten identische Rechte, ohne dass ein zusätzlicher administrativer Ausdruck möglich ist. Das Sperren auf MAC-Ebene kann so erfolgen, dass normale Benutzerbereichskomponenten nichts mit der Blockdatei tun können, außer Ihren Root-Dienstprogrammen und bestimmten Teilen der Plattform. Auf Fedora ist dies bereits der Fall, wenn Blockgeräte mit dem SELinux-Typ von
fixed_disk_device_t
und grub angezeigt werden,bootloader_exec_t
siehe folgendes Beispiel:Während
dd
hat ein reguläres bin_t Label:bin_t
(anscheinend) kann immer noch auf blockierte Geräte schreiben, aber das Erstellen eines neuen Dateikontexttyps fürfdisk
unddd
und das Schreiben einer Selinux-Regel, um den Zugriff des neuen Typs zu verbieten,fixed_disk_device_t
sollte nicht allzu schwierig sein. Sie müssten es nur so gestalten, dass normale Benutzerrollen es nicht können, aber Benutzer mit demsysadm_t
können es. Denken Sie dann daran, nur ein zu machen,newrole -r root:sysadm_r
bevor Sie versuchen, die Festplatte neu zu partitionieren oder eindd
Over-the-Block-Gerät zu machen (was nicht sein sollte). Es ist keine große Sache, da es nicht so ist, als würdest du denfdisk
ganzen Tag jeden Tag laufen .Wahrscheinlich mehr Arbeit als Sie gesucht haben, aber TE ist der Mechanismus, der das allgemeine Problem löst, auf das Sie stoßen. Persönlich ist die
udev
Regel wahrscheinlich, dass Sie die sicherste Wette sind. Ich erwähne das TE-Zeug nur für den Fall, dass Sie daran interessiert sind, eine größere Anzahl von Problemen zu lösen, die diesem ähnlich sind.quelle
Wenn Sie sich nicht sicher sind
/dev/sdx
, verwenden Sie die alternativen Gerätenamen, die Sie unter finden/dev/disk/
.Zum Beispiel ist mein SD-Kartenleser
/dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0
. Das ist zwar ein bisschen ausführlich, aber es gibt zumindest keine Möglichkeit, es mit einer Festplatte zu verwechseln.Alternativ
hdparm -i /dev/sdx
kann a nützliche Informationen anzeigen, wenn es sich um eine Festplatte handelt, und unglückliche Unfälle vermeiden ...quelle
/dev/disk/*
es auf jedem Linux-System verfügbar ist.mysdcard=/dev/sdd
und dann verwenden Sie natürlich nur$mysdcard
als Argument, wo immer Sie es brauchen.Es gibt längere, aussagekräftige Namen in
/dev/disk/by-*
./dev/disk/by-id
Enthält für eine gesamte Festplatte einen Symlink zu dem Festplattengerät, das das Festplattenmodell und die Seriennummer enthält.Geben Sie sich für zusätzlichen Schutz die Erlaubnis, auf das Gerät zuzugreifen (z. B.
sudo chown sj755 /dev/disk/by-id/ata-Yoyodine-50RDF15H
), und erledigen Sie den Rest unter Ihrem eigenen Benutzer anstelle von root.Achten Sie darauf , nochmals zu überprüfen , dass die Platte Sie gehen zu dem erwarteten Inhalt zu handeln hat, zB Scheck
fdisk -l /dev/whatever
,file - </dev/sdz99
... In der Shell Esc .das Argument des vorherigen Befehls zu erinnern, nie die Gerätenamen neu eingeben.quelle
Ich sehe zwei Möglichkeiten, dies zu erreichen:
quelle