我的常规用户帐户,比方说,user1。 我为一些x应用程序创build了单独的user2,我想以user1的身份login到x时运行它,但会阻止它对user1数据进行读/写访问。 我以为我可以使用xauth和sudo / su从user1 user2运行此应用程序。 我如何做到这一点? 我不知道如何configurationxauth。
要有select地使用xauth ,请在user1运行:
xauth list|grep `uname -n`
这会为您打印hex授权条目。 你可以有不同的显示与这些主机相关联。
当user2设置您的显示器(假设默认情况下):
DISPLAY=:0; export DISPLAY
然后运行:
xauth add $DISPLAY . hexkey
注意$ DISPLAY之后和hexkey之前的点。
当不再需要访问时,用户2可以运行:
xauth remove $DISPLAY
假设Debian或Ubuntu(在Red Hat / SUSE上应该是类似的)。
sudo apt-get install sux sux user -c 'command'
我把我的.zshrc一行export XAUTHORITY=~/.Xauthority ,现在我可以执行sudo -E xcommand 。 经过大量的谷歌search,对我来说,这是最简单的方法。
第一:不要使用xhost + ,这是相当不安全的(全部允许/拒绝)。
而是使用X-Cookie机制:
su user2 cp /home/user1/.Xauthority /home/user2/.Xauthority export DISPLAY=:0
或者,如果你安装了sux ,使用它(参见ehempel的答案)。
在这两种情况下,user2都将使用.Xauthority中的秘密cookie来授权给X服务器,而其他任何人都不能访问它。
笔记:
xauth来提取和复制授权密钥(请参阅Randall的答案),而不是复制.Xauthority 。 如果您在.Xauthority文件中有多个键,则更具select性; 否则这是一个味道的问题。 这将解决所有用户的问题:
cat <<EOF > /etc/profile.d/xauth.sh #!/sbin/bash export XAUTHORITY=~/.Xauthority EOF
我在KDE上发现了一些非常适合我的东西
kdesu -u username /path/to/program
作为根:
xhost local:yourusername
你的用户名是你的用户名:)
然后,如果你的用户的xclock应该工作,如果它已经安装了,那么就这样做
这些只是黑客:
上面的sleske,我认为是适当的解决办法。
这种方式在suse / opensuse: http ://www.novell.com/support/kb/doc.php? id = 7003743
只需修改/etc/pam.d/su,添加选项(粗体):
会话可选pam_xauth.so systemuser = 1
那么你可以用su切换没有 – :
su user2
并以graphics方式运行应用程序。
对于GNOME(真的没有任何桌面环境,我只用icewm) gksu :
gksu -u username program