অন্যান্য ব্যবহারকারীদের অ্যাক্সেস না দিয়ে কোনও ডিভাইসে একটি নির্দিষ্ট ব্যবহারকারীর অনুমতি দিন


18

আমার সাথে একটি কার্ড রিডার সংযুক্ত আছে /dev/sdb

আমি যা করি তা হ'ল মালিক, গোষ্ঠী এবং বিশ্বের অন্যান্য অংশগুলিকে সমস্ত অনুমতি প্রদান করে এটি ব্যবহার করে:

sudo chmod 777 /dev/sdb

কেবলমাত্র মালিক (আমাকে) কার্ড রিডার ব্যবহারের অনুমতি দিয়ে আমি কি অন্য সংমিশ্রণটি ব্যবহার করতে পারি?

শুধুমাত্র একটি ব্যবহারকারীর অ্যাকাউন্ট আছে।


আপনি দয়া করে চালাতে পারেন ls -l /dev/sdb? আমি অনুমান করছি যে এটি রুটের মালিকানাধীন, তবে এটি নিশ্চিত করা ভাল।
ওয়ারউইক

এতে বলা হয়েছে: "brw-rw ---- 1 root"
মোহাম্মদ আহমেদ

উত্তর:


28

এটি সম্পাদনের একাধিক উপায় রয়েছে।

1. ডিভাইসের মালিকানাধীন গোষ্ঠীতে আপনার ব্যবহারকারীকে যুক্ত করুন

সাধারণত বেশিরভাগ ডিস্ট্রোজে ব্লক ডিভাইসগুলির একটি নির্দিষ্ট গোষ্ঠীর মালিকানা থাকে। আপনাকে যা করতে হবে তা হ'ল আপনার ব্যবহারকারীকে সেই গোষ্ঠীতে যুক্ত করা।

উদাহরণস্বরূপ, আমার সিস্টেমে:

# 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

 

2. ডিভাইসের অনুমতিগুলি পরিবর্তন করুন

ধারণাটি হ'ল ডিভাইসটি সনাক্ত হওয়ার পরে একটি কমান্ড চালানোর জন্য একটি ইউদেব নিয়ম তৈরি করা।

প্রথমে আপনাকে ডিভাইস সনাক্ত করার জন্য কোনও উপায় খুঁজে বের করতে হবে। আপনি 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"প্রথম প্রবেশের জন্য এন্ট্রি ব্যবহার করেছি এবং তারপরে ATTRS6th ষ্ঠ প্রবেশের মানগুলি। এটি মূলত সেই পণ্যটি এবং সিরিয়াল নম্বর সহ ইউএসবি ডিভাইসটি খুঁজে পাবে এবং তারপরে সেই ইউএসবি ডিভাইস থেকে আসা ব্লক ডিভাইসটি আবিষ্কার করবে।

RUNকমান্ড ডিভাইসে অনুমতি পরিবর্তন করতে হবে 777। যাইহোক আমি এটিকে খুব ভাল সমাধান হিসাবে বিবেচনা করি না কারণ এটি বিশ্বজুড়ে ডিভাইসটি খোলে। পরিবর্তে একটি ভাল সমাধান হতে পারে:

SUBSYSTEM=="block", ATTRS{idProduct}=="0727", ATTRS{serial}=="000000000207", ACTION=="add", RUN+="/bin/setfacl -m u:patrick:rw- /dev/$name"

এটি ব্যবহারকারীকে patrickডিভাইসে পড়ার / লেখার অ্যাক্সেসের অনুমতি দেবে।

দ্রষ্টব্য: এটি মনে রাখা জরুরী যে উদেব বিধিগুলি লেখার সময় আপনি কেবল শীর্ষ ডিভাইস থেকে প্যারামিটার এবং চেইনে থাকা অন্য একটি ডিভাইস ব্যবহার করতে পারেন। এইভাবে আমি SUBSYSTEM="block"প্যারামিটার এবং পরামিতি ব্যবহার করতে পারি ATTRS। তবে আমি চেইনের অন্য কোনও ডিভাইস থেকে কোনও পরামিতি ব্যবহার করতে পারিনি, বা নিয়মটি মেলতে ব্যর্থ হবে।

আরেকটি নোট: (যেহেতু সিস্টেমটি সম্পাদনার জন্য 6 টিরও বেশি অক্ষরের প্রয়োজন এবং আমার কোনও মন্তব্য যুক্ত করার খ্যাতি নেই) উদেব মিলের ক্ষেত্রে অবশ্যই সমতা অপারেটরটি ব্যবহার করা উচিত ( ==), বরাদ্দ নয় ( =)! এই উত্তরটির আগে SUBSYSTEM="block"যা কাজ করে না ( invalid SUBSYSTEM operation)।


সিস্টেমেড 219-তে, কমপক্ষে, ইউদেব আপনাকে RUN + = "/ বিন / chmod 777 / dev / $ নাম" এর পরিবর্তে MODE = "777" ব্যবহার করতে দেয়। যদিও আমি বিশ্বাস করি না যে এটির সেটফ্যাকল স্পষ্টতভাবে চালনার বিকল্প রয়েছে।
দোসিয়া

1
কি $nameলিখিত নিয়ম? আমি এটি দিয়ে প্রতিস্থাপন করা উচিত sdb?
মেরেকি

2
@Marecky freedesktop.org/software/systemd/man/udev.html#%24name "ডিভাইস বর্তমান নাম। যদি তা না হয় একটি নিয়ম পরিবর্তন, এটা কার্নেল ডিভাইস নাম।"। আপনি এটি কোনও কিছুর সাথে প্রতিস্থাপন করবেন না, আপনি যেমনটি রেখে যান।
প্যাট্রিক

ধন্যবাদ, আমি কেবলমাত্র আমার নির্দিষ্ট ইস্যুতে আপনার উত্তরটি প্রয়োগ করেছি, যা ভার্চলবক্সে চলমান অতিথি উইন্ডোজ 7 এর বুট-ডিস্ক হিসাবে কনফিগার করা কাঁচা হার্ড ডিস্ক অ্যাক্সেসের নিয়মিত ব্যবহারকারীর পক্ষে পর্যাপ্ত অধিকার ছিল না।
মেরেকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.