/dev/sdb
ฉันได้อ่านบัตรติดอยู่บน
สิ่งที่ฉันทำคือให้สิทธิ์ทั้งหมดแก่เจ้าของกลุ่มและส่วนที่เหลือของโลกโดยใช้:
sudo chmod 777 /dev/sdb
ฉันสามารถใช้ชุดค่าผสมอื่นช่วยให้เจ้าของ (ฉัน) ใช้เครื่องอ่านการ์ดได้หรือไม่
มีบัญชีผู้ใช้เดียวเท่านั้น
/dev/sdb
ฉันได้อ่านบัตรติดอยู่บน
สิ่งที่ฉันทำคือให้สิทธิ์ทั้งหมดแก่เจ้าของกลุ่มและส่วนที่เหลือของโลกโดยใช้:
sudo chmod 777 /dev/sdb
ฉันสามารถใช้ชุดค่าผสมอื่นช่วยให้เจ้าของ (ฉัน) ใช้เครื่องอ่านการ์ดได้หรือไม่
มีบัญชีผู้ใช้เดียวเท่านั้น
คำตอบ:
มีหลายวิธีในการบรรลุเป้าหมายนี้
โดยทั่วไปใน distros ส่วนใหญ่อุปกรณ์บล็อกจะเป็นของกลุ่มเฉพาะ สิ่งที่คุณต้องทำคือเพิ่มผู้ใช้ของคุณในกลุ่มนั้น
ตัวอย่างเช่นในระบบของฉัน:
# ls -l /dev/sdb
brw-rw---- 1 root disk 8, 16 2014/07/07-21:32:25 /dev/sdb
ดังนั้นฉันต้องเพิ่มผู้ใช้ของฉันในdisk
กลุ่ม
# usermod -a -G disk patrick
แนวคิดคือการสร้างกฎ udev เพื่อเรียกใช้คำสั่งเมื่อตรวจพบอุปกรณ์
ก่อนอื่นคุณต้องหาวิธีในการระบุอุปกรณ์ คุณใช้udevadm
สำหรับสิ่งนี้ ตัวอย่างเช่น:
# udevadm info -a -n /dev/sdb
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.3/1-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb':
KERNEL=="sdb"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="31116288"
ATTR{stat}==" 279 219 3984 1182 0 0 0 0 0 391 1182"
ATTR{range}=="16"
ATTR{discard_alignment}=="0"
ATTR{events}=="media_change"
ATTR{ext_range}=="256"
ATTR{events_poll_msecs}=="-1"
ATTR{alignment_offset}=="0"
ATTR{inflight}==" 0 0"
ATTR{removable}=="1"
ATTR{capability}=="51"
ATTR{events_async}==""
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.3/1-1.3:1.0/host6/target6:0:0/6:0:0:0':
KERNELS=="6:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{rev}=="0207"
ATTRS{type}=="0"
ATTRS{scsi_level}=="0"
ATTRS{model}=="STORAGE DEVICE "
ATTRS{state}=="running"
ATTRS{queue_type}=="none"
ATTRS{iodone_cnt}=="0x184"
ATTRS{iorequest_cnt}=="0x184"
ATTRS{device_busy}=="0"
ATTRS{evt_capacity_change_reported}=="0"
ATTRS{timeout}=="30"
ATTRS{evt_media_change}=="0"
ATTRS{max_sectors}=="240"
ATTRS{ioerr_cnt}=="0x2"
ATTRS{queue_depth}=="1"
ATTRS{vendor}=="Generic "
ATTRS{evt_soft_threshold_reached}=="0"
ATTRS{device_blocked}=="0"
ATTRS{evt_mode_parameter_change_reported}=="0"
ATTRS{evt_lun_change_reported}=="0"
ATTRS{evt_inquiry_change_reported}=="0"
ATTRS{iocounterbits}=="32"
ATTRS{eh_timeout}=="10"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.3/1-1.3:1.0/host6/target6:0:0':
KERNELS=="target6:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.3/1-1.3:1.0/host6':
KERNELS=="host6"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.3/1-1.3:1.0':
KERNELS=="1-1.3:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceNumber}=="00"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.3':
KERNELS=="1-1.3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{devpath}=="1.3"
ATTRS{idVendor}=="05e3"
ATTRS{speed}=="480"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{busnum}=="1"
ATTRS{devnum}=="5"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="500mA"
ATTRS{authorized}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bNumConfigurations}=="1"
ATTRS{maxchild}=="0"
ATTRS{bcdDevice}=="0207"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}=="0x0"
ATTRS{serial}=="000000000207"
ATTRS{version}==" 2.00"
ATTRS{urbnum}=="1115"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Generic"
ATTRS{removable}=="unknown"
ATTRS{idProduct}=="0727"
ATTRS{bDeviceClass}=="00"
ATTRS{product}=="USB Storage"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{devpath}=="1"
ATTRS{idVendor}=="8087"
ATTRS{speed}=="480"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{busnum}=="1"
ATTRS{devnum}=="2"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="0mA"
ATTRS{authorized}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bNumConfigurations}=="1"
ATTRS{maxchild}=="6"
ATTRS{bcdDevice}=="0000"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}=="0x0"
ATTRS{version}==" 2.00"
ATTRS{urbnum}=="61"
ATTRS{ltm_capable}=="no"
ATTRS{removable}=="unknown"
ATTRS{idProduct}=="0024"
ATTRS{bDeviceClass}=="09"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{devpath}=="0"
ATTRS{idVendor}=="1d6b"
ATTRS{speed}=="480"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{authorized_default}=="1"
ATTRS{busnum}=="1"
ATTRS{devnum}=="1"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="0mA"
ATTRS{authorized}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bNumConfigurations}=="1"
ATTRS{maxchild}=="3"
ATTRS{bcdDevice}=="0313"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}=="0x0"
ATTRS{serial}=="0000:00:1d.0"
ATTRS{version}==" 2.00"
ATTRS{urbnum}=="26"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Linux 3.13.6-gentoo ehci_hcd"
ATTRS{removable}=="unknown"
ATTRS{idProduct}=="0002"
ATTRS{bDeviceClass}=="09"
ATTRS{product}=="EHCI Host Controller"
looking at parent device '/devices/pci0000:00/0000:00:1d.0':
KERNELS=="0000:00:1d.0"
SUBSYSTEMS=="pci"
DRIVERS=="ehci-pci"
ATTRS{irq}=="23"
ATTRS{subsystem_vendor}=="0x144d"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x0c0320"
ATTRS{companion}==""
ATTRS{enabled}=="1"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{dma_mask_bits}=="32"
ATTRS{local_cpus}=="0f"
ATTRS{device}=="0x1e26"
ATTRS{uframe_periodic_max}=="100"
ATTRS{msi_bus}==""
ATTRS{local_cpulist}=="0-3"
ATTRS{vendor}=="0x8086"
ATTRS{subsystem_device}=="0xc0d3"
ATTRS{numa_node}=="-1"
ATTRS{d3cold_allowed}=="1"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
จากนั้นสร้างไฟล์ใหม่ใน/etc/udev/rules.d
เช่น99-cardreader.rules
:
SUBSYSTEM=="block", ATTRS{idProduct}=="0727", ATTRS{serial}=="000000000207", ACTION=="add", RUN+="/bin/chmod 777 /dev/$name"
ที่นี่ฉันใช้ผลลัพธ์จากudevadm info
คำสั่งเพื่อค้นหาข้อมูลการระบุบางอย่างสำหรับอุปกรณ์ ฉันใช้SUBSYSTEM="block"
รายการสำหรับรายการแรกแล้วATTRS
ค่าจากรายการที่ 6 โดยทั่วไปจะพบอุปกรณ์ USB ที่มีหมายเลขผลิตภัณฑ์และซีเรียลนั้นจากนั้นค้นหาอุปกรณ์บล็อกที่เป็นผลมาจากอุปกรณ์ USB นั้น
คำสั่งจะมีการเปลี่ยนแปลงสิทธิ์บนอุปกรณ์ที่จะRUN
777
อย่างไรก็ตามฉันไม่คิดว่านี่เป็นทางออกที่ดีมากเพราะนี่เป็นการเปิดอุปกรณ์ไปทั่วโลก ทางออกที่ดีกว่าอาจเป็น:
SUBSYSTEM=="block", ATTRS{idProduct}=="0727", ATTRS{serial}=="000000000207", ACTION=="add", RUN+="/bin/setfacl -m u:patrick:rw- /dev/$name"
การดำเนินการนี้จะให้สิทธิ์การpatrick
เข้าถึงแบบอ่าน / เขียนแก่ผู้ใช้
หมายเหตุ:สิ่งสำคัญคือต้องจำไว้ว่าเมื่อเขียนกฎ udev คุณสามารถใช้พารามิเตอร์จากอุปกรณ์ด้านบนและอุปกรณ์อื่น ๆ ในห่วงโซ่เท่านั้น ดังนั้นฉันสามารถใช้SUBSYSTEM="block"
พารามิเตอร์และATTRS
พารามิเตอร์ แต่ฉันไม่สามารถใช้พารามิเตอร์ใด ๆ จากอุปกรณ์อื่น ๆ ในห่วงโซ่ได้หรือกฎจะไม่ตรงกัน
หมายเหตุเพิ่มเติม: (เนื่องจากระบบต้องการมากกว่า 6 ตัวอักษรสำหรับการแก้ไขและฉันไม่มีชื่อเสียงในการเพิ่มความคิดเห็น) การจับคู่ evev ต้องใช้ตัวดำเนินการเท่าเทียมกัน ( ==
) ไม่ใช่การมอบหมาย ( =
)! คำตอบนี้ก่อนหน้านี้มีSUBSYSTEM="block"
ที่ไม่ทำงาน ( invalid SUBSYSTEM operation
)
$name
กฎอะไรเป็นลายลักษณ์อักษร? ฉันควรแทนที่ด้วยsdb
หรือไม่
ls -l /dev/sdb
คุณสามารถโปรดเรียกใช้ ฉันเดาว่านี่เป็นของรูท แต่จะดีแน่