我的常规用户帐户是 user1。我为某个 x 应用程序创建了单独的 user2,我希望在以 user1 身份登录 x 时运行该应用程序,但要阻止它对 user1 数据进行读/写访问。我认为我可以使用 xauth 并从 user1 向 user2 执行 sudo/su 来运行此应用程序。我该怎么做?我不确定如何配置 xauth。
答案1
使用 xauth选择性地,以用户1身份运行:
xauth list|grep `uname -n`
这将为您打印十六进制密钥授权条目。您可以与这些主机相关联的显示也不同。
按照用户 2 的设置显示(假设默认情况):
DISPLAY=:0; export DISPLAY
然后运行:
xauth add $DISPLAY . hexkey
注意 $DISPLAY 之后和十六进制键之前的点。
当不再需要访问时,作为用户 2,您可以运行:
xauth remove $DISPLAY
答案2
我输入了.zshrc
一行export XAUTHORITY=~/.Xauthority
,现在我就可以执行了sudo -E xcommand
。经过大量的谷歌搜索,对我来说这是最简单的方法。
答案3
首先:不要使用xhost +
,它相当不安全(全面允许/拒绝)。
而是使用X-Cookie机制:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
或者,如果您已经sux
安装,请使用它(参见 ehempel 的回答)。
在这两种情况下,user2 都将使用 .Xauthority 中的秘密 cookie 来授权 X 服务器,其他任何人都无法访问它。
笔记:
- 根据您的文件权限,您可能必须以其他方式复制 .Xauthority。
- 除了复制
.Xauthority
,您还可以使用xauth
来提取和复制授权密钥(参见 Randall 的回答)。如果文件中有多个密钥,.Xauthority
则更具选择性;否则,这取决于个人喜好。
答案4
以 root 身份:
xhost local:yourusername
yourusername 是您的用户名:)
然后以你的用户身份执行 su
xclock
即可(如果已安装)