さまざまなハードウェアでさまざまなLinuxディストリビューションを試している間、次のコマンドを入力することがよくあります。
sudo dd if=xubuntu-13.10-desktop-amd64.iso of=/dev/sdc bs=10240
言うまでもなく、間もなく間違ったターゲットを入力し、意図したUSBドライブの代わりにハードドライブを消去しました。sudo
毎回使用したくありません。
私のシステムであるかなり現代的なUbuntuでは、権限は次/dev/sdc
のとおりです。 (スティックが提供されるとき):
$ ls -al /dev/sdc*
brw-rw---- 1 root disk 8, 32 Apr 6 22:10 /dev/sdc
一般ユーザーにランダムUSBスティックへの書き込みアクセスを許可し、システム内の他のディスクにアクセスを許可したくない場合はどうすればよいですか?
答え1
UDEVを使って欲しいことができると思います。ルールファイルを作成します。たとえば、/etc/udev/rules.d/99-thumbdrives.rules
UnixグループまたはユーザーがUSBサムドライブにアクセスできるようにするルールを追加できます。
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="<user>", GROUP="<group>", MODE="0660"
<user>
デバイスはユーザーとグループを使用して作成されます<group>
。
はい
この行を私のシステムに追加した後。
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="saml", GROUP="saml", MODE="0660"
私のルールを再読み込みします。
$ sudo udevadm control --reload-rules
システムにサムドライブを挿入すると、ディスプレイは
/var/log/messages
次のようになります。$ sudo tail -f /var/log/messages Apr 13 11:48:45 greeneggs udisksd[2249]: Mounted /dev/sdb1 at /run/media/saml/HOLA on behalf of uid 1000 Apr 13 11:51:18 greeneggs udisksd[2249]: Cleaning up mount point /run/media/saml/HOLA (device 8:17 is not mounted) Apr 13 11:51:18 greeneggs udisksd[2249]: Unmounted /dev/sdb1 on behalf of uid 1000 Apr 13 11:51:18 greeneggs kernel: [171038.843969] sdb: detected capacity change from 32768000 to 0 Apr 13 11:51:39 greeneggs kernel: [171058.964358] usb 2-1.2: USB disconnect, device number 15 Apr 13 11:51:46 greeneggs kernel: [171066.053922] usb 2-1.2: new full-speed USB device number 16 using ehci-pci Apr 13 11:51:46 greeneggs kernel: [171066.134401] usb 2-1.2: New USB device found, idVendor=058f, idProduct=9380 Apr 13 11:51:46 greeneggs kernel: [171066.134407] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 Apr 13 11:51:46 greeneggs kernel: [171066.134410] usb 2-1.2: Product: USBDrive Apr 13 11:51:46 greeneggs kernel: [171066.134412] usb 2-1.2: Manufacturer: JMTek Apr 13 11:51:46 greeneggs kernel: [171066.135470] usb-storage 2-1.2:1.0: USB Mass Storage device detected Apr 13 11:51:46 greeneggs kernel: [171066.136121] scsi17 : usb-storage 2-1.2:1.0 Apr 13 11:51:46 greeneggs mtp-probe: checking bus 2, device 16: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2" Apr 13 11:51:46 greeneggs mtp-probe: bus: 2, device: 16 was not an MTP device Apr 13 11:51:47 greeneggs kernel: [171067.139462] scsi 17:0:0:0: Direct-Access JMTek USBDrive 7.77 PQ: 0 ANSI: 2 Apr 13 11:51:47 greeneggs kernel: [171067.140251] sd 17:0:0:0: Attached scsi generic sg2 type 0 Apr 13 11:51:47 greeneggs kernel: [171067.142105] sd 17:0:0:0: [sdb] 64000 512-byte logical blocks: (32.7 MB/31.2 MiB) Apr 13 11:51:47 greeneggs kernel: [171067.144236] sd 17:0:0:0: [sdb] Write Protect is off Apr 13 11:51:47 greeneggs kernel: [171067.145988] sd 17:0:0:0: [sdb] No Caching mode page found Apr 13 11:51:47 greeneggs kernel: [171067.145998] sd 17:0:0:0: [sdb] Assuming drive cache: write through Apr 13 11:51:47 greeneggs kernel: [171067.153721] sd 17:0:0:0: [sdb] No Caching mode page found Apr 13 11:51:47 greeneggs kernel: [171067.153728] sd 17:0:0:0: [sdb] Assuming drive cache: write through Apr 13 11:51:47 greeneggs kernel: [171067.159028] sdb: sdb1 Apr 13 11:51:47 greeneggs kernel: [171067.164760] sd 17:0:0:0: [sdb] No Caching mode page found Apr 13 11:51:47 greeneggs kernel: [171067.164768] sd 17:0:0:0: [sdb] Assuming drive cache: write through Apr 13 11:51:47 greeneggs kernel: [171067.164775] sd 17:0:0:0: [sdb] Attached SCSI removable disk Apr 13 11:51:47 greeneggs kernel: [171067.635474] FAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck. Apr 13 11:51:47 greeneggs udisksd[2249]: Mounted /dev/sdb1 at /run/media/saml/HOLA on behalf of uid 1000
以下のデバイスファイルを調べると、
/dev
次のようになります。$ ls -l /dev/sd* brw-rw----. 1 root disk 8, 0 Apr 13 09:17 /dev/sda brw-rw----. 1 root disk 8, 1 Apr 13 09:17 /dev/sda1 brw-rw----. 1 root disk 8, 2 Apr 13 09:17 /dev/sda2 brw-rw----. 1 saml saml 8, 16 Apr 13 11:51 /dev/sdb brw-rw----. 1 root disk 8, 17 Apr 13 11:51 /dev/sdb1
だからこれが効果があるようです。
より明確な
上記のアプローチは機能しますが、これらのルールをすべてのブロックデバイスに適用できますが、これは私たちが望むものではありません。焦点を絞るために、プロパティATTRS{..}==...
ルールを使用してアプリケーションを特定のハードウェアに制限できます。私の場合は、単一のUSBサムドライブにのみ適用したいと思います。
ステップ1 - 一意のIDデバイス
まず、特定のサムドライブをマウントしたら、このコマンドを使用してドライブを表示し、udevadm
特定のプロパティを参照できます。
ここでは、「メーカー」と「製品」のプロパティに焦点を当てています。
$ udevadm info -a -p $(udevadm info -q path -n /dev/sdb)|grep -iE "manufacturer|product"
ATTRS{manufacturer}=="JMTek"
ATTRS{idProduct}=="9380"
ATTRS{product}=="USBDrive"
ATTRS{idProduct}=="0020"
ATTRS{manufacturer}=="Linux 3.13.7-100.fc19.x86_64 ehci_hcd"
ATTRS{idProduct}=="0002"
ATTRS{product}=="EHCI Host Controller"
メモ: ATTRS{..}==..
属性は、デバイスファイルが最終的に派生する階層内の親デバイスの属性です。したがって、私たちの場合、追加されたブロックデバイスは/dev/sdb
USB親デバイスから来るので、その親デバイスのプロパティを探していますATTRS{manufacturer}=...
。
したがって、この例では、製造元を「JMTek」として選択し、製品を「USBDrive」として選択しました。
ステップ2 - .rulesを修正する
したがって、これらの追加ビットを使用してソース.rules
ファイルに追加できます。
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ATTRS{manufacturer}=="JMTek", ATTRS{product}=="USBDrive", OWNER="saml", GROUP="saml", MODE="0660"
ステップ3 - 一度試してください
これで、ルールを再ロードしてUSBサムドライブをマウント解除/削除/再挿入すると、次のルールが表示されます。
$ ls -l /dev/sdb*
brw-rw----. 1 saml saml 8, 16 Apr 13 12:29 /dev/sdb
brw-rw----. 1 root disk 8, 17 Apr 13 12:29 /dev/sdb1
ただし、まったく異なるデバイスを接続する場合:
$ ls -l /dev/sdb*
brw-rw----. 1 root disk 8, 16 Apr 13 12:41 /dev/sdb
brw-rw----. 1 root disk 8, 17 Apr 13 12:41 /dev/sdb1