Linux - usa "su -" ma mantieni la directory corrente


14

Quando lo faccio su -per arrivare a root, la mia directory corrente è impostata sulla home di root. C'è comunque un modo per mantenere l'attuale directory in cui mi trovavo, molto simile sudo -s. O è la risposta per usare sudo?


5
Si prega di notare che non voglio sembrare maleducato, ma perché questo problema non viene risolto tramite "man su"?
Myrrdyn,

1
@Rory, per favore, leggi il commento di
Myrrdyn

Mi piace usare sudo su -c "zsh", nel mio caso, mi mantiene nella directory corrente e carica zsh come shell con l'utente root. ctrl+ddopo e torni all'utente corrente. Per quanto riguarda la directory, funziona direttamente su centos per me, ma forse l'aggiunta di `&& cd $ (pwd)` all'interno del comando passato potrebbe fare il trucco.
GabLeRoux,

@Myrrdyn Le documentazioni sono eccezionali quando sai cosa stai cercando. In caso contrario, chiedere agli esperti alcuni consigli è più veloce e più didattico.
Romain Vincent,

Risposte:


18

È sempre meglio usare sudo, se possibile, perché non è necessario conoscere (o fornire a qualcuno) la password di root. Imposta la password di root su qualcosa di lungo e orribile e poi bloccala in una cassaforte.

Se vuoi negare a qualcuno l'accesso in seguito, devi semplicemente rimuovere il suo accesso a sudo, invece di dover insegnare a tutti gli altri una nuova password di root.

Tuttavia, non è necessario utilizzare il parametro '-' se non si desidera. Otterrai una shell come root, semplicemente non sarà una shell di login (quindi non eseguirà il .profile di root).


1
Nel mio caso avevo bisogno di un alias per fare qualcosa del genere asuser git reset --hard. Ma su - <user> -m -c "git reset --hard"e sudo -u <user> git reset --hardsalverebbe il mio ambiente e git proverebbe a leggere la configurazione git dell'utente corrente . Quindi volevo solo affermare che a volte la soluzione di user205705 usando su - <user> -c "cd pwd; bash" è migliore.
ReFruity,

16

Concordo sul fatto che sudo è quasi sempre una risposta migliore, ma per rispondere all'altra parte della domanda ...

Il "-" in "su -" indica che si desidera emulare un accesso superutente, anziché eseguire semplicemente i privilegi di superutente.

Se usi semplicemente "su" anziché "su -" rimarrai nella stessa directory; tuttavia sarai anche in esecuzione nello stesso ambiente, quindi potrebbe essere necessario modificare il tuo percorso per accedere ad alcuni comandi di amministrazione.


9

Se lo usi susenza il -, dovrebbe tenerti nella tua directory corrente. -, -loppure --login dire a:

Fornire un ambiente simile a quello che l'utente si aspetterebbe se l'utente avesse effettuato l'accesso direttamente.

O semplicemente usa sudo, ha molti altri vantaggi. O chiavi ssh.


6

Dovresti assolutamente usare sudo.

su -m
-m (-p): non resetta le variabili d'ambiente (generalmente sconsigliato)

Questo ti terrà nella cartella quando cambi a root.

Vantaggi dell'utilizzo di sudo


1
Non riesco a vedere come questo sia diverso dal solo "su" da solo, a parte forse non resettare l'ambiente PATH, che è un possibile problema di sicurezza.
David Pashley,

@DavidPashley per esempio, esegue l' .bashrcutente esterno, non quello principale.
phil294,

4

Se vuoi davvero usarlo su, c'è un modo per rimanere nella stessa directory.

su - <user> -c "cd `pwd`; bash"

Cosa sta succedendo qui:

  • su - <user> = accedi come
  • -c il che significa "esegui un comando nella nuova shell
  • -c "cd `pwd`" il comando che diamo è di passare al direcotory corrente ( pwd) - ma poiché usiamo i backtick, il pwdcomando viene valutato prima di eseguire il sucomando in modo da passare alla directory in cui ci troviamo ADESSO come vecchio utente. L'unico problema qui è che la nuova shell esce subito dopo aver eseguito il comando, quindi aggiungiamo:
  • -c "cd `pwd`; bash" che significa "esegui bash(nuova shell) dopo aver eseguito il cdcomando e la shell bash non si chiude fino a quando non ci disconnettiamo da esso.

1
Questa è in realtà l'unica risposta alla domanda. Buon lavoro!
Cacahuete Frito,

In realtà, su - [user] -c "cd $(pwd); bash"potrebbe essere leggermente migliore (cambiare i backtick in $()).
Cacahuete Frito,

3

Usa sudo :). Seriamente, non hai bisogno di su. 'sudo' è meglio perché lo usi solo per comandi privilegiati e può aiutare a evitare errori. Ottieni anche la responsabilità.


2

Se usi "su" fa una shell interattiva. È lo stesso di "sudo -s". "su -" crea una shell di login, che sovrascriverà l'ambiente. "sudo -i" è l'equivalente di sudo. Se stai cercando di ottenere una shell interattiva, dovresti sempre usare il modulo sudo -i (o su -), oppure è possibile finire con strane autorizzazioni per i file nella home directory di un utente.


0

è necessario modificare l'origine di su per fare questo lavoro. c'è una chiamata chdir in una procedura di inizializzazione delle variabili di ambiente. commentare quelle dichiarazioni incluse quella chiamata. e ora puoi fare "su -" ma mantiene la directory corrente.

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.