rootユーザー用のbashプロファイルの調達


17

私が感謝しているように、この質問がすべての人の地獄を悩ませるのであれば、事前におApび申し上げます。アーカイブを読んで、少なくともいくつかの提案を試みましたが、それでも(単純な)問題を解決することはできません。誰かが答えを提供できて、適切に謙虚に感じられることを願っています。参考までに、あいまいさを避けるために、相対パスではなく絶対パスを使用します。

ログインするときは、ユーザーとしてログインしますadam。のエイリアス/Users/adam/.bash_profileが読み込まれ、ターミナルをプルアップするとすぐに使用できます。私は.bashrcファイルを使用せず、それで問題ありません。

時々su、端末に入力してからパスワードを入力することでルートに切り替えます。プロンプトが変わり、私は現在rootユーザーです。私の質問はこれです:ルートになるとすぐに、プロファイルファイルを手動でソースする必要なく、ルートbashプロファイルをロードできますか?自動的に発生しないことがわかっている理由は、ルートプロファイルファイルとに同じエイリアスがあるため/Users/adam/.bash_profileです。rootユーザーになった後、を入力しない限りsource [root_profile_file]、機能しません。私は次の順列を設定してから、ターミナルを介してルートに切り替えましたが、プロファイル/エイリアスを自動的にソースするものはありません(注、以下のオプションは同時に設定されていないので、私は思いませんmシステムを混乱させる):

オプション1:エイリアスを入れる/etc/profile

オプション2:

  • /etc/profile、挿入[ -r /etc/bashrc ] && . /etc/bashrc
  • エイリアスを入れる /etc/bashrc

オプション3:

  • /etc/bash_profile、挿入[ -r /etc/bashrc ] && . /etc/bashrc
  • エイリアスを入れる /etc/bashrc

オプション4: エイリアスを配置する/var/root/.profile

オプション5:

  • /var/root/.profile、挿入[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • エイリアスを入れる /var/root/.bashrc

オプション6:

  • /var/root/.bash_profile、挿入[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • エイリアスを入れる /var/root/.bashrc

上記のいずれかで、ルートに切り替えてからsource root_profile_fileエイリアスを入力すると、ロードされますが、実際に手動でファイルをソースする場合にのみ注意してください。おそらく、bashの仕組みを完全に誤解しており、ルートに切り替えた後にプロファイルファイルを自動的に取得することはできませんが、簡単な解決策があることを望んでいます。このメッセージを読むのに時間を割いてくれたすべての人に前もって感謝します。

回答:


14

あなたが直面している問題は、自分で実行suしたときに、「ログイン」シェルに入っていないことです。これは、環境、作業ディレクトリ、およびuid / gid以外のすべてが元のユーザーと同じままであることを意味します。

ログイントリガーは実行されず、説明した問題が発生します。

簡単な問題の簡単な解決策:

su -

su(1)manページから:

suコマンドは、ログインセッション中に別のユーザになるために使用されます。ユーザー名なしで呼び出された場合、suはデフォルトでスーパーユーザーになります。オプションの引数-は、ユーザーが直接ログインした場合にユーザーが期待するものと同様の環境を提供するために使用できます。

また:

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

あなたの場合はsuログインシェルに、bashが過度にハックの回避策を必要とせずに、あなたが期待するように動作し、自動的に「ログイン」で、適切なファイルをソースします。


1
しかし私は、第二海ヴのメモは以下となります。あなたは本当に、本当に、本当にいけsuとして動作していないもroot。そのsudoためにあります。または、root権限をまったく必要としないような方法で作業できます。
ジェイソンサラズ

あなたと@Hai Vuの両方に感謝します。「su-」はトリックを実行します。はい、完全に理解されているので、ルートは一般に避ける必要があります。
アダムゴールド

1
suコマンドの後に '-'を追加することは既に知っていましたが、ルートユーザーの.bash_profileを取得していませんでした。ルートシェルをshからbashに変更することについてのFlorian Bidabeとpatrixの以下の答えは、私のために問題を修正しました。
JaredC 14

9

実際には、ルートの用途/bin/sh(旧Bourneシェル)、.bash_profileおよびは、.bashrcbashので読み込まれます。

これらのファイルはで利用できない機能を使用する可能性があるため、注意が必要ですshsource .bashrcまたはの場合でもsource .bash_profile、たとえば複雑な機能に関する問題が引き続き発生します。

これを解決する1つの方法は、実行することです

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

切り替えることrootにのシェルをbash


ルートの/bin/sh使用/var/root/.profileファイル。
@Matic

5

絶対に必要なときは、私sudo bashはJRobertの環境に根ざします。私の.bashrcに含まれるもの:

# 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

、REDでルートプロンプトのグレアを私に戻して、自分自身に対して(より)脆弱になっていることを強調する[1つを選んでください。 -パドルを落とさないでください。


3

sudo -irootユーザーに切り替えるために使用しています。この場合、シェル構成はから読み取られ/var/root/.profileます。


1

一般的に、私suはそれが危険であるので、それを検索して、理由を知っています。あなたの質問について、ルートアカウントはあなたのアカウントと同じように動作します:〜/ .bash_profileおよび/または〜/ .bashrcをソースします。どちらかはわかりませんが、私の直感は〜/ .bashrcに傾いているので、エイリアスをそこに置いてみてください。提案は次のとおりです。

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 これだけが機能します!export PS1=...上記のすべてのファイルのいずれかに配置しようとしました。/ etc / profile、/ etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile

これらのすべてのファイル/bin/shシェルから、情報を読み取りません!(bashのみ)(Mac OS El Capitan)。そして、シェルをbashに変更する必要がありました。

また、"su -"動作します。(このシェルでは/var/root/.profileファイルを読み込んでいます)


1
既存の答えを再確認する必要はありません...
nohillsideの

-1

これを解決する1つの方法は、以下を実行してルートのシェルをbashに切り替えることです。

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

このソリューションは私の問題も修正しました。


-2

「デフォルト」ユーザーとルートユーザーが1人しかいない場合alias su="su -"は、「デフォルト」ユーザーの.bash_profileを使用して、必要な効果を得ることができます。動作し、ハッキングのないもの。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.