원본 이미지를 USB 플래시 드라이브에 안전하게 쓰기

원본 이미지를 USB 플래시 드라이브에 안전하게 쓰기

다양한 하드웨어에서 다양한 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.rulesUnix 그룹이나 사용자가 USB 썸 드라이브에 액세스하도록 허용하는 규칙을 추가할 수 있습니다.

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="<user>", GROUP="<group>", MODE="0660"

<user>장치는 사용자 및 그룹을 사용하여 생성됩니다 <group>.

  1. 이 줄을 내 시스템에 추가한 후.

    KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="saml", GROUP="saml", MODE="0660"
    
  2. 내 규칙을 다시 로드합니다.

    $ sudo udevadm control --reload-rules
    
  3. 이제 시스템에 썸 드라이브를 삽입하면 디스플레이는 /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
    
  4. 이제 아래 장치 파일을 검사하면 /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/sdbUSB 상위 장치에서 나오므로 해당 상위 장치의 속성을 찾고 있습니다 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

인용하다

관련 정보