7

Когда я вошел в систему как пользователь "paul" на виртуальном терминале (например, /dev /tty2) и набрал "chvt 4", я переключился на виртуальный терминал для /dev /tty4 просто отлично.

Когда пользователь "paul" набирает "chvt 7", меня переключают на систему X Window. Просто хорошо.

ТЕМ НЕ МЕНИЕ... В xterm, если в качестве пользователя "paul" я набираю "chvt 2", я получаю следующую ошибку:«Не удалось получить дескриптор файла, ссылающийся на консоль»

Команда chvt работает только изнутри xterm, когда я запускаю ее как "root", и в этом случае она с радостью переключит меня на виртуальный терминал.

Это кажется очень сломленным для меня. Кто-нибудь знает, почему это так?

1 ответ1

11

С точки зрения безопасности, напомним, что X предназначен для использования как по сети, так и на физической консоли. Виртуальные терминалы - нет, поэтому логин на физическом терминале отличается от безопасности X.

Из этого отчета об ошибках Debian о той же ошибке в fgconsole . Вот почему chvt и друзья не могут получить к нему доступ из X:

Он влияет не только на fgconsole, но также на chvt , openvt и любую другую утилиту kbd, которая пытается получить дескриптор файла консоли. Эти программы делают свою работу, пытаясь открыть /ioctl эти файлы (в следующем порядке):

/proc/self/fd/0         (is a pseudo tty in your case)
/dev/tty                (also PTY)
/dev/tty0               (only accessible to root)
/dev/vc/0               (doesn’t exist nowadays)
/dev/console            (root)
std{in,out,err}         (PTY)

Так как ни один из них не может ответить на VT_GETSTATE ioctl, fgconsole и друзья терпят неудачу.

Предпочтительным решением проблемы является использование sudo . Существуют и другие варианты, но они менее предпочтительны в общем случае из-за проблем с безопасностью - вы можете решить, что ваша ситуация может терпеть один или другой (выделение мое):

Так что нет реального решения, если я не использую sudo?

Вы не можете изменить разрешения для /dev/tty0 или /dev/console не открывая гигантскую дыру в безопасности. Установка желаемых программ suid - вариант, но я бы держался от него подальше. sudo намного безопаснее и может контролироваться более подробно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .