Esegui applicazioni GUI dal terminale con privilegio di root


4

Quindi è stato ben documentato che le applicazioni GUI (come gedit o textedit) NON dovrebbero essere eseguite con sudo. Ubuntu et al. Ottengono gksu e gksudo (e simili) quindi domanda: cosa ottengono noi (utenti Mac)? Dato che il kernel Darwin è basato su un codice * BSD, presumo si applichino gli stessi problemi, ma come possiamo aggirare questo?


1
Questa domanda sembra piuttosto ampia in questo momento, puoi essere un po 'più specifico su quale problema del mondo reale stai cercando di risolvere qui?
Nohillside

@patrix, te lo chiedo solo perché questo pensiero mi è venuto in mente. Un anno fa ho dovuto modificare un paio di file host, quindi ho eseguito il root su root ed ho eseguito TextEdit da lì. Mi chiedevo se esiste un modo migliore.
agentroadkill,

Risposte:


3

Per modificare /etc/hostscon il testo sublime:
sudo /Applications/Sublime\ Text.app/Contents/MacOS/Sublime\ Text /etc/hosts

Se devi farlo regolarmente, puoi aggiungere questo snippet al tuo ~ / .bash_profile

#   sudoapp: Runs .app with root privileges
#   Usage: sudoapp /Applications/Name.app /etc/hosts
#   --------------------------------------------------------------------
    sudoapp () {
        sudo "$1/Contents/MacOS/$(defaults read "$1/Contents/Info.plist" CFBundleExecutable)" $2
    }

Le app in esecuzione con i privilegi di root utilizzeranno /private/var/rootcome cartella home, quindi tutti i file di configurazione e temporanei di proprietà di root che verranno creati nel processo rimarranno dove dovrebbero essere - nella rootdirectory home.
Ciò equivale ad accedere come root e eseguire l'app, ma senza il fastidio di cambiare utente.

Questo metodo funziona su 10.6 - 10.11

Aggiornamento: TextEdit di Apple si rifiuta di avviarsi se eseguito come root in 10.11 e versioni successive, quindi ho cambiato il mio esempio per utilizzare invece Sublime Text


Quindi questo manterrà i miei file di configurazione attuali e ne creerà altri di proprietà di root? Questo sembra essere il più grande pericolo nell'esecuzione di applicazioni GUI sudo.
agentroadkill,

No, questo è un comportamento corretto, perché avere file casuali creati dalla radice nella tua ~ / Library sarebbe una vera PITA.
Sergei,

Ma quei file non saranno di proprietà di root quando chiudo l'istanza del Finder di proprietà di root? Non voglio davvero andare su chownmolti file di configurazione ogni volta che lo faccio.
agentroadkill,

Non è necessario chown nulla, l'app GUI rispetta la directory dell'utente. Tutti i file di configurazione / tmp creati dall'app della GUI root rimarranno in / private / var / root e saranno di proprietà di root - proprio come dovrebbe essere. Ciò equivale ad accedere come root e eseguire l'app, ma senza il fastidio di cambiare utente.
Sergei,

1
In qualche modo ho letto male il tuo primo commento e ho pensato che stavi dicendo che conservare i tuoi file di configurazione attuali è un problema. Mi dispiace per quello.
Sergei,

3

Sebbene sia possibile avviare un'applicazione grafica come utente root, non è consigliabile. Può funzionare, il più delle volte, ma evita di fare affidamento su questo comportamento.

Evita la radice

L'esecuzione di un'applicazione come root non è consigliata perché aumenta notevolmente il rischio di causare problemi con il tuo Mac. L'uso di root dovrebbe essere limitato al più piccolo pezzo di codice possibile con controlli rigorosi in atto.

Le applicazioni si stanno muovendo sempre più verso una progettazione frammentata per evitare di esporre troppa potenza al codice che non lo richiede.

  • Un errore nel codice in esecuzione con permessi di root è un rischio per la sicurezza.
  • Un errore nel codice senza permessi di root è molto meno capace di causare seri problemi.

Ci sono casi limite ma questi sono sempre più rari. L'introduzione di sandboxing e XPC fanno parte degli sforzi di Apple per ridurre la necessità di fornire un'autorità eccessiva ai processi in esecuzione su OS X.

Strumenti da riga di comando

Se avete bisogno di lavorare con i file come utente root, utilizzare gli strumenti della riga di comando, come vim, emacso nano. Questi strumenti non si basano sul WindowServer e possono essere felicemente avviati come root all'interno di un'altra sessione utente:

sudo nano <path to edit>

Strumenti grafici

