Можно ли украсть полный контроль над PTY (без CAP_SYS_ADMIN)? - PullRequest
0 голосов
/ 04 апреля 2020

Мне было интересно, как GDB реализует свою команду tty /dev/pts/foobar и как она может работать для получения стандартного ввода цели.

Кажется (вокруг строки 799, функция new_tty (void), что они просто откройте tty, а затем попробуйте вызвать ioctl( fd, TIOCSCTTY, 0 ), что на самом деле не удается (таким образом, общеизвестное «предупреждение: GDB: не удалось установить управляющий терминал:»).

В соответствии с man-страницами:

          If  this terminal is already the controlling terminal
          of a different session group, then  the  ioctl  fails
          with  EPERM,  unless the caller has the CAP_SYS_ADMIN
          capability and arg equals 1, in which case the termi‐
          nal  is stolen, and all processes that had it as con‐
          trolling terminal lose it.

В результате несколько ресурсов начинают гоняться за ресурсом (процесс, который изначально контролирует терминал, например, /bin/sh и gdb, здесь), что затрудняет настоящую работу с I / Os. ​​Не удивительно.

Итак, есть ли способ обойти эту битву за ресурсы? Кроме кода помощника Яна Кратохвила (я еще не пробовал, но могу не вижу причин, по которым это не сработает)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...