2010-07-06 17 views
6

Questo è per me che sono stressato dal gioco "scrivi un comando e ricorda di anteporre sudo o le tue dita saranno schiaffeggiate".Automaticamente invocando gksudo come UAC

Mi chiedo se sia possibile in qualche modo configurare il mio sistema o shell Linux in modo tale che quando dimentico di digitare e.g. "sudo apt-get install emacs", invece di dirmi che ho fatto qualcosa di sbagliato, gksudo sarebbe stato lanciato, permettendomi di riconoscere le mie credenziali e andare avanti. Proprio come UAC fa su Windows.

Googling non mi ha aiutato ancora ..

Quindi è possibile? Ho dimenticato qualcosa? O sto chiedendo un cerchio quadrato?

Modifica 25 luglio 2010: Grazie a tutti per il vostro contatto. Sfortunatamente, Daenyth e bmargulies risposte e spiegazioni sono ciò che ho anticipato/temuto dal momento che per me è stato impossibile trovare una soluzione su Google prima di inviare questa domanda. Spero che qualche bella persona un giorno fornisca una soluzione efficace per questo.

BR, Christian

+0

Alcuni programmi restituiscono 'errno' come codice di uscita, in questo caso qualsiasi programma che esce con' EACCESS' sarebbe un candidato. Altrimenti si potrebbe voler sostituire glibc con una versione che controlla i risultati delle chiamate di sistema per 'EACCESS' e offre elevazione. –

+0

Per la cronaca, Windows non ha la funzionalità che stavi chiedendo per avere Linux qui. Su Windows le cose escono con ERROR_ACCESS_DENIED e non vengono riavviate automaticamente - è solo che su Windows, ci sono convenzioni che le applicazioni dovrebbero rilanciare se non hanno le autorizzazioni giuste. aptitude su Debian fa anche questo per esempio. Inoltre, c'è un flag sui file binari di Windows che richiede l'elevazione quando si esegue la shell, ma di nuovo questo non copre il caso della riga di comando. –

risposta

0

Non c'è modo di fare questo dato l'attuale stack del software Linux. Inoltre, MS has a patent on this behavior-present a user interface identifying an account having a right to permit a task in response to the task being prohibited based on a user's current account not having that right.

+0

IANAL, ma sembra che se il popup non pre-seleziona un account a 'su' a, allora non è coperto dal brevetto. Il brevetto esclude anche i conti con "diritti illimitati" che sembrerebbero riferirsi a "root". –

+0

Probabilmente è comunque invalido a causa della tecnica nota, ma vale la pena essere a conoscenza. – Daenyth

0

Non credo che questo funziona davvero in modo generale (decidendo automaticamente quale applicazione ha bisogno di diritti di amministratore). Tuttavia si potrebbe fare alias come questo per ogni tipo di applicazione:

alias alias apt-get='gksudo apt-get' 

Se ora si immette apt-get install firefox lo gnomo chiede la password di amministrazione. È possibile memorizzare i comandi ~./bashrc

+0

Mi dispiace, ma questo non si adattava alle mie esigenze. Quello che sto cercando è un pulsante "Linux decide quando chiedere" da qualche parte che lo accenderà o spegnerà per qualsiasi applicazione. Grazie per il suggerimento. –

0

È possibile utilizzare uno script di shell come il seguente:

#!/bin/bash 
[email protected] 
if [ $? -ne 0 ]; then 
    sudo [email protected] # or "gksudo [email protected]" 
fi 

Questo verrà eseguito un comando dato negli argomenti con un prefisso sudo se il comando è tornato con un non- zero return code (cioè se fallisce). Usalo come in "SCRIPT_NAME apt-get install emacs" per esempio. È possibile salvare da qualche parte nel $ PATH e impostarlo come un alias come questo (se è stato salvato come do_sudo):

alias apt-get='do_sudo apt-get' 

Edit: che non non lavoro per programmi come synaptic che fare funzionano per utenti non root ma daranno loro meno privilegi. Tuttavia, se l'applicazione fallisce quando viene richiamata senza i privilegi di root (come fa apt-get), questo funziona correttamente.

+1

Questo è estremamente fragile e probabilmente si rompe o fa la cosa sbagliata – Daenyth

1

È possibile eseguire ciò che si desidera con una funzione di hook preexec, simile al pacchetto command-not-found.

3

Linux non lo consente. A differenza di Windows, in cui qualsiasi programma può avviare una finestra di dialogo e UAC è nel kernel, i programmi Linux non sono necessariamente compatibili con la GUI e sudo non è, in questo senso, nel kernel. Un programma non può effettuare una chiamata per elevare il privilegio (a meno che non sia stato lanciato con privilegio all'inizio e intenzionalmente impostato). sudo è un eseguibile separato con privilegio setuid, che controlla l'autorizzazione. Se gli piace ciò che vede, forchetta la shell per eseguire la riga di comando. Questo non può essere rovesciato.

Come suggerito in altri post, potresti essere in grado di creare un "gioco di shell" per organizzare l'esecuzione di sudo per alcuni elenchi di comandi elencati, ma è tutto ciò che otterrai.

+0

Non hai bisogno di diritti speciali per 'exec gksudo' però. –

+1

Vero. Un programma potrebbe rilanciare se stesso tramite fork/exec di gksudo. Ci sarebbero alcune interessanti sfide per la sicurezza nello scrivere lo stato da rileggere nel rilancio. – bmargulies

0

Nel caso in cui si desidera eseguire sempre un comando come root, ma potrebbe già essere radice, si può risolvere questo avvolgendo un piccolo script bash intorno ad esso:

#!/bin/bash 
if [ $EUID = 0 ]; then 
    "[email protected]" 
else 
    gksudo "[email protected]" 
fi 

Se si chiama questo qualcosa come alwaysroot.bash e metterlo nel posto giusto sul vostro cammino, allora è possibile chiamare il vostro altro programma come questo:

alwaysroot.bash otherprogram -arguments... 

gestisce anche argumen ts con spazi in modo corretto.

Problemi correlati