PCI -E, sysfs и пользователь -странность разрешения id

Обычно grub-mkconfigдолжно автоматически -обнаруживать операционные системы с двойной загрузкой (с помощью утилиты os-prober). Это, однако, требует, чтобы у вас был смонтирован диск Windows. Например, попробуйте это:

$ mkdir -p /mnt/windows
$ mount /dev/sda1 /mnt/windows
$ grub-mkconfig -o /boot/grub/grub.cfg

Теперь он должен автоматически определить вашу установку Windows, и вы сможете загрузиться в Windows.

Еще одна важная вещь, которую следует отметить в отношении предыдущего ответа на этот вопрос :вам не следует никогда редактировать вручную /boot/grub/grub.cfg, так как он может быть легко перезаписан такими инструментами, как grub-mkconfig(, а синтаксис не В любом случае все интуитивно понятно ).

0
22.09.2020, 09:58
1 ответ

Да, драйвер ядра может управлять данными, которые он предоставляет в sysfs/procfs, на основе идентификатора пользователя -и/или практически любой информации, к которой ядро ​​имеет доступ.

Когда вы читаете что-то из procfs или sysfs, системный вызов для чтения информации в основном заканчивается вызовом функции в соответствующем драйвере. Эта функция может видеть всю информацию о пользовательском -пространственном процессе, вызвавшем операцию чтения, и, безусловно, может изменить свой вывод на основе этой или любой другой информации, к которой может получить доступ ядро.

В конкретном случае /sys/bus/pci/devices/<PCI device ID>/configлюбые попытки его чтения завершатся функцией pci_read_config()в файле drivers/pci/pci-sysfs.c, которая проверит, имеет ли вызывающий пользовательский -космический процесс CAP _SYS _Возможность ADMIN (, которая в большинстве случаев означает, что пользовательroot). Если у пользователя нет такой возможности, функция ограничит читаемые данные конфигурации PCI первыми (dev->cfg_size)байтами (128 байтами на CardBus ).

В версиях ядра 2.6.5 и ниже ограничение составляло 256 байт, но в версии 2.6.6 оно было ужесточено до (dev->cfg_size). В современной системе (dev->cfg_size)обычно имеет размер 64 или 256 байт в зависимости от рассматриваемого устройства.

Вы можете продемонстрировать это с помощью простого lspci -v. Если вы запустите его как root, вы увидите возможности PCI/PCIe каждого устройства. Но если вы запустите его как обычный пользователь,вместо этого вы получите:

Capabilities: <access denied>
1
18.03.2021, 23:03

Теги

Похожие вопросы