sourcing bash profile per utenti root

17

Chiedo scusa in anticipo se questa domanda sta per infastidire tutti, come apprezzo, è stato chiesto in vari modi molte volte in passato. Ti assicuriamo che ho letto gli archivi e ho provato almeno alcuni dei suggerimenti, ma non riesco ancora a risolvere il problema (semplice). Spero che qualcuno possa fornire una risposta e che io possa sentirmi adeguatamente umiliato. Per tua informazione, per evitare ambiguità, userò percorsi assoluti piuttosto che relativi.

Quando accedo, lo faccio come utente adam . Gli alias in /Users/adam/.bash_profile sono caricati e posso usarli immediatamente dopo aver estratto un terminale. Non uso un file .bashrc e va bene.

Ogni tanto, passo al root digitando su nel terminale e poi inserendo la mia password. Il prompt cambia e ora sono utente root. La mia domanda è questa: subito dopo essere diventato root, il mio profilo di root può essere caricato senza che io debba fare manualmente il file del profilo? La ragione per cui so che non accade automaticamente è perché ho gli stessi alias nel mio file di profilo radice e il mio /Users/adam/.bash_profile . Dopo essere diventato utente root, a meno che non digiti source [root_profile_file] , non funzionano. Ho provato a impostare le seguenti permutazioni e quindi passare a root tramite il terminale ma nessuna di esse genera automaticamente il profilo / alias (nota, non ho nessuna delle opzioni di seguito configurate contemporaneamente, quindi non penso di essere m confondendo il sistema):

Opzione 1: inserisci i miei alias in /etc/profile

Opzione 2:

  • in /etc/profile , inserisci [ -r /etc/bashrc ] && . /etc/bashrc
  • inserisci i miei alias in /etc/bashrc

Opzione 3:

  • in /etc/bash_profile , inserisci [ -r /etc/bashrc ] && . /etc/bashrc
  • inserisci i miei alias in /etc/bashrc

Opzione 4: inserisci i miei alias in /var/root/.profile

Opzione 5:

  • in /var/root/.profile , inserisci [ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • inserisci i miei alias in /var/root/.bashrc

Opzione 6:

  • in /var/root/.bash_profile , inserisci [ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • inserisci i miei alias in /var/root/.bashrc

Si noti che, con uno dei precedenti, se si passa a root e si digita source root_profile_file , gli alias vengono caricati, ma solo se provengo effettivamente dal file manualmente. Forse ho completamente frainteso come funziona bash e non è possibile generare automaticamente un file profilo dopo il passaggio a root, ma spero che ci sia una soluzione semplice. Grazie in anticipo a chiunque abbia avuto il tempo di leggere questo messaggio.

    
posta Adam Gold 14.03.2012 - 18:41
fonte

8 risposte

13

Il problema che stai incontrando è che quando esegui su da solo, non stai entrando in una shell di 'login'. Ciò significa che l'ambiente, la directory di lavoro e tutto tranne uid / gid rimangono gli stessi dell'utente originale.

I trigger di accesso non vengono eseguiti e riscontri i problemi che descrivi.

Una soluzione semplice a un semplice problema:

su -

Dalla pagina man di su(1) :

The su command is used to become another user during a login session. Invoked without a username, su defaults to becoming the superuser. The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

Inoltre:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

Se si su in una shell di login, bash si comporterà come ci si aspetta, e genererà automaticamente i file appropriati su "login", senza la necessità di soluzioni alternative troppo pericolose.

    
risposta data 14.03.2012 - 19:33
fonte
9

In realtà gli usi root /bin/sh (vecchia shell di Bourne), .bash_profile e .bashrc vengono letti da bash.

Diventa complicato dato che questi file potrebbero utilizzare funzionalità non disponibili in sh . Anche se tu source .bashrc o source .bash_profile , per esempio avrai ancora qualche problema con le funzioni complesse.

Un modo per risolverlo è eseguire

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

per cambiare la shell di root in bash .

    
risposta data 29.06.2014 - 20:31
fonte
5

Quando devo assolutamente, I sudo bash che mi fa root ma con l'ambiente di JRobert. Il mio .bashrc contiene:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

, per fare in modo che il prompt di root ritorni a me in ROSSO per enfatizzare che ora sono (più) vulnerabile al mio [sceglierne: impudenza, stupidità, tendenze da dita grasse, riluttanza a prendere buoni consigli, fino s.creek - non far cadere la paletta].

    
risposta data 26.03.2012 - 15:23
fonte
3

Sto usando sudo -i per passare all'utente root. In questo caso, la configurazione della shell viene letta da /var/root/.profile .

    
risposta data 19.10.2013 - 12:55
fonte
1

In generale, consiglio contro su dato che è pericoloso, cercalo e sai perché. Nella tua domanda, l'account di root funziona allo stesso modo del tuo account: fonte ~ / .bash_profile e / o ~ / .bashrc. Non so quale, ma il mio intuito si spinge verso ~ / .bashrc , quindi potresti voler provare a mettere lì i tuoi alias. Ecco un suggerimento:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works
    
risposta data 14.03.2012 - 19:28
fonte
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Solo questo funziona! Ho provato a inserire il mio export PS1=... in uno di questi file sopra. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

Da tutti questi file /bin/sh shell, non legge le informazioni! (solo bash) (Mac OS El Capitan). E ho dovuto cambiare shell in bash.

Anche "su -" funziona anche. (con questa shell sta leggendo /var/root/.profile file)

    
risposta data 02.04.2016 - 21:51
fonte
-1

Un modo per risolvere questo è eseguire quanto segue per cambiare la shell di root in bash:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

Questa soluzione ha risolto anche il mio problema.

    
risposta data 20.07.2015 - 09:41
fonte
-2

se hai un solo utente "predefinito" e l'utente root puoi mettere alias su="su -" su .bash_profile dell'utente "predefinito" e ottieni l'effetto desiderato. Funziona e senza cose hacky.

    
risposta data 20.09.2014 - 06:52
fonte

Leggi altre domande sui tag