it-swarm-ru.tech

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

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

48
Phil

Я нашел то, что отлично работает для меня на KDE

kdesu -u username /path/to/program
2
Phil

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

xauth list|grep `uname -n`

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

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

DISPLAY=:0; export DISPLAY

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

xauth add $DISPLAY . hexkey

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

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

xauth remove $DISPLAY
33
Randall

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

12
kfl62

Во-первых: не используйте 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 файл это более избирательно; в противном случае это вопрос вкуса.
9
sleske

Предположим, Debian или Ubuntu (должно быть похоже на Red Hat/SUSE).

Sudo apt-get install sux
sux user -c 'command'
9
ehempel

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

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

Как корень:

xhost local:yourusername

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

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

4
ACV

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

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

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

2
alex

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

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

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

Тогда вы можете переключаться с su без -:

su user2

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

0
pojem