Моя обычная учетная запись пользователя, скажем, 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
, вы также можете использовать 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
должен работать, если он установлен
Это просто хаки:
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