Domanda

Sto cercando di scrivere un'applicazione che viene eseguito come un demone e monitor in esecuzione sessioni X. In questo momento sto lottando per trovare la documentazione per quanto riguarda il modello di sicurezza X. In particolare, sto cercando di connettersi a correre X display dal mio processo demone. chiamata XOpenDisplay(dispName) non funziona, credo perché il mio processo non ha il permesso di collegarsi a questo display. Dopo un po 'di la ricerca, sembra che ho bisogno di fare qualcosa con xauth.

Nel mio ambiente di test, il server X si avvia in questo modo:

/usr/bin/X -br -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-QBEVDj

Questo file contiene una sola voce, che assomiglia a questo:

#ffff##:  MIT-MAGIC-COOKIE-1  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

con l'aggiunta di una voce al ~/.Xauthority con la stessa chiave esagonale, posso connettersi al server X. Tuttavia, questo è difficile, perché ho bisogno di programmazione trovare il file di autenticazione del server X sta usando (il posizione che credo cambierà da distro a distro, e probabilmente da un avvio al successivo), quindi eseguire una query, quindi scrivere un nuovo file di autenticazione. Se il processo è in esecuzione come demone, potrebbe non avere un home directory, così come faccio a sapere dove scrivere le nuove voci?

Idealmente, quello che sto cercando è un modo per bypassare la necessità di avere la cookie di xauth in ~/.Xauthority, o anche di sapere che cosa il cookie è a tutti. Mi rendo conto che questo è improbabile - a che serve un modello di sicurezza se è facilmente bypassato? ma sto sperando che qualcuno in questa lista può avere un paio di buone idee. C'è un modo per specificare che il mio processo è privilegiato e quindi deve essere automaticamente accesso ad ogni visualizzare sulla macchina locale?

È stato utile?

Soluzione

Non è necessario usare una home directory se si specifica una variabile d'ambiente XAUTHORITY, che specifica la posizione del file .Xauthority. Leggi la pagina xauth dell'uomo.

Ma, in generale, è difficile individuare il file di autenticazione, per i motivi che hai citato; Inoltre, questo approccio "pesca per i token auth" avrebbe funzionato solo per i display locali.

Per quanto riguarda la locazione di root (o qualche altro utente) connettersi a un server X, volenti o nolenti, si sarebbe probabilmente necessario patchare il codice sorgente per fare questo, e dovreste usare qualcosa come getpeereid per ottenere la il collegamento di uid / gid dell'utente (questo funziona solo su socket del dominio UNIX, che presumo sarebbe il tipo utilizzato per le connessioni locali, in ogni caso).

Altri suggerimenti

Xauth non è l'unico meccanismo di sicurezza per X

C'è anche un altro (meno sicuro) che proprio esegue l'autenticazione basata su IP (Vedere xhost ).

Quindi, se si passa il server X per questa modalità meno sicuro sarà fidarsi di qualsiasi connessione a venire dal set definito di indirizzi IP.

In questo modo non c'è bisogno di trattare con Xauthority a tutti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top