В Xterm открыт /dev/ptmx
, но вы не можете видеть его в таком виде. Вот почему.
Ваши разрешения на исполняемый файл xterm
имеют установленный бит S_ISGID
(set-group-ID) и принадлежат группе utmp
.
Он настроен таким образом, что xterm
может добавить запись в /var/run/utmp
и /var/log/wtmp
(точные пути зависит от вашей системы), поэтому ваш сеанс отображается в выводе кто
или последний
.
С этими разрешениями, когда xterm
выполняется, выполняющий его процесс увидит, что его эффективный идентификатор группы изменится на идентификатор группы utmp
(в то время как Идентификатор группы read останется прежним), что даст ему разрешение на открытие записей входа utmp
/wtmp
в режиме записи.
В Linux в качестве меры безопасности только root
может отображать открытые файлы процессов, у которых эффективный идентификатор пользователя отличается от реального идентификатора пользователя или эффективный идентификатор группы отличается от реального идентификатора группы. (вы заметите, что для таких процессов /proc/
имеет права dr-x------ root root
по сравнению с dr- x------ вы your-group
для других процессов).
Вот почему lsof
при работе от имени обычного пользователя не может вывести список открытых файлов этого процесса xterm
. Вам нужно будет запустить lsof
как root
.
Что касается того, почему это работает для гном-терминалов
, есть несколько вариантов:
гном-терминал
не добавляет записи в записи входа в систему (в моей системе так и есть) gnome-terminal
использует utempter
помощник (в данном случае это sgid utmp
) для добавления записей входа. Это то, что xterm
и konsole
делают в моей системе. gnome-terminal
сбрасывает эффективный идентификатор пользователя на реальный идентификатор пользователя (временно отказывается от специального доступа utmp
) после обновления записей входа (что xterm
не не делать).