Моя обычная учетная запись пользователя, скажем, user1. Я создал отдельное user2 для некоторого x-приложения, которое я хотел бы запустить при входе в x как user1, но таким образом, чтобы он не имел доступа для чтения/записи к данным user1. Я думал, что я мог бы использовать xauth и Sudo/su для user2 от user1 для запуска этого приложения. Как мне это сделать? Я не уверен, как настроить xauth.
Я нашел то, что отлично работает для меня на KDE
kdesu -u username /path/to/program
Чтобы использовать xauth выборочно, при запуске user1:
xauth list|grep `uname -n`
Это напечатает записи авторизации hexkey для вас. Вы могли иметь различные дисплеи, связанные с этими хостами.
В качестве user2 установите ваш дисплей (при условии регистр по умолчанию):
DISPLAY=:0; export DISPLAY
Затем запустите:
xauth add $DISPLAY . hexkey
Обратите внимание на точку после $ DISPLAY и перед гекски.
Когда доступ больше не нужен, от имени пользователя user2 вы можете запустить:
xauth remove $DISPLAY
Я положил в моем .zshrc
строка с export XAUTHORITY=~/.Xauthority
и теперь я могу выполнить Sudo -E xcommand
. После долгих поисков, для меня это был самый простой способ.
Во-первых: не используйте xhost +
, это довольно небезопасно (полное разрешение разрешить/запретить).
Скорее используйте механизм X-Cookie:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
В качестве альтернативы, если у вас установлено sux
, используйте это (см. Ответ ehempel).
В обоих случаях user2 будет использовать секретный файл cookie в .Xauthority для авторизации на X-сервере, и никто другой не будет иметь к нему доступа.
Ноты:
.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
Как корень:
xhost local:yourusername
Где yourusername это ваше имя пользователя :)
Затем выполните su, поскольку ваш пользователь xclock
должен работать, если он установлен
Это просто хаки:
слёске выше, я думаю, есть правильное решение.
Этот способ сделан в suse/opensuse: http://www.novell.com/support/kb/doc.php?id=700374
Просто измените /etc/pam.d/su, добавив параметр (жирный):
необязательный сеанс pam_xauth.so systemuser = 1
Тогда вы можете переключаться с su без -:
su user2
и запустить приложение графически.