Se preferisci gli editor grafici, usa un editor che funzioni con il design di Mac OS X. BBEdit è un eccellente editor che gestirà correttamente la modifica dei file di proprietà di root .

Quando si modifica un file di proprietà di root con BBEdit, viene utilizzato un secondo processo per colmare il divario di autorizzazioni tra l'utente e il proprietario del file. Questo processo passa attraverso i percorsi sanzionati di Apple e garantisce quindi un'esperienza prevedibile, si spera in più versioni principali di Mac OS X.

Perché? Limiti di WindowServer e ambito di progettazione

Esistono sottili problemi tecnici con l'avvio di un'applicazione grafica in un'altra sessione utente.

I problemi tecnici sottostanti derivano da un utente che desidera avviare un processo grafico all'interno della sessione di un altro utente. WindowServer di Mac OS X non è mai stato progettato con questo obiettivo. Le sessioni utente sono estremamente difficili da superare anche come utenti root, il tutto per motivi di sicurezza desiderabili.

Apple ha notevolmente migliorato il design di WindowServer nelle ultime versioni principali di Mac OS X. È ora possibile avere più utenti connessi a diverse sessioni grafiche su un Mac tramite Condivisione schermo. Questo miglioramento apparentemente semplice si basava su un'enorme quantità di sforzi dietro le quinte degli ingegneri di Apple.

Tuttavia, è improbabile che Apple fornisca un modo semplice per attraversare le applicazioni di avvio come utenti diversi all'interno di una singola sessione utente grafica. In che modo ciò gioverebbe ai loro clienti?

Se desideri approfondire ulteriormente questo argomento, cerca le domande che coinvolgono launchctled eseguono applicazioni in altre sessioni utente attive.


JFYI Sto usando il metodo descritto nella mia risposta da OS X 10.6 e non ho mai avuto un singolo problema. WindowServer è stato progettato in questo modo deliberatamente o per caso è al di fuori delle mie conoscenze, ma gestisce perfettamente le app sudo. Immagino che l'intera storia "non raccomandata" sia spazzata via da proporzioni (a meno che tu non possa effettivamente fornire alcuna prova del motivo per cui può causare problemi)
Sergei,

Quindi la danza qui sembra essere che l'applicazione in esecuzione con i privilegi di root creerà alcuni file di configurazione (o quant'altro) che potrebbero essere persistenti, ma di proprietà di root. Questo può ovviamente essere molto brutto, ma succede abbastanza di rado. Facciamo finta per amor di discussione che voglio aprire un'istanza di Utility Disco dal terminale, ma in una sessione grafica. Devo solo aprirlo e aspettare che mi chieda il permesso?
agentroadkill,

In questo caso, utilizzare lo strumento da riga di comando diskutilal posto dell'applicazione: dssw.co.uk/reference/diskutil.html Su Mac OS X, non è necessario eseguire alcuna applicazione grafica direttamente come root. Se sono richiesti diritti aggiuntivi, l'applicazione grafica dovrebbe organizzarli per te e farti autenticarti contro il diritto appropriato: dssw.co.uk/reference/authorization-rights
Graham Miln

Spesso eseguo applicazioni X11 come root senza problemi.
Max Ried,

1

Ci sono buoni motivi per NON modificare i file come root. Perché non copiarli in un file temporaneo, modificarlo e copiarlo di nuovo.

È possibile utilizzare visudosebbene ciò richieda una certa conoscenza di vi, ma è OK per apportare modifiche semplici /etc/fstabo simili.

Potresti provare a impostare ed eseguire la variabile di ambiente EDITOR visudoanche se non l'ho mai provato con un editor grafico.


Non riesco a vedere alcuna connessione alla domanda.
Max Ried,

0

La risposta di Sergei non ha funzionato per me su OS X 10.8.5

$ sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

Ho ricevuto un messaggio di errore relativo alle autorizzazioni

ERRORE

Dal momento che sudoho prima inserito il binario, quindi facendo doppio clic sul file in Finder ha funzionato, ho trovato il seguente comando meno semplice

$ sudo -b /Applications/TextEdit.app/Contents/MacOS/TextEdit && sleep .5 && open -a /Applications/TextEdit.app /etc/hosts

Puoi farne una funzione come quella di Sergei, se necessario.


Nelle nuove versioni di Mac OS, Apple ha fatto qualcosa per TextEdit specificamente per impedirne l'utilizzo con sudo. Altre app funzionano. Ho cambiato la mia risposta per usare Sublime Text come esempio.
Sergei

Grazie per l'heads-up, ma potresti essere più specifico? Magari controlla i flag sul binario di TextEdit per cominciare?
1.61803,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.