LINUX.ORG.RU

socat без рута...


0

2

Есть такая штука:

sudo socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11
Это виртуальный последовательный порт для тестов, однако чтобы он работал - нужен root. И поэтому приходится париться с запуском связки тестируемых программ вне IDE (юзаю Qt Creator), и отладка разумеется не удобна.

Как избавиться от sudo для socat PTY? Куда ему там разрешения на юзеров и группу писать?

man /etc/sudoers

что-то в стиле

user localhost=NOPASSWD:/usr/bin/socat

silw ★★★★★ ()
Ответ на: комментарий от silw

Спасибо, сама команда запускается из под юзера. Однако вся проблема в том, что те операции, которые она выполняет - требуют повышенных прав, и все равно рут надо.

Хорошо, я буду запускать эту команду из под рута. Как бы другие программы (две тестовые) отучить от этого?

Как бы дать доступ обычным юзерским программам к портам, которые создал socat? В моем случае это ttyS10/11.

Кстати, после применения socat, ttyS10 и 11 пропадают из /dev/ttyS...

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

У меня права на socat - 755. Если у тебя такие же, повышение прав требуется не юзеру, а самой программе. Делается это так:

$ sudo chmod +s /usr/bin/socat

Сходным образом мой davfs2 упрямился, несмотря на user в fstab.

Bagrov ★★★★★ ()
Последнее исправление: Bagrov (всего исправлений: 1)
Ответ на: комментарий от Bagrov

Спасибо!!! 100% рабочее решение «sudo chmod +s /usr/bin/socat» - запускается и программы коннектятся без рута! Решена проблема :)

ЗЫ Это случаем не грозит дырами в безопасности?.. Хотя куда там, с одним только скайпом от некросовта дыра размером в очко бегемота.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Дыра или не дыра - от программы зависит. Выставлять SUID и GUID для Vim, bash, mc убийственно: любой пользователь понаделает делов. Опасность эмулятора порта таится разве что в говнокоде.

Bagrov ★★★★★ ()
Ответ на: комментарий от NeverLoved
$ man suid bit 
Нет справочной страницы для suid
Нет справочной страницы для bit
$ man 'suid bit'
Нет справочной страницы для suid bit
anonymous ()

/dev/ttyS10 - это симлинк на /dev/pts/<номер>. Делай link не в /dev, а туда куда может обычный юзер писать.

codeogre ()
Ответ на: комментарий от codeogre

Делай link не в /dev, а туда куда может обычный юзер писать.

т.е. делать симлинк на файл, например, в домашней папке? чтобы нечто /home/user/port1 было симлинком на /dev/pts/<#>? так? желательно конкретнее

стоп, понял: sudo socat PTY,link=/home/user/port1 PTY,link=/home/user/port2 - так?

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от codeogre

/dev/ttyS10 - это симлинк на /dev/pts/

Чё? https://www.kernel.org/doc/Documentation/devices.txt

4 char	TTY devices
...
		 64 = /dev/ttyS0	First UART serial port
		    ...
		255 = /dev/ttyS191	192nd UART serial port

136-143 char	Unix98 PTY slaves
		  0 = /dev/pts/0	First Unix98 pseudo-TTY
		  1 = /dev/pts/1	Second Unix98 pseudo-TTY

anonymous ()
Ответ на: комментарий от I-Love-Microsoft

стоп, понял: sudo socat PTY,link=/home/user/port1 PTY,link=/home/user/port2 - так?

да, так, только можно без sudo.

codeogre ()
Ответ на: комментарий от anonymous

Чё?

дорогой друк анонимус, прежде чем блистать своими глубокими знаниями и ссылками обратись пожалуйста к man socat, о котором и идет речь в данном топике.

PTY option group

These options are intended for use with the pty address type.

link=<filename> Generates a symbolic link that points to the actual pseudo terminal (pty). This might help to solve the problem that ptys are generated with more or less unpredictable names, making it difficult to directly access the socat generated pty automatically. With this option, the user can specify a «fix» point in the file hierarchy that helps him to access the actual pty (example). Beginning with socat version 1.4.3, the symbolic link is removed when the address is closed (but see option unlink-close).

codeogre ()

Неужели в твоем дистрибутиве нет правил udev для последовательных портов? Напиши правило, чтобы получить что-то вроде такого:

$ ls -la /dev | grep ttyS
136:crw-rw----   1 root uucp        4,  64 Aug 12 21:01 ttyS0
137:crw-rw----   1 root uucp        4,  65 Aug 12 21:01 ttyS1
138:crw-rw----   1 root uucp        4,  66 Aug 12 21:01 ttyS2
139:crw-rw----   1 root uucp        4,  67 Aug 12 21:01 ttyS3
При таком варианте, добавляешь пользователя в группу uucp и root становится не нужен.

m0rph ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.