設定ファイルについて混乱しています。デフォルト PATH
Linux(特に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/sshd
。PATH
バイナリのどこかにハードコードされているようです。私はそれを使用しています/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
/etc
bash
ベストアンサー1
簡単に言えば、経験則基準ユーザー、Debian 11
/etc/profile
、信頼できるPATHを設定します。/etc/environment
または/etc/default/locale
;/usr/local/bin:/usr/bin:/bin:/usr/games
(GDM、XDM...またはOpenSSHの場合)/etc/login.defs
'ENV_PATH
オプション(コンソールの場合);getconf PATH
- またはそれに対応するCで置き換えます(コンソールの場合)。
GDM、XDM...またはOpenSSHの場合意味:セッションがグラフィックデスクトップまたはSSHの場合。
コンソールの場合意味:セッションがコンソールの場合、つまりグラフィックデスクトップまたはSSHではない場合(下記参照)
これは環境su
には適していません。sudo
以下では、ユーザーが各テスト間でログアウト/ログインしているとします。
テスト設定
VERSION="11 (bullseye)"
- ディスプレイマネージャ:GDM3
- デスクトップ:小人、ターミナル:GNOME端末、シェル:強く打つ
ユーザーの~/.bashrc
、およびを~/.bash_profile
削除した後、コマンドは次を返します。この文字列を検索するとファイルが表示されます。~/.bash_login
~/.profile
printenv PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
/etc
/etc/profile
ステップ1:変更/etc/profile
と仕組みを確認する
/etc/profile
4-9行(パス操作部分)をコメントアウトした後、printenv PATH
次のように言います/usr/local/bin:/usr/bin:/bin:/usr/games
。 PATH がないことは、/usr/local/games
操作がシステムに影響を与えたことを示します。
次のステップ:/usr/games
可能であれば文字列を探す
状況が少し難しくなるため、ソースパッケージxdm
、、、、、をインストールする必要があります。次に、検索結果のうち3つ(、、)がファイルに特定の種類が設定されていることが表示されます。gdm3
lightdm
openssh
/usr/games
xdm
gdm3
openssh
default_path
debian/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/profile
PATHが設定されていません。- もし
PATH=/somepath
項目を設定しました。/etc/environment
- この項目を適用し、
- その他
- コンパイルされた代替の使用(
/usr/local/bin:/usr/bin:/bin:/usr/games
)
- コンパイルされた代替の使用(
- もし
もう少し離れて
したがって、OpenSSHとDMは空のPATH
変数を上書きしますが、コンソールではそれを使用しません。/etc/profile
PATHセクションがコメントアウトされ、ファイル/etc/environment
が空の場合(デフォルトの状態)、3番目のPATH値である/etc/login.defs
ENV_PATHオプションが使用されます。
/etc/login.defs
103行をコメントアウトすると、次のような結果が得られます。
$ 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))。