Come eseguire un comando come utente il cui accesso è disabilitato?

20

Sto cercando di usare il comando su per eseguire un'applicazione come un altro utente

In questo caso sto cercando di eseguire irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Eseguo gksu e imposto gli stessi parametri e funziona, e non mi chiede la password dell'utente. Qual'è il problema? E come lo risolvo?

Devo notare che l'utente è stato creato in questo modo

adduser --system --disabled-login [username]

se fa alcuna differenza .... sigh.

    
posta user123361 15.01.2013 - 07:53
fonte

1 risposta

27
  

Questa risposta dovrebbe comunque aiutarti, anche apportando le modifiche a   domanda in considerazione. In particolare, un account creato con    --disabled-login non ha password impostate e nessun altro mezzo di registrazione   in , ma dovrebbe essere ancora possibile utilizzare sudo (spiegato di seguito)   per eseguire comandi o una shell come utente. Questo è, infatti, come il   % account di co_de% è impostato in Ubuntu.

Ci sono più problemi con il comando root .

Questo comando prova a avviare una shell di proprietà di un utente chiamato su - irssi .

Fallirà se:

  • Non esiste irssi utente.
  • L'account dell'utente irssi è disabilitato.
  • L'account dell'utente irssi è disabilitato per l'accesso interattivo. A volte un account è autorizzato a utilizzare servizi come FTP ma non è consentito effettuare il login normalmente impostando la shell su qualcosa che si chiude immediatamente, come irssi . Quindi un accesso termina immediatamente, senza messaggi.
  • La password che stai inserendo non è corretta per /bin/false utente.

Il flag irssi fa in modo che la shell simuli una shell di login iniziale - cioè, è davvero molto simile all'accesso come - . Senza il flag irssi , se il comando - è riuscito, si otterrebbe comunque una shell di proprietà di su , ma le variabili di ambiente come irssi non saranno modificate.

Se invece vuoi eseguire un programma chiamato HOME , devi invocare irssi in modo diverso:

su username - -c irssi

Se si omette su , è uguale a -c username - tenta di eseguire il comando come root.

In alternativa puoi avviare una shell e quindi eseguire il comando :

  1. Avvia la shell con -c root .
  2. Nella shell, esegui il comando ( su username - ).
  3. Se hai finito, lascia la shell eseguendo irssi .

Esecuzione di comandi come exit

Se vuoi eseguire root come irssi , root non è il modo per farlo. Gli accessi root sono disabilitati per impostazione predefinita su Ubuntu e raramente vi sono motivi per riabilitarli . Se hai attivato l'accesso su , dovresti essere in grado di utilizzare root per diventare su . Il motivo per cui non è necessario abilitare l'account root è che, indipendentemente dal fatto che lo fai, puoi comunque eseguire comandi come root con root .

Quando esegui i comandi con sudo , inserisci la tua password, non la password dell'utente sotto cui identità desideri eseguire il comando . Solo gli amministratori possono eseguire comandi arbitrari come sudo con root (a meno che non si riconfiguri sudo per consentire ad altri di farlo, ovviamente). Quindi un utente a cui non è consentito amministrare il sistema non può eseguire comandi come sudo con la propria password.

Per eseguire root come irssi con root :

sudo irssi

E quando inserisci la password tua , non sudo .

Tranne la password che inserisci, fa la stessa cosa:

su -c irssi

Tranne che la versione root può avere successo perché non richiede che l'account sudo sia abilitato.

Come con root , puoi utilizzare su per eseguire comandi come un altro, non sudo utente . Per eseguire root come irssi con username :

sudo -u username irssi

Se vuoi che sudo si comporti come sudo rispetto a su - , ovvero, vuoi utilizzare le variabili di ambiente HOME dell'utente di destinazione, puoi eseguire HOME con il sudo flag:

sudo -H irssi
sudo -H -u username irssi

Puoi iniziare un'intera shell con -H , come puoi con sudo . Ad eccezione della password inserita, questo comando ha lo stesso effetto di su :

sudo -s

E questo comando ha lo stesso effetto di su :

sudo -i

(Il su - sta per shell di login iniziale .)

Puoi avviare una shell anche da un altro utente:

sudo -u username -s
sudo -u username -i

Ulteriori letture su i

Per ulteriori informazioni su sudo , dai un'occhiata a:

Perché man sudo ha funzionato quando gksu no?

