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


21

Sto cercando di utilizzare 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?

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

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

se fa la differenza .... sospiro.


non stai dimenticando -c flag per lanciare irssi? (su -c irssi)
eephyne,

provato anche quello ... provato mille cose ... perché così difficile da eseguire come WTF è esattamente come lo vuole la pagina man ... ma non succede nulla grrr
user123361

potrebbe essere solo che irssiha un problema e che il comando su funziona?
Nanne,

Il "nome utente" ha i diritti corretti per eseguire irssi?
Doka,

Risposte:


28

Questa risposta dovrebbe comunque aiutarti, anche tenendo conto delle modifiche alla domanda. In particolare, un account creato con --disabled-loginnon ha una password impostata e nessun altro mezzo per accedere , ma dovrebbe essere comunque possibile usare sudo(spiegato di seguito) per eseguire comandi o una shell come utente. Questo è, infatti, il modo in cui l' rootaccount è impostato in Ubuntu.

Esistono più problemi con il comando su - irssi.

Questo comando tenta di avviare una shell di proprietà di un utente di nomeirssi .

Fallirà se:

  • Non ci sono irssiutenti
  • L' irssiaccount dell'utente è disabilitato.
  • L' irssiaccount dell'utente è disabilitato per l'accesso interattivo. A volte a un account è consentito utilizzare servizi come FTP ma è vietato accedere normalmente impostando la shell su qualcosa che si chiude immediatamente, come /bin/false. Quindi un accesso termina immediatamente, senza alcun messaggio.
  • La password che stai inserendo non è corretta per l' irssiutente.

Il -flag lo rende così la shell simula una shell di login iniziale - cioè, è davvero molto simile all'accesso come irssi. Senza il -flag, se il sucomando avesse esito positivo, avresti comunque una shell di proprietà irssi, ma le variabili d'ambiente come HOMEsarebbero invariate.

Se invece vuoi eseguire un programma chiamato irssi , devi invocare sudiversamente:

su username - -c irssi

Se lo lasci , è lo stesso di - tenta di eseguire il comando come root.-c username-c root

In alternativa è possibile avviare una shell e quindi eseguire il comando :

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

Comandi in esecuzione come root

Se si desidera eseguire irssicome root, sunon è il modo di farlo. Gli accessi root sono disabilitati di default su Ubuntu e raramente ci sono motivi per riattivarli . Se hai abilitato l' rootaccesso, dovresti essere in grado di utilizzare super diventare root. Il motivo per cui non è necessario abilitare l' rootaccount è che, indipendentemente dal fatto, è ancora possibile eseguire comandi come rootcon sudo.

Quando si eseguono comandi sudo, si inserisce la password, non la password dell'utente con la cui identità si desidera eseguire il comando. Solo gli amministratori possono eseguire comandi arbitrari come rootcon sudo(a meno che non si riconfigura sudoper permettere ad altri di farlo, ovviamente). Pertanto, a un utente a cui non è consentito amministrare il sistema non è autorizzato a eseguire comandi come rootcon la propria password.

Per funzionare irssicome rootcon sudo:

sudo irssi

E inseriresti la tua password quando richiesto, non rootdi.

Tranne la password che inserisci, fa la stessa cosa di:

su -c irssi

Tranne che la sudoversione può avere successo perché non richiede che l' rootaccount sia abilitato.

Come con su, è possibile utilizzare sudoper eseguire comandi come un altro, non rootutente . Per funzionare irssicome usernamecon sudo:

sudo -u username irssi

Se vuoi sudo comportarti come su -rispetto aHOME - cioè, vuoi usare le HOMEvariabili d'ambiente dell'utente di destinazione , puoi eseguire sudocon il -Hflag:

sudo -H irssi
sudo -H -u username irssi

Puoi iniziare un'intera shell con sudo, come puoi fare con su. 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

( iIndica la shell di login iniziale .)

Puoi avviare una shell anche come un altro utente:

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

Ulteriori approfondimenti sudo

Per saperne di piùsudo , dai un'occhiata a:

Perché ha gksufunzionato quando suno?

gksuprobabilmente ha funzionato correndosudo .

gksuè un frontend per entrambi su e sudo. In Ubuntu, viene utilizzato per impostazione predefinita sudo(poiché in Ubuntu, in sugenere non viene utilizzato per diventare root, ed è solo un modo secondario per diventare altri non rootutenti).

