Điều gì xác định quyền trong / dev?


11

Tôi có một lỗi trong đó quyền trên /dev/input/event*là sai, vì vậy khi tôi sử dụng Mumble , ứng dụng không thể phát hiện các lần nhấn phím. Nếu tôi chạy lệnh sau, nó sẽ "khắc phục" sự cố, nhưng tôi muốn sửa lỗi vĩnh viễn.

sudo chmod a+r /dev/input/event/*

Điều gì xác định các quyền trên /dev/input/event*và làm cách nào để tôi đặt chúng vĩnh viễn?


5
Lưu ý rằng nếu bạn cho phép "tất cả" quyền đọc /dev/input/event/*thì về cơ bản bạn sẽ cấp cho mọi người quyền truy cập để đánh hơi bàn phím của bạn, ví dụ như mật khẩu mà bạn nhập. Trên hệ thống một người dùng, điều này có thể không quan trọng lắm, nhưng ngay cả trên hệ thống một người dùng, chúng tôi thường sử dụng người dùng hệ thống như một lớp an toàn bổ sung trong trường hợp một số thành phần bị xâm phạm và bằng cách cho nobodyngười dùng truy cập vào bàn phím của bạn luồng đầu vào bạn đang làm suy yếu sự bảo vệ này. Mặc dù điều này có thể "sửa chữa" Mumble, nhưng nó không phải là một giải pháp chung thích hợp cho vấn đề của bạn. Nên có một cách tốt hơn.
Robie Basak

2
@popey Bạn có thể nói thêm về lý do tại sao quyền trên các nút /dev/inputbị sai và quyền sở hữu và quyền hiện tại là gì (có lẽ với đầu ra của ls -l)? Có phải vấn đề là inputnhóm không có quyền đọc (hoặc đó không phải là chủ sở hữu nhóm)? Trên hệ thống của tôi, các tệp sự kiện có root:inputquyền sở hữu và cả người dùng và chủ sở hữu nhóm có thể đọc từ chúng. Nếu bạn không có điều này, có lẽ bạn nên cố gắng thiết lập theo cách đó thay vì để mọi người đọc chúng. Nếu bạn làm có điều này, nó có thể là đủ cho Mumble để chạy với quyền hạn của inputnhóm.
Eliah Kagan

@EliahKagan bạn nghĩ gì về câu trả lời của tôi? bạn có thể vui lòng xem lại không?
Sergiy Kolodyazhnyy

vâng, điều đó thật tệ. sử dụng ACL. xem câu trả lời của tôi dưới đây
solsTiCe

Bạn có thể cho tôi biết phiên bản Phân phối hoặc phiên bản máy chủ xorg không? bởi vì xorg-server 2: 1.9.99.902-2ubfox1 đã giải quyết được vấn đề.
Tohid Tamboli

Câu trả lời:


4

Một cách linh hoạt hơn để quản lý quyền trên các tệp là sử dụng ACL .

sudo setfacl -m u:popey:rw /dev/input/eventx

Nếu bạn thực sự cần phải làm điều này vĩnh viễn thì bạn có thể sử dụng quy tắc udev đặt nó cho thiết bị nhập sự kiện của bạn

thêm một tập tin /etc/udev/rules.d/99-userdev-input.rules với:

KERNEL=="event*", SUBSYSTEM=="input", RUN+="/usr/bin/setfacl -m u:popey:rw $env{DEVNAME}"

bạn có thể kiểm tra quyền ACL với

getfacl /dev/input/event*

2

Tôi không biết những gì ban đầu đặt quyền của thiết bị ký tự / dev / input / event *

nhưng, tôi biết bạn có thể thay đổi các quyền đó bằng một phần mềm trên hệ thống của bạn theo mặc định như là một phần của coreutils. xem lệnh man mknod.

Các quyền của thiết bị sự kiện của tôi là:

crw-rw ---- 1 đầu vào gốc 13, 64 ngày 14 tháng 4 06:39 / dev / input / event0

Dưới đây là một số ví dụ sử dụng:

~$ sudo mknod lolwat c 4 64 
~$ sudo mknod lolwatnow c 4 64  -m 777
~$ ls -l lolwat*
crw-r--r-- 1 root root 4, 64 Apr 14 08:07 lolwat
crwxrwxrwx 1 root root 4, 64 Apr 14 08:08 lolwatnow

nếu bạn cần thêm thông tin về việc quyết định số chính và số phụ, hãy xem tại đây

Bây giờ, bạn nói các quyền là sai. Vì vậy, một cái gì đó phải được đặt sai, và điều đó, phải chạy như root. mknod có thể được sử dụng để tạo ra một thiết bị, nhưng mkdev cũng có thể. bạn có thể muốn xem xét các quyền của bất kỳ hành động mặc định nào dành cho mkdev và mknod.

Như trong ví dụ của tôi: / dev / input / event0 có quyền crw-rw, nhưng quyền mặc định, của lolwat đã được đặt thành crw-r - r--

Tôi có một số điểm không chắc chắn, cho dù loại thiết bị ra lệnh cho quyền ban đầu. Bạn có thể thử nghiệm điều này để tìm hiểu.

Đây là một liên kết khác để biết thêm về mknod


Là lẩm bẩm chạy như root?
j0h

1

Về cơ bản, bạn cần thêm một tệp vào /etc/udev/rules.d/(bạn có thể đặt tên như vậy 75-input-events.conf)

Và thêm dòng KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"cho mỗi sự kiện vào tệp đó, trong đó x là số. Chẳng hạn, tôi có các sự kiện từ 0 đến 9, vì vậy cá nhân tôi sẽ làm cho từng người trong số họ. Câu trả lời cuối cùng về chủ đề này cho thấy bạn cũng có thể đã thêm KERNEL==event*(ví dụ, với thẻ hoang dã).


0

Đề nghị của tôi là bạn cài đặt ứng dụng đầu vào

sudo -i
apt-get update
apt-get install input-utils

Đây là một tập hợp các tiện ích hữu ích khi làm việc với lớp đầu vào của nhân Linux (phiên bản 2.6 trở lên). Bao gồm là các tiện ích để liệt kê các thiết bị đầu vào được biết đến kernel, hiển thị các sự kiện đầu vào mà thiết bị nhận được và truy vấn hoặc sửa đổi bản đồ bàn phím.

Lệnh quan tâm là:

sudo -i 
lsinput

Nó loại bỏ tất cả các thiết bị đầu vào và các chi tiết liên quan về thiết bị.

Người ta có thể quan sát các sự kiện đầu vào bằng cách sử dụng lệnh, bằng cách chỉ định số thiết bị thứ N:

sudo -i
input-events <device number>

Sau đó, người ta có thể loại bỏ ánh xạ bàn phím của một thiết bị sự kiện cụ thể bằng cách sử dụng lệnh, bằng cách chỉ định số thiết bị thứ N:

sudo -i
input-kyb <device number>

Với các công cụ này, người ta có thể gỡ lỗi một hệ thống để xem liệu đầu vào có tạo mã sự kiện dự kiến ​​hay không và do đó giúp sắp xếp các vấn đề như tại sao khóa không hoạt động hoặc được ánh xạ không chính xác.

Udev là trình quản lý thiết bị cho nhân Linux. Nó quản lý các nút thiết bị trong / dev và xử lý tất cả các hành động không gian người dùng khi thêm hoặc xóa thiết bị.

Evdev là một giao diện sự kiện đầu vào chung trong nhân Linux. Nó khái quát các sự kiện đầu vào thô từ trình điều khiển thiết bị và làm cho chúng có sẵn thông qua các thiết bị ký tự trong /dev/input/thư mục.

Mỗi khi có sự thay đổi xảy ra trong cấu trúc thiết bị, hạt nhân sẽ phát ra một uevent được udev chọn. Sau đó, udev tuân theo các quy tắc như được khai báo trong các thư mục /etc/udev/rules.d, /run/udev/rules.d và /lib/udev/rules.d.

Dựa trên thông tin chứa trong uevent, nó tìm thấy quy tắc hoặc quy tắc cần thiết để kích hoạt và thực hiện các hành động cần thiết.

Những hành động này có thể tạo hoặc xóa các tập tin thiết bị, nhưng cũng có thể kích hoạt việc tải các tập tin phần sụn cụ thể vào bộ nhớ kernel.


0

Trong một thiết bị đầu cuối chạy:

sudo nano -b /etc/rc.local

Đi xuống dòng có nội dung "exit 0" và trong một dòng phía trên nó gõ:

sudo chmod a + r / dev / input / event

Nhấn Ctrl + x để thoát khỏi đó. Nó sẽ hỏi bạn nếu bạn muốn tiết kiệm. Đánh y. Nó sẽ hỏi bạn những gì để tiết kiệm như. Chỉ cần nhấn Enter.

Bây giờ, lệnh đó sẽ khởi động ở mỗi lần khởi động và do đó cung cấp cho bạn quyền đối với thư mục đó. Tệp /etc/rc.local tự động có quyền root nên bạn sẽ không cần nhập mật khẩu để thực hiện việc này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.