unixforum.org
[решено] Как добавить себя в группу dialout?
[решено] Как добавить себя в группу dialout?
Сообщение MiK13 » 13.04.2021 03:02
Нужно отладить программу, которая обменивается с другим устройством через COM-порт. То есть через /dev/ttyS*, у которых
ls -l /dev/ttyS* crw-rw---- 1 root dialout 4, 64 апр 12 22:51 /dev/ttyS0 crw-rw---- 1 root dialout 4, 65 апр 12 22:51 /dev/ttyS1 crw-rw---- 1 root dialout 4, 66 апр 12 22:51 /dev/ttyS2 crw-rw---- 1 root dialout 4, 67 апр 12 22:51 /dev/ttyS3
то есть с ними может работать, кроме рута, ещё члены группы dialout.
Попробовал добавить в /etc/group, сделать там строку dialout20:mik13, по аналогии со строками типа
cdrom:x:24:mik13 floppy:x:25:mik13
mik13@MD5:~$ id uid=1000(mik13) gid=1000(mik13) группы=1000(mik13),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)
То есть группы cdrom, floppy и ряд других есть, а вот dialout нет.
В чём может быть дело?
Как-то не хочется ради отладки запускать рутовскую сессию.
P.S. Поэкспериментировал с разными терминалами.
В gnome-terminal это именно так.
mik13@MD5:~$ stty -F /dev/ttyS0 stty: /dev/ttyS0: Отказано в доступе
mik13@MD5:~$ stty -F /dev/ttyS0 stty: /dev/ttyS0: Ошибка ввода/вывода
Hephaestus Сообщения: 3729 Статус: Многоуважаемый джинн. ОС: Slackware64-14.1/14.2 Контактная информация:
Re: Как добавить себя в группу dialout?
Сообщение Hephaestus » 13.04.2021 08:44
Если Вы пытались добавить новую строку, это неверно. Нужно добавлять себя в существующую строку. Если несколько пользователей, то через запятую.
Ну или использовать usermod
Если я правильно понял и после редактирования /etc/group Вы не перелогинивались, то похоже, что с открытием какого-то из этих терминалов получилась новая сессия.
Я сейчас проверил у себя. И в группу спокойно добавился (после перелогина, разумеется), и stty -F /dev/ttyS0 ошибки не выдал. Так что в целом, схема рабочая.
Единственное, в Вашем дистре могут быть ещё где-то гайки закручены.
Re: Как добавить себя в группу dialout?
Сообщение MiK13 » 13.04.2021 12:14
Если Вы пытались добавить новую строку, это неверно. Нужно добавлять себя в существующую строку. Если несколько пользователей, то через запятую.
Ну или использовать usermod
С usermod я как-нибудь ещё проверю.
Строку я, естесвенно, не добавлял, так как она уже была. Только добавил в неё себя
Если я правильно понял и после редактирования /etc/group Вы не перелогинивались, то похоже, что с открытием какого-то из этих терминалов получилась новая сессия.
Я сейчас проверил у себя. И в группу спокойно добавился (после перелогина, разумеется), и stty -F /dev/ttyS0 ошибки не выдал. Так что в целом, схема рабочая.
Как я написал выше, я не только выходил, но и даже перегружался. Но это не помогало.
Но потом заметил, что это зависит от эмулятора терминала. Которых в линуксе далеко не один.
То есть при вызове многих оказывается, что я нахожусь в этой группе, а в других (в частности, gnome=terminal, все не проверял) — нет.
А вот это вполне может быть.
Это я проверял на Debian 10 Buster (постараюсь сегодня проверить на Raspbian, аналог Buster).
Сейчас, на работе, на Debian 9 Stretch в gnome-terminal у меня id показывает, что я есть в группе 20 dialout.
Правда, есть другая непонятная вещь, но это уже другая тема.
What do the groups do in «Users and Groups»?
I know that some define permissions on the file system (such as www-data). But I don’t understand why this question was answered successfully by adding a user to the «Video» group. So the question is mainly what do all the pre-built groups do in Ubuntu? More reasonably, since there are so many, what «special» groups exist and how or when should they be used?
2 Answers 2
Some groups allow access to files or directories, for example: the www-data allow the access to web files or the adm group to read files in /var/log . This is the trivial use.
But some groups allow access to certain devices. For example the dialout group allows access to the serial ports via files in /dev :
$ find /dev -group dialout -exec ls -ld <> \; crw-rw---- 1 root dialout 4, 64 Jan 19 12:51 /dev/ttyS0 crw-rw---- 1 root dialout 4, 67 Jan 19 12:51 /dev/ttyS3 crw-rw---- 1 root dialout 4, 66 Jan 19 12:51 /dev/ttyS2 crw-rw---- 1 root dialout 4, 65 Jan 19 12:51 /dev/ttyS1
So if you are member of the dialout group you can use the serial ports by reading and writing to the device file: echo «Hello world» > /dev/ttyS0 . The video group allows access to the video hardware.
For description of each groups, read the file: /usr/share/doc/base-passwd/users-and-groups.html
EDIT about first comment:
In fact, usually you don’t have to be in those groups to «access» the hardware resources, from a user point of view. The common practice is to have a daemon/server managing it, being member of the most restrictive group, then allowing you access to the daemon/server.
For your case, being member of the video group allows direct access to the graphic hardware, not through the X server. Usually on desktop/laptop computer it is nice to have direct access to the graphic hardware ( glxinfo | grep «direct rendering» ).
Side note, if you have direct rendering but you are not member of the video group ( id | grep —color video ), you were allowed hardware access by an acl of the /dev file ( find /dev/ -group video -exec getfacl <> \; | grep $USERNAME ).
Linux группы и их возможности
Если открыть файл /etc/group , то можно увидеть ряд различных групп. Стало интересно, что может пользователь, который входит в ту или иную группу? Какие права он приобретает? Например, мой пользователь входит в группы wheel , lp , power , network . Как посмотреть что дает данная группа пользователю, какие права и т.д? Я пытался таким образом: man wheel , но безрезультатно. Понятное дело что я мог бы написать в google мол manjaro wheel group и слоняться по форумам. Но может быть в Linux есть какая-то утилита или что-то в этом роде, чтобы узнать информацию о той или иной группе?
Группы создаются и удаляются, в системе может не быть указанных групп. Права на любую группу можно навесить любые, все зависит от файла /etc/sudoers . Вот мой ответ, который частично прояснит ситуацию ru.stackoverflow.com/questions/800756/…
Есть команды, ls, find, fuser, lsof, getent, и ещё миллион других, которые в целом дают некое понимание, что и куда.
2 ответа 2
Думаю, что такого инструмента в Linux нет.
Назначение групп описаны в документации к Linux или в описании к программам, которые создают свои группы при установке.
Список стандартных групп:
- daemon — от имени этой группы и пользователя daemon запускаютcя сервисы, которым необходима возможность записи файлов на диск.
- sys — группа открывает доступ к исходникам ядра и файлам include сохраненным в системе
- sync — позволяет выполнять команду /bin/sync
- games — разрешает играм записывать свои файлы настроек и историю в определенную папку
- man — позволяет добавлять страницы в директорию /var/cache/man
- lp — позволяет использовать устройства параллельных портов
- mail — позволяет записывать данные в почтовые ящики /var/mail/
- proxy — используется прокси серверами, нет доступа записи файлов на диск
- www-data — с этой группой запускается веб-сервер, она дает доступ на запись /var/www, где находятся файлы веб-документов
- list — позволяет просматривать сообщения в /var/mail
- nogroup — используется для процессов, которые не могут создавать файлов на жестком диске, а только читать, обычно применяется вместе с пользователем nobody.
- adm — позволяет читать логи из директории /var/log
- tty — все устройства /dev/vca разрешают доступ на чтение и запись пользователям из этой группы
- disk — открывает доступ к жестким дискам /dev/sd* /dev/hd*, можно сказать, что это аналог рут доступа.
- dialout — полный доступ к серийному порту
- cdrom — доступ к CD-ROM
- wheel — позволяет запускать утилиту sudo для повышения привилегий
- audio — управление аудиодрайвером
- src — полный доступ к исходникам в каталоге /usr/src/
- shadow — разрешает чтение файла /etc/shadow
- utmp — разрешает запись в файлы /var/log/utmp /var/log/wtmp
- video — позволяет работать с видеодрайвером
- plugdev — позволяет монтировать внешние устройства USB, CD и т д
- staff — разрешает запись в папку /usr/local