# Il Manuale di &kdesu;

&Geert.Jansen; &Geert.Jansen.mail;
Samuele
Kaplun

    samuele.kaplun@collegiodimilano.it

2000
&Geert.Jansen;
&FDLNotice;
2005-06-07
1.00.00

&kdesu; è un'interfaccia grafica per il comando `su` di &UNIX;.

KDE
su
password
root

## Introduzione

Benvenuti in &kdesu;! &kdesu; è un'interfaccia grafica per il comando `su` di &UNIX; per l'Ambiente Desktop KDE. Ti permette di lanciare un programma come se tu fossi un altro utente fornendo la password per quell'utente. &kdesu; è un programma senza privilegi; utilizza il comando di sistema `su`.

&kdesu; ha una funzionalità aggiuntiva: può ricordare le password per te. Se stai usando questa funzionalità, devi solo inserire la password una volta per ogni comando. Guarda per maggiori informazioni al riguardo ed un'analisi sulla sicurezza.

Questo programma è pensato per essere lanciato dalla linea di comando o dai file `.desktop`. Anche se chiede la password di root utilizzando una finestra di dialogo &GUI;, lo considero più come un collante linea di comando <> &GUI; che come un puro programma &GUI;.

## Usare &kdesu;

L'utilizzo di &kdesu; è semplice. La sintassi è la seguente:

    kdesu -c -d -f  file -i  nome icona -n -p  priorità -r -s -t -u  utente --nonewdcop comando arg1 arg2

    kdesu opzioni generiche di &kde; opzioni generiche di Qt

Le opzioni della linea di comando sono spiegate sotto.

`-c programma`

  Specifica il programma da lanciare come root. Deve essere passato come unico argomento. Così se, per esempio, vuoi lanciare un nuovo file manager, dovresti inserire alla riga di comando: ``kdesu `-c kfm -sw```

`-d`

  Visualizza le informazioni di debug.

`-f file`

  Questa opzione permette un uso efficiente di &kdesu; nei file `.desktop`. Dice a &kdesu; di esaminare il file specificato da `file`. Se questo file è scrivibile dall'utente corrente, &kdesu; esegue il comando con l'utente corrente. Se non è scrivibile, il comando viene eseguito con l'utente `utente` (valore predefinito impostato a root).

  `file` è valutato in questo modo: se `file` comincia con una `/`, viene interpretato come un nome di file assoluto. Altrimenti, viene preso come nome di un file di configurazione globale di &kde;. Per esempio: per configurare il K display manager, kdm, puoi invocare `kdesu `-c kdmconfig -f kdmrc``

`-i` nome icona

  Specifica l'icona da utilizzare nella finestra di dialogo della password. Puoi specificarne semplicemente il nome, senza alcuna estensione.

  Ad esempio per lanciare `kfmclient` e mostrare l'icona di &konqueror; nella finestra di dialogo della password:

      kdesu  -i konqueror kfmclient

`-n`

  Non memorizzare la password. Disabilita la casella ricorda password nella finestra di dialogo della password.

`-p` priorità

  Imposta il valore della priorità. La priorità è un numero arbitrario compreso tra 0 e 100, dove 100 significa la priorità massima e 0 la minima. L'impostazione predefinita è 50.

`-r`

  Utilizza lo scheduling realtime.

`-s`

  Ferma il demone di kdesu. Guarda .

`-t`

  Abilita l'output del terminale. Ciò disabilita la memorizzazione della password. È principalmente per scopi di debug; se vuoi lanciare un'applicazione della modalità console, usa piuttosto lo standard `su`.

`-u` utente

  Anche se l'utilizzo principale di &kdesu; è quello di eseguire un comando come superutente, puoi fornire qualsiasi nome utente e la password appropriata.

## Funzionamento interno

### Autenticazione di X

Il programma che eseguirai girerà sotto l'id dell'utente root e non avrà generalmente l'autorità di accedere al tuo schermo di X. &kdesu; vi gira intorno aggiungendo un cookie di Autenticazione per il tuo schermo al file temporaneo `.Xauthority`. Dopo che il comando termina, questo file viene rimosso.

Se non utilizzi i cookie di X, è lasciato a te il lavoro. &kdesu; riconoscerà questa situazione e non aggiungerà un cookie ma dovrai assicurarti che l'utente root abbia il permesso di accedere al tuo schermo.

### Interfaccia a `su`

&kdesu; utilizza il comando di sistema `su` per acquisire privilegi. In questa sezione, spiegherò i dettagli di come &kdesu; fa ciò.

