sourcing del profilo bash per utenti root


17

Mi scuso in anticipo se questa domanda infastidirà tutti quanti, come apprezzo, è stata posta in vari modi molte volte prima. Ti assicuriamo che ho letto gli archivi e ho provato almeno alcuni dei suggerimenti ma non riesco ancora a risolvere il (semplice) problema. Spero che qualcuno possa fornire una risposta e mi sento adeguatamente umiliato. Cordiali saluti, per evitare qualsiasi ambiguità, userò percorsi assoluti piuttosto che relativi.

Quando eseguo l'accesso, lo faccio come utente adam. Gli alias /Users/adam/.bash_profilesono caricati e posso usarli immediatamente dopo aver tirato su un terminale. Non uso un .bashrcfile e va bene.

Ogni tanto passo al root digitando sunel terminale e inserendo la mia password. Il prompt cambia e ora sono utente root. La mia domanda è questa: immediatamente dopo essere diventato root, il mio profilo bash root può essere caricato senza che io debba sorgente manualmente il file del profilo? Il motivo per cui so che non accade automaticamente è perché ho gli stessi alias nel mio file di profilo di root e nel mio /Users/adam/.bash_profile. Dopo essere diventato utente root, a meno che non scrivo source [root_profile_file], non funzionano. Ho provato a configurare 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 impostate contemporaneamente, quindi non penso di ' confondere il sistema):

Opzione 1: inserisci i miei alias/etc/profile

Opzione 2:

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

Opzione 3:

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

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

Opzione 5:

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

Opzione 6:

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

Si noti, con uno dei precedenti, se passo a root e quindi source root_profile_filedigito, gli alias vengono caricati, ma solo se effettivamente eseguo il sorgente del file manualmente. Forse ho completamente frainteso il modo in cui bash funziona e non è possibile originare automaticamente un file di profilo dopo essere passati a root, ma spero che ci sia una soluzione semplice. Grazie in anticipo a chiunque abbia avuto il tempo di leggere questo messaggio.

Risposte:


14

Il problema che stai riscontrando è che quando corri suda solo, non stai entrando in una shell 'login'. Ciò significa che il tuo ambiente, la directory di lavoro e tutto, tranne uid / gid, rimangono gli stessi dell'utente originale.

I trigger di accesso non vengono eseguiti e si verificano i problemi descritti.

Una soluzione semplice per un semplice problema:

su -

Dalla su(1)pagina man:

Il comando su viene utilizzato per diventare un altro utente durante una sessione di accesso. Richiamato senza un nome utente, per impostazione predefinita su diventa il superutente. L'argomento facoltativo - può essere utilizzato per fornire un ambiente simile a quello che l'utente si aspetterebbe se l'utente avesse effettuato l'accesso direttamente.

Anche:

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

Se suentri in una shell di accesso, bash si comporterà come previsto e procurerà automaticamente i file appropriati su "login", senza la necessità di soluzioni eccessivamente complicate.


1
Ciononostante, secondo le note di Hai Vu: Davvero, davvero, davvero non dovresti mai sulavorare root. Esiste sudoa tale scopo, oppure puoi lavorare in modo tale da non richiedere affatto i privilegi di root.
Jason Salaz,

Grazie a te e @Hai Vu. "su -" fa il trucco e sì, completamente compreso, il root dovrebbe essere generalmente evitato.
Adam Gold

1
Sapevo già di aggiungere '-' dopo il comando su, ma non ottenevo ancora il mio .bash_profile per l'utente root. La risposta di Florian Bidabe e Patrix di seguito sul cambio della shell root da sh a bash ha risolto il problema per me.
JaredC,

9

In realtà root usa /bin/sh(vecchia bourne shell) .bash_profilee .bashrcviene letto da bash.

Diventa complicato poiché quei file possono usare funzionalità non disponibili in sh. Anche se tu source .bashrco source .bash_profile, avrai comunque qualche problema con funzioni complesse per esempio.

Un modo per risolverlo è eseguire

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

per passare alla rootshell bash.


Il root /bin/shusa il /var/root/.profilefile. Ringraziamo la risposta
Petr Újezdský,

6

Quando devo assolutamente, sudo bashciò che mi rende 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 farmi dare di nuovo il bagliore di root in ROSSO per sottolineare che ora sono (più) vulnerabile alla mia [scegline uno: volgarità, stupidità, tendenza alle dita grasse, riluttanza a prendere un buon consiglio, su creek - non far cadere la paletta].


3

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


1

In generale, sconsiglio superché è pericoloso, basta cercarlo e sai perché. Alla tua domanda, l'account root funziona allo stesso modo del tuo account: fonte ~ / .bash_profile e / o ~ / .bashrc. Non so quale, ma la mia intuizione si inclina 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

0

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

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

Inoltre "su -"funziona anche. (con questa shell sta leggendo il /var/root/.profilefile)


1
Non è necessario riconfermare le risposte esistenti ...
nohillside

-1

Un modo per risolverlo è eseguire quanto segue per cambiare la shell di root su bash:

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

Questa soluzione ha anche risolto il mio problema.


-2

se hai un solo utente "predefinito" e l'utente root puoi inserire alias su="su -".bash_profile dell'utente "predefinito" e ottieni l'effetto che desideri. Funziona e senza cose confuse.

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.