다양한 하드웨어에서 다양한 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