2

Я новичок в ACL, так что это для меня шантаж. Но у меня есть камера, с которой я хочу поговорить.

Итак, я получил сетевой бот Debian:

ulf@term13:~(0)$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 6.0.10 (squeeze)
Release:    6.0.10
Codename:   squeeze

К этой машине я прикрепил камеру:

ulf@term13:~(0)$ lsusb | grep Nikon
Bus 001 Device 092: ID 04b0:0428 Nikon Corp. 
ulf@term13:~(0)$ ls -alF /dev/bus/usb/001/092 
crw-rw-r--+ 1 root root 189, 91 25 sep 10.05 /dev/bus/usb/001/092

Обратите внимание на + в конце строки разрешения crw-rw-r--+ . Это указывает на то, что здесь есть ACL :

ulf@term13:~(1)$ getfacl /dev/bus/usb/001/092 
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/092
# owner: root
# group: root
user::rw-
user:knut:rw-
group::rw-
mask::rw-
other::r--

Видимо, Кнут пользователь имеет дополнительные rw разрешения здесь. Но как он их получил?

Я могу установить те же разрешения для моего пользователя с помощью setfacl . Но какой-либо подобный набор не будет присутствовать после повторного подключения камеры. После включения и выключения камеры она фактически устанавливается на другое устройство:

ulf@term13:~(0)$ lsusb | grep Nikon
Bus 001 Device 093: ID 04b0:0428 Nikon Corp. 

Но разрешения для нового устройства 093 такие же, как и у старого 092 (без каких-либо дополнительных разрешений я добавил к 092).

Я думаю, есть файл udev -rule, который должен быть ответственным, но он пустой ???

ulf@term13:~(0)$ ls -alF /etc/udev/rules.d/90-libgphoto2.rules 
-rw-r--r-- 1 root root 0 26 aug  2014 /etc/udev/rules.d/90-libgphoto2.rules

И ни один из других файлов udev не имеет ничего общего с этим.

Есть ли какой-нибудь файл, где это настроено? Это настройка системного администратора, которого здесь больше нет, поэтому мне нужно исправить это самому.

1 ответ1

2

Видимо, пользователь кнут имеет здесь дополнительные права доступа. Но как он их получил?

Пользователь "кнут" вошел в систему на консоли? Во многих современных системах Linux udev предоставляет доступ к устройству в зависимости от того, кто в данный момент вошел в систему.

(Здесь "консоль" означает основной дисплей + клавиатура, подключенная непосредственно к компьютеру, - не имеет значения текстовый или графический режим).

Более старые версии (включая Debian 6) имеют правила с TAGS+="udev-acl" и получают статус сеанса из ConsoleKit, если имеется, в противном случае pam_console. Проверьте, who , содержимое /var/run/console и, возможно, ck-list-sessions . Эти механизмы относительно просты - если пользователь вошел в "консоль", он получает доступ, в противном случае нет.

Дистрибутивы, использующие systemd, берут ту же информацию из systemd-logind и используют вместо нее тег "uaccess" . В дополнение к консоли, logind дополнительно поддерживает "многопользовательские" системы, в которых несколько пользователей могут одновременно работать на нескольких дисплеях, причем у каждого есть назначенный порт USB.

Если вы хотите обойти это и предоставить доступ другим пользователям, вы можете использовать для этого традиционные "групповые" разрешения - напишите правило udev, назначающее вашему устройству GROUP="camera-users" и добавьте людей в эту группу.

После включения и выключения камеры она фактически устанавливается на другое устройство:

ulf@term13:~(0)$ lsusb | grep Nikon
Bus 001 Device 093: ID 04b0:0428 Nikon Corp. 

В Linux (и, как правило, в Unixes)«mount» относится к подключению файловой системы к некоторому каталогу («/dev/sda2 монтируется в /boot» - файловая система, которая содержится в /dev/sda2, стала доступна в /boot). Между тем номера устройств USB - это просто числа, назначаемые последовательно; это не означает «монтаж» устройства.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .