9.4.12 Diventare root in X
Se un programma con interfaccia grafica richiede l'esecuzione da root, usate le
seguenti procedure per visualizzare l'output del programma sull'X server
dell'utente. Non tentate mai di lanciare un X server direttamente dal
root account per evitare possibili rischi dal punto di vista della
sicurezza.
Lanciate l' X server come un utente normale, ed aprite una console
xterm
. Poi:
$ XAUTHORITY=$HOME/.Xauthority
$ export XAUTHORITY
$ su root
Password:*****
# printtool &
Quando usate questo trucco con su
verso un utente non root,
assicuratevi che ~/.Xauthority
sia leggibile dal gruppo di detto
utente non root.
Per automatizzare questa sequenza di comandi, create un file
~/.xsession
dall'accout utente che contenga le seguenti righe:
# Questo fa funzionare X quando lancio su verso l'account root.
if [ -z "$XAUTHORITY" ]; then
XAUTHORITY=$HOME/.Xauthority
export XAUTHORITY
fi
unset XSTARTUP
# Se si desidera un window/session manager particolare, decommentate la riga seguente
# e modificatela a vostro piacimento.
#XSTARTUP=/usr/bin/blackbox
# Questo lancia il programma x-window/session-manager
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
# lancia automaticamente l'X window/session manager selezionato
exec $XSTARTUP
Poi lanciate su
(non su -) in una finestra
xterm
dell'utente. I programmi con interfaccia grafica lanciati
da questo xterm
possono visualizzare l'output sull'X window
dell'utente mentre girano con i privilegi di root. Il trucco funziona finch�
si usa il file /etc/X11/Xsession
di default. Se un utente fa le
proprie modifiche tramite ~/.xinit
o ~/.xsession
, la
variabile d'ambiente sopra descritta XAUTHORITY dovr� essere
impostata allo stesso modo in questi script.
In alternativa, si pu� usare, sudo
per automatizzare la sequenza
di comandi:
$ sudo xterm
... oppure
$ sudo -H -s
In questo caso /root/.bashrc
dovr� contenere:
if [ $SUDO_USER ]; then
sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge -
fi
Questo funziona bene anche se la directory home dell'utente � montata su NFS
mount, poich� root non legge il file .Xauthority
.
Esistono anche parecchi altri pacchetti specializzati all'uopo:
kdesu
, gksu
, gksudo
,
gnome-sudo
, e xsu
. Altri metodi possono essere usati
per raggiungere lo stesso risultato: creare un collegamento simbolico tra
/root/.Xauthority
ed il corrispettivo dell'utente; usare lo script
sux
; or
mettere "xauth merge
~USER_RUNNING_X/.Xauthority" nello script di
inizializzazione di root.
Vedere anche sulla lista
di messaggi debian-devel
.