Назад | Перейти на главную страницу

как использовать xauth для запуска графического приложения через другого пользователя в linux

Моя обычная учетная запись пользователя, скажем, user1. Я создал отдельный user2 для некоторого приложения x, которое я хотел бы запустить при входе в x как user1, но таким образом, чтобы он не имел доступа для чтения / записи к данным user1. Я думал, что могу использовать xauth и sudo / su для user2 от user1 для запуска этого приложения. Как мне это сделать? Не знаю, как настроить xauth.

Чтобы использовать xauth выборочно, как user1 запустить:

xauth list|grep `uname -n`

Это напечатает для вас записи авторизации шестнадцатеричного ключа. Вы мог также имеют разные дисплеи, связанные с этими хостами.

Как user2 установите ваш дисплей (при условии по умолчанию):

DISPLAY=:0; export DISPLAY

Затем запустите:

xauth add $DISPLAY . hexkey

Обратите внимание на точку после $ DISPLAY и перед шестигранной клавишей.

Когда доступ больше не нужен, от имени пользователя user2 вы можете запустить:

xauth remove $DISPLAY

Я положил в свой .zshrc линия с export XAUTHORITY=~/.Xauthority и теперь я могу выполнить sudo -E xcommand. После долгих поисков в Google это был самый простой способ.

Первое: не используйте xhost +, это довольно небезопасно (разрешить / запретить одеяло).

Скорее используйте механизм X-Cookie:

su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority 
export DISPLAY=:0

В качестве альтернативы, если у вас есть sux установлен, используйте это (см. ответ ehempel).

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

Ноты:

  • В зависимости от ваших прав доступа к файлу вам, возможно, придется скопировать .Xauthority другим способом.
  • Вместо копирования .Xauthority, вы также можете использовать xauth для извлечения и копирования ключа авторизации (см. ответ Рэндалла). Если у вас несколько ключей в .Xauthority файл более избирательный; в остальном это дело вкуса.

Предполагается, что debian или ubuntu (должны быть похожи на Red Hat / SUSE).

sudo apt-get install sux
sux user -c 'command'

Это решит проблему для всех пользователей:

cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF

Как root:

xhost local:yourusername

Где yourusername - ваше имя пользователя :)

Затем выполните su от имени пользователя xclock должен работать, если он установлен

Это просто хаки:

  • xauth + (небезопасный)
  • ssh -X user2 @ localhost (некрасиво)

sleske выше имеет, я думаю, правильное решение.

Я нашел кое-что, что мне нравится в KDE

kdesu -u username /path/to/program

Это сделано в suse / opensuse: http://www.novell.com/support/kb/doc.php?id=7003743

Просто измените /etc/pam.d/su, добавив параметр (жирный):

сеанс необязательный pam_xauth.so systemuser = 1

Затем вы можете переключиться с помощью su без -:

su user2 ru

и запустите приложение графически.

Для GNOME (и на самом деле без какой-либо среды рабочего стола, я использую его только с icewm) gksu:

gksu -u username program