Как изменить 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.