sudo suの後にLS_COLORSを維持する方法

sudo suの後にLS_COLORSを維持する方法

私のコンピュータにユーザー名を作成し、そのユーザー名をsudoersファイルに追加してrootアクセス権を取得しました。

私の.bashrcファイルには、PS1の色とlsコマンドの色を変更するスクリプトも含まれています。

export PS1="\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] "
export LS_COLORS="di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31:mi=0:ex=35:*.rpm=90"

スクリプトが終了したら、コマンドを使用してsudo suログイン時に直接root権限を取得することもできます。

問題は、PS1が持続し、その後色が変わりますが、sudo sulsコマンドはデフォルトコマンドのままです。この問題をどのように解決できますか?

答え1

sudo -l現在有効なオプションを確認するには、一般ユーザーとして実行してください。

  • 出力にはenv_reset?その場合、ナビゲーション中に安全で必要な環境変数の一部のみが保存されますsudo。ファイル内env_checkおよび/またはenv_keepキーワードを使用して、sudoers通過できる項目を指定できますsudo

  • 出力にはalways_set_home?その場合、$HOME環境変数はターゲットユーザーのホームディレクトリを指します/root。したがって、結果シェルはプライベートシェルの代わりに実行され、同様に、すべてのプログラムはプライベート/root/.bashrcホームディレクトリではなくディレクトリ内のユーザー固有の設定ファイルを検索します。/root/

自分のsudo -sルートの代わりにルートを使用すると、動作する可能性が高くなります(または厳密なPAMモジュールなどを備えた奇妙なディストリビューションがあります)。この場合、sudoersファイルを編集して次の行のいずれかを追加します(オプション名の前の感嘆符は「no」を意味します)。.bashrcalways_set_homevisudo

  • Defaults !always_set_homeすべてのユーザーのオプションをオフにします。
  • Defaults>root !always_set_home元のユーザーに関係なく、ルートへのすべてのトランジションの設定を解除します。
  • Defaults:johndoe !always_set_homejohndoe元のユーザーのみを含む変換するには、設定を解除してください。

Defaults順序が重要です。最後の設定が優先されるため、ファイルに既存の行がある場合は、sudoersその後にカスタム設定を追加する必要があります。


su後で接続すると、通常はsudo構成できない独自のルールが適用されます。動作(および可用性)は、Linuxディストリビューションとバージョンによってsu -p異なります。su -m

sudo su通常のユーザーからrootに切り替えてから再びrootからrootに切り替えて、細かく調整された個人設定をほとんど効果なく壊す可能性を最大化するという意味です。好みとLinuxディストリビューションの選択に応じて、sudo -sファイル内のいくつかのオプションを調整したり、直接Defaults同じ目標を達成したりできます。sudoers

sudo su -、一方役に立たないつまり、「ターゲットユーザー(ルートなど)が直接ログインしたように、環境を明示的に望んでいます。バージョンがある場合は、個人環境の痕跡を残したくありません。sudosudo -iできます。

2010年代には筋肉記憶を使用したりsudo susudo su -古いアドバイスに従ったり、本当に古いシステムを取り上げました。おそらく、これらの2つのコマンドを忘れる必要があります。

答え2

sudo su -p一部の例外を除いて、呼び出し側ユーザーの環境は保持されます。以下では例外があるかもしれません。suマニュアルページしかし、関連する部分は次のとおりです。

   -m, -p, --preserve-environment
          Preserve the entire environment, i.e. it does not set HOME,
          SHELL, USER nor LOGNAME.  This option is ignored if the option
          --login is specified.

関連情報