consentire sudo a un altro utente senza password


46

Voglio essere in grado di "eseguire" su un utente specifico, consentendomi di eseguire qualsiasi comando senza immettere una password.

Per esempio:

Se il mio login fosse user1 e l'utente a cui voglio "su" è user2:

Vorrei usare il comando:

su - user2

ma poi mi viene da chiedermi

Password:


Chiedi la password all'altro utente. Almeno l'altro utente sa cosa è stato fatto con il suo ID.
Nomade globale,

1
Questo non ha nulla a che fare con un altro utente fisico. Entrambi gli ID sono miei. Conosco la password come ho creato l'account. Non voglio semplicemente digitare la password ogni volta.
zio,

Sarebbe ok per ssh all'utente o hai bisogno di ereditare una shell in particolare e hai bisogno di su per funzionare?
bmike

1
@zio Ottimo caso d'uso. Non open -na Skypefunziona per te?
bmike

Risposte:


66

sudo puoi fare proprio questo per te :)

Ha bisogno di un po 'di configurazione, ma una volta fatto lo faresti solo:

sudo -u user2 -s

E verrai loggato come user2 senza inserire una password.

Configurazione

Per configurare sudo, è necessario modificare il file di configurazione via: visudo. Nota: questo comando aprirà la configurazione usando l' vieditor di testo, se non sei a tuo agio con quello, devi impostare un altro editor (usando export EDITOR=<command>) prima di eseguire la seguente riga. Un altro editor della riga di comando a volte considerato più semplice è nano, quindi dovresti farlo export EDITOR=/usr/bin/nano. Di solito è necessario il privilegio di superutente per visudo:

sudo visudo

Questo file è strutturato in diverse sezioni, gli alias, quindi i valori predefiniti e infine alla fine hai le regole. Qui è dove è necessario aggiungere la nuova linea. Quindi vai alla fine del file e aggiungi questo:

user1    ALL=(user2) NOPASSWD: /bin/bash

È possibile sostituire anche /bin/bashda ALLe allora si potrebbe lanciare qualsiasi comando come utente2 senza password: sudo -u user2 <command>.

Se vuoi essere in grado di passare a qualsiasi utente, basta usare

user1    ALL=(ALL) NOPASSWD: /bin/bash

Aggiornare

Ho appena visto il tuo commento su Skype. Puoi prendere in considerazione l'aggiunta di Skype direttamente al file di configurazione del sudo. Presumo che tu abbia installato Skype nella cartella Applicazioni :

user1    ALL=(user2) NOPASSWD: /Applications/Skype.app/Contents/MacOS/Skype

Quindi chiameresti dal terminale:

sudo -u user2 /Applications/Skype.app/Contents/MacOS/Skype

Questo è molto meno complicato dell'idea dei tasti SSH, quindi usalo a meno che non ti servano anche i tasti SSH per l'accesso remoto.
bmike

2
Una cosa da notare dal punto di vista della sicurezza è che la specifica di un comando specifico implica che dovrebbe essere un comando di sola lettura per l'utente1; Altrimenti, possono sovrascrivere il comando con qualcos'altro ed eseguirlo come user2. E se non ti interessa, potresti anche specificare che user1 può eseguire qualsiasi comando come user2 e quindi avere una configurazione sudo più semplice.
Stan Kurdziel,

@StanKurdziel buon punto! Sebbene sia qualcosa di cui essere consapevoli, è davvero raro avere eseguibili di sistema scrivibili dagli utenti a meno che tu non sia root ma in questo caso non hai bisogno di sudo ;-) Ma hai ragione ad aggiungere questo commento perché è così raro che probabilmente l'ho trascurato più di una volta.
Huygens,

Per avvicinarlo al comportamento su - user2anziché su user2, i comandi dovrebbero probabilmente coinvolgere tutti sudo -u user2 -i, al fine di simulare un accesso iniziale come utente2
Gert van den Berg

4

Vorrei impostare le chiavi ssh pubbliche / private per il secondo account e memorizzare la chiave nel primo account.

Quindi è possibile eseguire un comando come:

 ssh user@localhost -n /Applications/Skype.app/Contents/MacOS/Skype &

Avresti ancora i problemi in cui Skype viene confuso poiché due istanze sono in esecuzione su un account utente e i file letti / scritti da quel programma potrebbero essere in conflitto. Potrebbe anche funzionare abbastanza bene per le tue esigenze e non avresti bisogno di un iPod touch per eseguire la tua seconda istanza di Skype.


1
Questa è una buona soluzione sicura per il caso generale di accesso senza password a qualsiasi account su qualsiasi host, ma direi che probabilmente è eccessivo quando entrambi gli account si trovano sullo stesso host e appartengono allo stesso utente.
calum_b,

@scottishwildcat È molto più sicuro dell'alternativa di scrivere la password e inserirla in testo chiaro o usare una variabile e archiviare la password nel portachiavi e usare uno strumento come expectlo script dell'interazione. Uso sudo su - blahe digito semplicemente la mia password. Penso che l'altra risposta riguardi abbastanza bene sudo da tenerlo come commento.
bmike

Oh, di certo non stavo suggerendo che la tua risposta dovesse essere rimossa ... Non ho nemmeno votato male, è una risposta perfettamente valida.
calum_b,

Sembriamo essere totalmente d'accordo - grazie per l'aggiunta - sentiti libero di modificarlo nella risposta se puoi migliorarlo.
bmike

La soluzione accettata ( sudo -u user2 <...>) ha il vantaggio di non poter essere utilizzata in remoto, il che potrebbe aiutare per la sicurezza: non esiste una chiave privata per l'utente1 che può essere rubata.
Gert van den Berg,
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.