分类:
2008-07-16 17:06:21
如果运行 GUI 程序时需要 root 权限,请用下面的步骤在用户的 X 服务器上显示程序输出。千万不要直接使用 root 帐号启动 X 服务器以避免承担不必要的安全风险。
以普通用户身份启动 X 服务器,开一个 xterm
控制台窗口,执行:
$ XAUTHORITY=$HOME/.Xauthority
$ export XAUTHORITY
$ su root
Password:*****
# printtool &
非 root 用户以 su
方式运用该技巧时,要确保该非 root
用户所在用户组对 ~/.Xauthority
文件有读权限。
想要系统自动执行该命令序列,请在用户帐号下创建 ~/.xsession
文件,编辑文件如下:
# This makes X work when I su to the root account.
if [ -z "$XAUTHORITY" ]; then
XAUTHORITY=$HOME/.Xauthority
export XAUTHORITY
fi
unset XSTARTUP
# If a particular window/session manager is desired, uncomment following
# and edit it to fit your needs.
#XSTARTUP=/usr/bin/blackbox
# This starts x-window/session-manager program
if [ -z "$XSTARTUP" ]; then
if [ -x /usr/bin/x-session-manager ]; then
XSTARTUP=x-session-manager
elif [ -x /usr/bin/x-window-manager ]; then
XSTARTUP=x-window-manager
elif [ -x /usr/bin/x-terminal-emulator ]; then
XSTARTUP=x-terminal-emulator
fi
fi
# execute auto selected X window/session manager
exec $XSTARTUP
接着在用户的 xterm
窗口中运行 su
(不是su
-)。现在从该 xterm
启动的 GUI 程序就可以在该用户的 X
window 环境中显示以 root 权限运行的程序输出。只要执行了默认的
/etc/X11/Xsession
,就可以使用该方法。如果用户使用
~/.xinitrc
或 ~/.xsession
来配置自定义环境,需要将上面提到的环境变量 XAUTHORITY
加到这些脚本中去。
还有一种方法,sudo
可用于自动执行上面的命令序列:
$ sudo xterm
... 或
$ sudo -H -s
这时 /root/.bashrc
中应包含:
if [ $SUDO_USER ]; then
sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge -
fi
即使对那些 home 目录位于 NFS 上的用户,它也能正常工作。因为 root 不用读
.Xauthority
文件。
还有一些用于该目的的专用软件包:kdesu
、gksu
、gksudo
、gnome-sudo
和 xsu
。其它方法也可以达到同样的目的:如在
/root/.Xauthority
和相应用户文件之间创建一个符号链接;使用
脚本;或对 root 初始化脚本执行“xauth merge
~USER_RUNNING_X/.Xauthority”。