Tôi nghĩ bạn có thể sử dụng UDEV để làm những gì bạn muốn. Tạo một tệp quy tắc, chẳng hạn như /etc/udev/rules.d/99-thumbdrives.rules
bạn chỉ cần thêm một quy tắc sẽ cho phép nhóm Unix hoặc người dùng truy cập vào các ổ USB tùy ý.
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="<user>", GROUP="<group>", MODE="0660"
Sẽ tạo ra thiết bị bằng cách sử dụng người dùng <user>
và nhóm <group>
.
Thí dụ
Sau khi thêm dòng này vào hệ thống của tôi.
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="saml", GROUP="saml", MODE="0660"
Và tải lại các quy tắc của tôi:
$ sudo udevadm control --reload-rules
Nếu bây giờ tôi chèn một ngón tay cái vào hệ thống của mình, thì tôi /var/log/messages
sẽ hiển thị như sau:
$ 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
Bây giờ kiểm tra các tập tin thiết bị dưới đây /dev
cho thấy như sau:
$ 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
Vì vậy, nó dường như đã làm việc.
Rõ ràng hơn
Những điều trên sẽ hoạt động nhưng có khả năng sẽ áp dụng các quy tắc này cho mọi thiết bị khối không hoàn toàn như những gì chúng ta muốn. Để thu hẹp trọng tâm của nó một chút, bạn có thể sử dụng ATTRS{..}==...
các quy tắc thuộc tính để giới hạn ứng dụng vào phần cứng cụ thể. Trong trường hợp của tôi, tôi chỉ muốn nó được áp dụng cho một ngón tay cái USB duy nhất.
Bước # 1 - thiết bị id duy nhất
Vì vậy, để bắt đầu, chúng ta có thể sử dụng lệnh này một khi chúng ta đã gắn ổ đĩa ngón tay cái cụ thể để chúng ta có thể sử dụng udevadm
để xem xét kỹ lưỡng, dò dẫm nó cho các thuộc tính cụ thể của nó.
Ở đây tôi đang tập trung xem xét các thuộc tính "nhà sản xuất" và "sản phẩm".
$ 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"
LƯU Ý: ATTRS{..}==..
các thuộc tính là các thuộc tính cho các thiết bị mẹ trong hệ thống phân cấp nơi tệp thiết bị của thiết bị này cuối cùng xuất phát từ đó. Vì vậy, trong trường hợp của chúng tôi, thiết bị khối được thêm vào, /dev/sdb
đến từ thiết bị gốc USB, vì vậy, chúng tôi đang tìm kiếm các thuộc tính của phụ huynh này ATTRS{manufacturer}=...
, ví dụ.
Vì vậy, trong ví dụ này tôi đang chọn nhà sản xuất "JMTek" và sản phẩm "USBDrive".
Bước # 2 - sửa đổi .rules flie
Vì vậy, với các bit bổ sung này trong tay, hãy thêm chúng vào .rules
tệp gốc của chúng tôi .
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ATTRS{manufacturer}=="JMTek", ATTRS{product}=="USBDrive", OWNER="saml", GROUP="saml", MODE="0660"
Bước # 3 - Dùng thử
Bây giờ khi chúng tôi tải lại các quy tắc của mình và ngắt kết nối / xóa / cài đặt lại ngón tay cái USB của chúng tôi, chúng tôi nhận được quy tắc này:
$ 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
Tuy nhiên nếu tôi chèn một thiết bị hoàn toàn khác:
$ 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
Người giới thiệu