su probabilmente ha funzionato eseguendo gksu .

sudo è un frontend per entrambi gksu e su .In Ubuntu, utilizza per default sudo (dato che in Ubuntu, sudo non viene in genere utilizzato per diventare su , ed è solo un modo secondario di diventare altri utenti non%% di_dezione).

Puoi rendere root utilizzare root come frontend eseguendo gksu .

Puoi scoprire se su è in modalità gksu --su-mode o gksu , e (se lo desideri) modificare questa impostazione, eseguendo su . Questa è un'impostazione per utente.

Quando sudo è in modalità gksu-properties , si comporta come gksu .

Ulteriori letture su sudo

Analisi post-soluzione

Alla fine hai scoperto che sei riuscito a eseguire il comando necessario con:

sudo -u username irssi

(che è una delle tecniche sopra elencate)

In definitiva, hai riportato due informazioni, che sono sufficienti a spiegare perché era successo che altre tecniche avevano fallito, ma che erano riuscite:

  1. L'account gksu è stato creato con il flag gksu , che lo rende dotato di nessuna password (e nessun altro mezzo di accesso). Non avere password non significa che è possibile accedere con una password vuota . Significa che nessuna password è sufficiente per l'autenticazione. In combinazione con l'eliminazione di altri mezzi di autenticazione, questo significa che gksudo non può autenticare affatto.

    Quindi tutte le soluzioni basate su username sono fuori. --disabled-login può funzionare, perché con username non si autentica come l'utente che si sta per imitare. Invece, devi essere autorizzato per impersonarli e autenticare come te stesso (cioè inserisci la tua password, non la loro).

    È possibile impostare una password sull'account, che rimuove questa barriera per accedere:

    sudo passwd username

    Tuttavia, potrebbe esserci una buona ragione per cui l'utente non è autorizzato ad accedere. Ad esempio, se questo utente fosse autorizzato ad accedere e ad accedere graficamente, potrebbero insorgere problemi con l'ambiente o i privilegi dell'utente inadatto a eseguire le app X11? Se questo utente fosse in grado di connettersi, ciò renderebbe possibile l'accesso remoto come tale utente (per le macchine in cui sono presenti servizi di rete esposti)?

    Se vuoi riattivarlo nuovamente:

    sudo passwd -dl username

    Correlati: Riattivazione dell'account su dopo averlo abilitato temporaneamente.

  2. L'account sudo ha sudo come shell di accesso.

    Quando una shell come root viene eseguita come shell di accesso, imposta l'ambiente e ti dà una richiesta interattiva con cui controllare la macchina.

    Quando viene eseguito username , d'altra parte non fa nulla e segnala errori . ( /bin/false non fa nulla e riporta il successo.)

    I comandi bash e /bin/false sono utili nello scripting e per vari scopi di test, ma anche per disabilitare un account in modo che quando qualcuno effettua l'accesso, la sessione di accesso termina immediatamente. In questo modo, una password (o altri mezzi di autenticazione) può essere abilitata, e le persone possono accedere, solo non per accesso alla shell . Ad esempio, se esiste un server FTP, potrebbero comunque accedere al proprio account tramite FTP. Se c'è un server SSH, non sarebbero in grado di ottenere una shell tramite SSH, ma potrebbero comunque utilizzare /bin/true e false per trasferire i file.

    Poiché la shell di accesso true non era funzionale, comandi come sftp , scp , username e su username non potevano funzionare.

    Ma i comandi che non danno una shell, come su - username o sudo -u username -s potrebbero ancora funzionare.

    Poiché i comandi possono essere eseguiti, puoi cambiare la shell di login dell'utente in qualcosa di funzionale:

    sudo chsh -s /bin/bash username

    Tuttavia, questo dovrebbe essere fatto con cautela, in quanto potrebbe esserci una buona ragione per disabilitare gli accessi interattivi per l'utente.

Qui, sudo -u username -i entrambi avevano la shell disabilitata e "disabilitata". L'assenza di qualsiasi password funzionante ha impedito il funzionamento di tutte le soluzioni basate su sudo -u username command , mentre l'assenza di una shell di login interattiva funzionava impedendo il funzionamento di tutte le soluzioni di spawning (tranne il richiamo manuale di una shell, come su username -c 'command' ).

username è ciò che è rimasto.

    
risposta data Eliah Kagan 15.01.2013 - 08:57
fonte

Leggi altre domande sui tag