我的常规用户帐户是,比方说,user1。我为某些 x 应用程序创建了单独的 user2,我希望在以 user1 身份登录 x 时运行该应用程序,但以防止它对 user1 数据进行读/写访问的方式。我想我可以使用 xauth 和 sudo/su 从 user1 到 user2 来运行这个应用程序。我该怎么做呢?我不确定如何配置 xauth。
小智 40
要选择性地使用 xauth ,请作为 user1 运行:
xauth list|grep `uname -n`
Run Code Online (Sandbox Code Playgroud)
这将为您打印十六进制授权条目。您也可以拥有与这些主机相关联的不同显示。
作为 user2 设置您的显示(假设默认情况):
DISPLAY=:0; export DISPLAY
Run Code Online (Sandbox Code Playgroud)
然后运行:
xauth add $DISPLAY . hexkey
Run Code Online (Sandbox Code Playgroud)
请注意 $DISPLAY 之后和十六进制键之前的点。
当不再需要访问时,您可以作为 user2 运行:
xauth remove $DISPLAY
Run Code Online (Sandbox Code Playgroud)
sle*_*ske 11
第一:不要使用xhost +,它相当不安全(一揽子允许/拒绝)。
而是使用 X-Cookie 机制:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
Run Code Online (Sandbox Code Playgroud)
或者,如果您已sux安装,请使用它(请参阅 ehempel 的答案)。
在这两种情况下,user2 将使用 .Xauthority 中的秘密 cookie 向 X 服务器授权,其他人将无法访问它。
笔记:
.Xauthority,您还可以使用xauth提取和复制授权密钥(请参阅 Randall 的回答)。如果.Xauthority文件中有多个键,则更具选择性;否则这是一个品味问题。小智 8
假设是 debian 或 ubuntu(在 Red Hat / SUSE 上应该类似)。
sudo apt-get install sux
sux user -c 'command'
Run Code Online (Sandbox Code Playgroud)
作为根用户:
xhost local:yourusername
Run Code Online (Sandbox Code Playgroud)
其中 yourusername 是您的用户名:)
然后执行 su ,因为
xclock如果安装了它,您的用户应该可以工作
小智 7
这将为所有用户解决问题:
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF
Run Code Online (Sandbox Code Playgroud)
我在 KDE 上发现了一些对我来说非常有用的东西
kdesu -u username /path/to/program
Run Code Online (Sandbox Code Playgroud)