Come posso fare sudo su e cambiare directory subito dopo?


13

Vorrei creare un alias che fa qualcosa del genere:

alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access'

Quindi, dalla mia riga di comando, ho effettuato l'accesso con un utente sudo e vorrei digitare l'alias in userYYYmodo che la mia shell sia ora loggata userYYYe lo pwdsia /a/path/that/only/userYYY/has/access.

Come posso fare ciò? Questo userYYYè per l'esecuzione di alcuni processi e ci deve essere qualcosa nella sua casa. Quindi, ho provato a cambiare $ HOME usando:

sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 

E poi dalla mia shell con il mio file sudoer l'ho fatto sudo su userYYY. Ma non ha funzionato. L'unico che ha funzionato è stato sudo su -l userYYYYma che ha aperto una nuova bash all'interno della mia shell originale ( -bash-4.1$ ....).

In sintesi, quello che voglio è semplicemente evitare di dover scrivere 2 righe nella mia shell:

sudo su userYYY
cd /a/path/that/only/userYYY/has/access

Qualche idea?

Risposte:


10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'

sembra funzionare bene, ma non sono sicuro di come rimuovere questo errore o se si tratta di un problema. usando ubuntu 14.04LTS, ho notato che c'era un problema con su debian ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz,

1
in realtà, dopo averlo usato per un po ', ho notato che il terminale viene ucciso abbastanza frequentemente usando questo metodo (disconnettiti circa 15-30 minuti, regolarmente, il mio terminale dura circa 6 ore prima di disconnettersi)
sonjz,

Appena scavato questo, questo comportamento è dovuto a una correzione di sicurezza: unix.stackexchange.com/questions/65843/…
sonjz

questo mi ha aiutato a modificare il mio .bashrcfile in sudoquel momento in cdcui avere 2 linee separate non funzionava.
RozzA

2

Un'opzione sarebbe quella di modificare ~/.bashrcl'utente di destinazione e aggiungere cdlì:

cd /a/path/that/only/userYYY/has/access

0

Risposta breve: non puoi. Il sudo suinizia una nuova shell che deve uscire prima che arrivi al cdcomando.


0

Per me una combinazione di sudoed screenelaborato:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

Questo comando passa prima vagrantall'utente. Quindi, quando si vagrantmodifica la directory /vagrante viene eseguita npm install.


0

So che questo è leggermente diverso dalla domanda originale, ma l'idea è di eseguire il comando come utente diverso senza digitare una password quando la politica lo proibisce sudo su <user> -c.

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
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.