デフォルトのPATHを設定するファイル

デフォルトのPATHを設定するファイル

設定ファイルについて混乱しています。デフォルト PATHLinux(特にDebian)で。 (私は~(、およびその他).profileのユーザー固有の項目には興味がありませんxsessionrc。)

これまで私は一般的な容疑者を除外してきましたが、ログインするたびにデフォルトはまだ「/local/games」に設定されており、結果は出ませ/etc/{environment,bash.bashrc,login.defs,profile,crontab,security/pam_env.conf,default/locale,default/cron,pam.d/sshd,pam.d/cron}/usr/sbin/sshdPATHバイナリのどこかにハードコードされているようです。私はそれを使用しています/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games/etcbash

ベストアンサー1

簡単に言えば、経験則基準ユーザー、Debian 11

  1. /etc/profile、信頼できるPATHを設定します。
  2. /etc/environmentまたは/etc/default/locale;
  3. /usr/local/bin:/usr/bin:/bin:/usr/games(GDM、XDM...またはOpenSSHの場合)
  4. /etc/login.defs'ENV_PATHオプション(コンソールの場合);
  5. getconf PATH- またはそれに対応するCで置き換えます(コンソールの場合)。

GDM、XDM...またはOpenSSHの場合意味:セッションがグラフィックデスクトップまたはSSHの場合。

コンソールの場合意味:セッションがコンソールの場合、つまりグラフィックデスクトップまたはSSHではない場合(下記参照)

これは環境suには適していません。sudo

以下では、ユーザーが各テスト間でログアウト/ログインしているとします。


テスト設定

  • VERSION="11 (bullseye)"
  • ディスプレイマネージャ:GDM3
  • デスクトップ:小人、ターミナル:GNOME端末、シェル:強く打つ

ユーザーの~/.bashrc、およびを~/.bash_profile削除した後、コマンドは次を返します。この文字列を検索するとファイルが表示されます。~/.bash_login~/.profileprintenv PATH/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games/etc/etc/profile

ステップ1:変更/etc/profileと仕組みを確認する

/etc/profile4-9行(パス操作部分)をコメントアウトした後、printenv PATH次のように言います/usr/local/bin:/usr/bin:/bin:/usr/games。 PATH がないことは、/usr/local/games操作がシステムに影響を与えたことを示します。

次のステップ:/usr/games可能であれば文字列を探す

状況が少し難しくなるため、ソースパッケージxdm、、、、、をインストールする必要があります。次に、検索結果のうち3つ(、、)がファイルに特定の種類が設定されていることが表示されます。gdm3lightdmopenssh/usr/gamesxdmgdm3opensshdefault_pathdebian/rules

Gdm3のコードでは、次の場合にこの値が使用されることを指定します。pam_getenv(3)PATH 値は返されません。

lightdm ケース:

これは、debian/patches/01_set-default-path.patch(コンパイルパラメータの代わりに)ソースコードにパスをハードコードするファイルがあるという点で若干異なります。

警告する: Debian 管理者が使用します。まったく同じPATHシーケンス比較する/etc/profile/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games)。この場合、コードに注釈を付けて変更を認識するのが難しくなります。

次のステップ:/etc/pam.dポリシーを見る

このファイルが/etc/pam.d/gdm-launch-environment良い候補のようです。両方のファイルで提供されます。

  • /etc/environment;
  • /etc/default/locale(ここにPATH文を入れてはいけません^^)。

簡単に言えば、すべての可能な動作を確認するわけではありませんが、GDMとOpenSSHは同じように動作するため、これがDebian方式であると確信できます。

  • もし /etc/profilePATHが設定されていません。
    • もしPATH=/somepath項目を設定しました。/etc/environment
      • この項目を適用し、
    • その他
      • コンパイルされた代替の使用(/usr/local/bin:/usr/bin:/bin:/usr/games
もう少し離れて

したがって、OpenSSHとDMは空のPATH変数を上書きしますが、コンソールではそれを使用しません。/etc/profilePATHセクションがコメントアウトされ、ファイル/etc/environmentが空の場合(デフォルトの状態)、3番目のPATH値である/etc/login.defsENV_PATHオプションが使用されます。

/etc/login.defs103行をコメントアウトすると、次のような結果が得られます。

$ grep -nE '^#?ENV_(SU)?PATH' /etc/login.defs 
102:ENV_SUPATH  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
103:#ENV_PATH   PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

その後、コンソールにログインできます(シリアルとTTYしなければならない同じように動作します)printenv PATHもう一度プレイしてください。今回は次のように表示する必要があります/bin:/usr/bin。これはgetconf PATH私のシステムの値と同じで、床に達したようです。

その他(おそらく)興味深い点

OpenSSHとグラフィック表示セッションは残り環境変数の継承(cf環境(7))。

おすすめ記事