
Я использую дистрибутив PureOS GNU/Linux (на основе Debian/Ubuntu). Я установил XDM в качестве менеджера дисплеев. После того, как я вошел в сеанс X как root, у меня возникла ошибка. Я больше не могу запускать команды GUI как root в сеансе X без прав root. Я получил сообщения об ошибках, в которых говорилось, что мой MIT-MAGIC-COOKIE-1 неверен. Похоже, это связано с файлом .Xauthority или переменной $XAUTHORITY.
Я видел на нескольких форумах в Интернете несколько паллиативов для этой проблемы. Запустить xhost
как не-root с аргументами в различных формах; но это отключает аутентификацию системы, открывая уязвимости безопасности; кроме того, это нужно делать в каждом сеансе X. Запустить sudo -sE
; но это сохраняет не-root среды. Запустить su-to-root -X -c [command] %U
; это сработало. Запустить ssh -YXC [user]@[machine-name] [command]
; это сработало. Но это обходные пути, которые не решают исходную проблему.
DISPLAY=:0 /usr/bin/xhost +local:
не сработало. Ни то , ни другое su - root -c [command]
. Ни то, ни другое touch ~/.Xauthority; xauth generate $DISPLAY . trusted; xauth add ${HOST}$DISPLAY . $(xxd -l 16 -p /dev/urandom); xauth merge .Xauthority
; мне выдало ошибку unable to rename authority file /var/lib/xdm/authdir/authfiles/, use /var/lib/xdm/authdir/authfiles/-n
.
После некоторых исследований (в которых мне помог пакет x11vnc), я только что обнаружил, что файл, содержащий правильный волшебный cookie, — это /var/lib/xdm/authdir/authfiles/A\:0-[whatever]
. Как ни странно, копирование его в новый файл .Xauthority просто не сработало в первый раз, но сработало во второй. Поэтому я создал , export XAUTHORITY="/var/lib/xdm/authdir/authfiles/A:0-[whatever]"
и это, казалось, решило проблему. Однако, когда я создал export XAUTHORITY="/var/lib/xdm/authdir/authfiles/*"
, он не сработал; но самое странное, что echo $XAUTHORITY
показывает полный путь к файлу.
Кроме того, я удалил и файл .Xauthority, и переменную $XAUTHORITY из моего не-root пользователя и перезагрузил свое устройство, чтобы посмотреть, будут ли какие-либо побочные эффекты в этой учетной записи. Как ни странно, до перезагрузки не-root пользователь может запускать команды GUI даже без них. После перезагрузки переменная $XAUTHORITY из моего не-root пользователя указывала на /tmp/.Xauth[whatever]
.
Кроме того, я заметил, что при каждой перезагрузке компьютера пользователь, не являющийся пользователем root, получает новый волшебный файл cookie, который соответствует файлу A:0-[whatever] (шестнадцатеричный дамп показал, что они содержат совпадающие шестнадцатеричные строки).
Это поднимает ряд вопросов: почему пользователь root перестал получать от системы случайные волшебные куки? Какой процесс генерирует и доставляет эти волшебные куки? Есть ли команда для root, чтобы сгенерировать правильные куки?