È possibile gksuutilizzare sucome frontend eseguendo gksu --su-mode.

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

Quando gksuè in sudomodalità, si comporta come gksudo.

Ulteriori approfondimenti gksu


Analisi post-soluzione

Alla fine hai scoperto che sei stato in grado di eseguire il comando necessario con:

sudo -u username irssi

(Quale delle tecniche sopra elencate.)

Alla fine, hai riportato due informazioni, che sono sufficienti per spiegare il motivo per cui altre tecniche avevano fallito, ma ciò è riuscito:

  1. L' usernameaccount è stato creato con il --disabled-loginflag, il che lo rende privo di password (e nessun altro mezzo per accedere). 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 mezzo usernamenon può autenticare affatto.

    Quindi le susoluzioni basate su tutti sono disponibili. sudopuò funzionare, perché con sudote non esegui l'autenticazione come l'utente che stai per impersonare. Invece, devi essere autorizzato a spacciarli e ti autentichi come te stesso (cioè, inserisci la tua password, non la loro).

    È possibile impostare una password sull'account, che rimuove questa barriera all'accesso:

    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 abbia effettuato l'accesso graficamente, potrebbero sorgere problemi gravi dall'ambiente dell'utente o se i privilegi non sono adatti all'esecuzione di app X11 ? Se questo utente potesse accedere, ciò consentirebbe di accedere in remoto come quell'utente (per le macchine in cui hai esposto i servizi di rete)?

    Se vuoi disabilitarlo di nuovo:

    sudo passwd -dl username

    Correlati: riattivazione rootdell'account dopo averlo abilitato temporaneamente.

  2. L' usernameaccount ha /bin/falsecome shell di login.

    Quando una shell come bashviene eseguita come shell di accesso, configura il tuo ambiente e ti dà un prompt interattivo con il quale controllare la macchina.

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

    I comandi falsee truesono utili negli script e per vari scopi di test, ma anche per disabilitare un account in modo che quando qualcuno accede, la sua sessione di accesso termina immediatamente. In questo modo, è possibile abilitare una password (o altri mezzi di autenticazione) e le persone possono accedere, non solo per l' accesso alla shell . Ad esempio, se esiste un server FTP, potrebbero comunque accedere al proprio account tramite FTP. Se esiste un server SSH, non sarebbero in grado di ottenere una shell tramite SSH, ma potrebbero comunque utilizzare sftpe scptrasferire file.

    Dal momento che usernamela shell di login 's era non funzionali, comandi come , , , e non poteva funzionare.su usernamesu - usernamesudo -u username -ssudo -u username -i

    Ma i comandi che non danno una shell, come o potrebbero ancora funzionare.sudo -u username commandsu username -c 'command'

    Poiché i comandi possono essere eseguiti, è possibile modificare la shell di accesso dell'utente in qualcosa di funzionale:

    sudo chsh -s /bin/bash username

    Tuttavia, ciò dovrebbe essere eseguito con cautela, poiché potrebbe esserci un buon motivo per disabilitare gli accessi interattivi per l'utente.

Qui, usernameentrambi avevano password disabilitata e shell "disabilitata". L'assenza di una password funzionante ha impedito il funzionamento di tutte le susoluzioni basate su base, mentre l'assenza di una shell di login interattiva funzionante ha impedito il funzionamento di tutte le soluzioni di generazione della shell (tranne che per invocare manualmente una shell, come ).sudo -u username bash

sudo -u username command è ciò che è rimasto.


Ci scusiamo per le numerose modifiche mentre stavi lavorando alla tua risposta. Wow. Grazie. Quando faccio cat / etc / passwd l'utente che ho configurato ha / bin / false alla fine - quindi è questo che sta causando il fallimento? qualche idea su come risolverlo?
user123361

Per qualsiasi motivo, l'uso di sudo -u username irssi funziona a meraviglia. Grazie per la tua risposta lunga e ben spiegata!
user123361

@db Sono contento che abbia funzionato! (A proposito, non c'è bisogno di scusarsi per la modifica, la modifica è molto, molto buona e la tua domanda sarà probabilmente utile anche per più altre persone come conseguenza delle modifiche.) Per quanto riguarda le altre tue domande, ho modificato la mia risposta a includere una sezione di analisi alla fine.
Eliah Kagan,
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.