Как изменить tty группу в Linux (собрать с помощью buildroot)

Я работаю над сборкой Linux Kernel 3.14.28 с Buildroot для встроенного устройства.

В /dev/все тты root:root и не root:dialout как стандартный линукс. Таким образом, невозможно получить доступ к любому ttyX без регистрации как root,

Как я могу изменить группу tty навсегда root:dialout? Я пытаюсь изменить его с помощью команды chown, но это стало root:root снова при перезагрузке.

2 ответа

devtmpfs всегда устанавливает права на 0600 и делает это до udev (или что-то еще бежит за ним), чтобы поддерживать их. Его источник подтверждает, что нет возможности переопределить это явно (tty переопределение драйвера устройства mode безусловно в некоторых случаях).

Предполагая, что вы используете Buildroot по умолчанию busybox как init есть способ сделать это с помощью следующей дополнительной строки в busybox "s inittab (дополнительный = должен присутствовать в дополнение к основным линиям (или их заменам), которые подразумеваются, когда нет inittab - так как они больше не подразумеваются, то есть)

::sysinit:<path_to_your_script>

с помощью сценария вызова chown а также chmod в цикле.

Но лучше справиться с этим в рамках существующего /etc/init.d/rcS (который также управляется BusyBox's init в sysinit по умолчанию).

Как вы можете видеть из стокового buildroot's /etc/init.d/rcS все, что вам нужно сделать, это создать скрипт /etc/init.d/S<whatever>.sh (где "что угодно" помещает его в нужную позицию в /etc/init.d/S??* вывод) с вашими командами:

for tty in /dev/tty*; do
    chown root:dialout "$tty"
    chmod ug+rw "$tty"   #do not touch other bits
done
unset tty

TL; DR: выбрать mdev в качестве диспетчера устройств и использовать tty группа вместо dialout,

Ядро devtmpfs создает узлы устройства с именем по умолчанию, владельцем и разрешениями. Он также отправляет uevent когда узел создан, что позволяет обработчику событий изменять имя, владельца или разрешения или делать что-либо еще, что он хочет. Раньше это называлось системой горячего подключения, но сейчас она гораздо более общая.

Buildroot предлагает выбор между тремя обработчиками событий: mdev, который является частью busybox, eudev который является автономным udev вилка и udev которая является частью systemd система инициализации. Эти обработчики настроены с файлами правил, которые определяют, что делать с конкретным типом устройства при его появлении.

Для вашей конкретной потребности, mdev это лучший выбор, так как он очень прост, легок для понимания, не занимает много места и конфигурации по умолчанию достаточно. В меню настройки Buildroot перейдите в раздел " Конфигурация системы" → " /dev management" и выберите " Dynamic" с помощью mdev. Затем перестройте корневую файловую систему. Теперь он будет заполнен mdev двоичный (часть busybox), сценарий инициализации для его запуска и файл правил по умолчанию в /etc/mdev.conf, Этот файл по умолчанию содержит:

tty[0-9]*       root:tty 660

Это означает, что tty устройства будут менять свою группу на tty и их разрешения на групповое чтение и запись. Таким образом, вы можете просто убедиться, что зарегистрированный пользователь принадлежит tty группа, а Боб твой дядя.

Если по умолчанию mdev.conf файла недостаточно для вас (например, если вам действительно нужна группа dialout), то вы можете создать наложение файловой системы, скопировать package/busybox/mdev.conf в /etc/mdev.conf и измените его по мере необходимости. Полная документация по mdev.conf Формат можно найти в источниках busybox.

Другие вопросы по тегам