Dato che alcune implementazioni di `su` (ad esempio quella di &RedHat;) non vogliono leggere la password da `stdin`, &kdesu; crea una coppia pty/tty ed esegue `su` con i suoi descrittori di file standard connessi alla tty.

Per eseguire il comando che l'utente seleziona, piuttosto che in una shell interattiva, &kdesu; utilizza l'argomento `-c` con `su`. Questo argomento è compreso da ogni shell che conosco quindi dovrebbe funzionare in maniera portabile. `su` passa l'argomento `-c` alla shell dell'utente target, e la shell esegue il programma. Esempio di comando: `su `root -c il_programma``.

Invece di eseguire il comando dell'utente direttamente con `su`, &kdesu; esegue un piccolo programma di comodo chiamato kdesu_stub. Questo programma di comodo (che gira come utente target), richiede alcune informazioni da &kdesu; attraverso il canale pty/tty (lo stdin e stdout del programma di comodo) e poi esegue il programma dell'utente. Le informazioni che vengono passate sono: il display X, un cookie di Autenticazione di X (se disponibile), il `PATH` ed il comando da lanciare. La ragione per cui è usato un programma di comodo è che il cookie di X è un'informazione privata e non può quindi essere passata sulla linea di comando.

### Verifica della Password

&kdesu; verificherà la password che immetti e restituirà un messaggio di errore se non è corretta. La verifica viene effettuata eseguendo un programma di test: `/bin/true`. Se ciò ha successo, la password è considerata corretta.

### Memorizzare la Password

Per comodità, &kdesu; implementa una funzionalità di ricorda password. Se ti interessa la sicurezza, dovresti leggere questo paragrafo.

Permettere a &kdesu; di ricordare le password apre un (piccolo) buco di sicurezza nel tuo sistema. Ovviamente, &kdesu; non permette a chiunque ma solo al tuo id utente di usare le password, ma, se fatto senza cautela, ciò abbasserebbe il livello di sicurezza di root a quello dell'utente normale (tu). Un hacker che irrompe nel tuo account, otterrebbe l'accesso di root. &kdesu; cerca di prevenire ciò. Lo schema di sicurezza che utilizza, almeno secondo me, è ragionevolmente sicuro ed è qui spiegato.

&kdesu; utilizza un demone, chiamato kdesud. Il demone sta in ascolto di comandi ad un socket &UNIX; in `/tmp`. I permessi del socket sono 0600 così che solo il tuo id utente può connettervisi. Se è attivata la memorizzazione delle password, &kdesu; esegue il comando attraverso questo demone. Scrive il comando e la password di root a questo socket e il demone esegue il comando utilizzando `su`, come descritto sopra. Fatto questo, il comando e la password non sono gettati via. Sono, invece, memorizzati per una quantità di tempo specificata. Questo è il valore di timeout del modulo di controllo. Se un'altra richiesta per lo stesso comando arriva entro questo periodo di tempo, il client non deve fornire nuovamente la password. Per evitare che gli hacker che irrompono nel tuo account rubino le password dal demone (per esempio, connettendo un debugger), il demone è installato con l'id di gruppo nogroup. Questo previene tutti i normali utenti (inclusi tu) dall'ottenere password dal processo kdesud. Inoltre il demone imposta la variabile di ambiente `DISPLAY` al valore che aveva quando è stato lanciato. L'unica cosa che un hacker può fare è eseguire un applicazione sul tuo display.

Un punto debole in questo schema è che i programmi che esegui, probabilmente, potrebbero non essere stati scritti con la sicurezza in mente (come i programmi setuid root). Questo significa che potrebbero avere dei buffer overrun o altri problemi ed un hacker potrebbe sfruttarli.

L'utilizzo della memorizzazione delle password è un compromesso tra la sicurezza e la comodità. Ti incoraggio a pensarci e a decidere tu stesso se vuoi usarlo o no.

## Autore

&kdesu;

Copyright 2000 &Geert.Jansen;

&kdesu; è scritto da &Geert.Jansen;. È in qualche modo basato su &kdesu; di Pietro Iglio, versione 0.3. Io e Pietro siamo d'accordo che io manterrò il programma nel futuro.

L'autore può essere raggiunto via email a&Geert.Jansen.mail;. Per favore, riferiscimi ogni bug che trovi così che li possa riparare. Se hai dei suggerimenti, sentiti libero di contattarmi.

&underFDL; &underArtisticLicense;