bashの初期化メカニズムの詳細な説明

bashの初期化メカニズムの詳細な説明

Bash 初期化ファイル

対話型ログインシェル

次の場合にはログイン シェルを取得できます。

  • ローカル端末またはネットワーク経由の ssh を介してシステムにログインしたときに取得する最上位シェル。この場合に取得されるログイン シェルは対話型シェルです。
  • 対話型ログイン シェルを取得するには、ターミナルで --login オプションを指定して bash を起動します。
  • スクリプト内で --login オプションを指定して bash を呼び出すと (例: #!/bin/bash --login)、非対話型のログイン シェルが生成されます。
  • su - を使用して指定されたユーザーに切り替えると、そのユーザーのログイン シェルが取得されます。 - がない場合、非ログインシェルになります。

ログイン シェルが起動すると、まずシステムのグローバル構成 /etc/profile を読み取り、次に 3 つの構成ファイル ~/.bash_profile、~/.bash_login、~/.profile を順番に検索し、最初に見つかった読み取り可能なファイルを読み取ります。

ログイン シェルが終了すると、~/.bash_logout 内のコマンドを読み取って実行します。 設定ファイルが存在するが読み取り不可能な場合は、エラー メッセージが表示されます。ファイルが存在しない場合は、bash は自動的に次のファイルを検索します。

デフォルトでは、PATH、USER、MAIL、HOSTNAME、HISTSIZE などのグローバル環境変数は、/etc/profile ファイルで定義されます。/etc/bash.bashrc ファイル (システム レベルのシェル関数とエイリアスを含む) と、特定のプログラムを初期化するために使用される /etc/profile.d パス内のすべての *.sh ファイルも自動的にインポートされます。

対話型非ログインシェル

非ログイン シェルとは、システムの起動時にシステムに対して認証する必要がないことを意味します。 GUI でユーザーが開いたターミナルは、デフォルトでは非ログイン シェルであり、logout コマンドで判別できます。

# Ubuntu GUIデスクトップでターミナルを開く > ログアウト
bash: ログアウト: ログインしないシェル: `exit' を使用する
> bash --ログイン
> logout # 通常通りログアウトすると何も出力されません

非ログインシェルは初期化時に ~/.bashrc リソースファイルのみを読み取り、~/.bashrc ファイルは ~/.bash_profile または ~/.profile によって自動的にロードされます。そのため、ログインシェルと対話型非ログインシェルが同じ構成になるように、環境変数は通常 ~/.bashrc ファイルで定義されます。

> echo "export sflag=\"ログインシェルはこのメッセージを表示します\"" >> ~/.profile  
> バッシュ 
> $sflagをエコーする 
          # 変数が見つからない場合は、空白行が出力されます> exit 
> bash --ログイン 
> $sflagをエコーする 
ログインシェルはこのメッセージを見るでしょう 
> ログアウト

非対話型シェル

スクリプトが bash コマンドを通じて実行されると、シェルは非対話形式で起動され、実行中にユーザーがスクリプトに干渉することがなくなります。非対話型スクリプトが開始されると、BASH_ENV 変数によって指定されたファイルのみがロードされます。ただし、PATH 変数はデフォルトでは非対話型シェルによってロードされないため、変数 BASH_ENV の値は絶対パスにする必要があることに注意してください。

現在のシェル モードは、特殊変数 - を通じて確認できます。

> エコー$-
himBHs # 'i' は対話型シェルです

もう 1 つの簡単な方法は、プロンプト環境変数 PS1 が現在のシェルに存在するかどうかを確認することです。

if [ -z "$PS1" ]; then echo "非対話型";else echo "対話型";fi

特別な事情

互換モード

sh コマンドを使用して bash を呼び出すと、互換性を確保するために bash は sh と同じ方法で初期化されます。ログイン シェルとして起動されると、bash は /etc/profile と ~/.profile 構成ファイルをその順序で読み取ります。非ログイン シェルとして起動すると、bash は ENV 環境変数によって指定されたファイルのみを読み取ります。

POSIX モード

bash を起動する場合:

  1. set -o posixか、 export POSIXLY_CORRECT=1
  2. bash --posix

Bash は POSIX 標準に従って初期化を試み、環境変数 ENV によって指定されたファイルのみを読み取ります。

リモート起動スクリプト

rshd を使用してスクリプトをリモートで起動する場合、~/.bashrc ファイルのみがロードされます。ただし、rlogin、telnet、rsh、rcp などのリモート コマンドは暗号化されていないプレーン テキスト情報を送信するため、使用しないようにしてください。リモート アクセスが必要な場合は、SSH を使用してください。

UIDとEUIDが一致しません

プロセスが作成されると、プロセスの実行に必要な情報が task_struct に記録されます。 UID (実ユーザー ID) はプロセスを作成したユーザーの ID を記録するために使用され、EUID (実効ユーザー ID) はファイルに対する現在のプロセスのアクセス レベルを決定するために使用されます。一般的に、UID = EUID です。実行可能ファイルの set-user-ID: SUID ビットが有効な場合 (例: -rwsr-xr-x、ユーザーの x が s に置き換えられます)、ファイルが実行されるときに、プロセスには実行者ではなくファイル所有者の権限が付与されます (EUID の値はファイル所有者の ID です)。

bash 実行ファイルに set-user-id フラグを設定すると、デフォルトの所有者は root になるため、他の非 root ユーザーが bash を実行すると、プロセスの UID は EUID と等しくなくなります。この場合、セキュリティを確保するために、bash は初期化フェーズ中にファイルを読み込みません。

制限されたシェル

rbash または bash --restricted または bash -r 経由で起動すると、次のように機能が制限されたシェルが生成されます。

  • cdコマンドは使用できません。また、コマンドに/を含めることはできません。
  • SHELL、PATH、ENV、BASH_ENV環境変数は変更できません
  • ソースコマンドパラメータには、/ を含むファイルを含めることはできません。
  • パスのエイリアスに使用するコマンドのパラメータには / を含めることはできません
  • ファイル内の関数は初期化中にインポートされず、SHELLOPTS は無視されます。
  • リダイレクトは使用できません
  • execコマンドを使用できません
  • enable -f/-d を使用してコマンドを追加または削除することはできません
  • コマンド -p を使用して、コマンドの実行に必要なパスを指定することはできません。
  • 制限モードを自動的にオフにすることはできません

理論的には、この機能により、ユーザーは指定されたフォルダ内の指定されたファイルを実行して、制限された機能を完了できます。ただし、環境変数が適切に設定されていない場合、ユーザーは簡単に制限を解除できます。

> rbash
> cd /etc
rbash: cd: 制限あり
> バッシュ
> cd /etc # bash 環境であり制限がないため、これを正常に実行できます。

効果的なアプローチは、新しく作成されたユーザーが実行できるコマンドを制限することです。たとえば、ftp コマンドのみを実行できる ruser を作成できます。

> useradd -s /bin/rbash ruser # ユーザーがログインするときに提供されるシェルを設定します
> chown -R root:ruser /home/ruse​​r/.bashrc /home/ruse​​r/.bash_profile
# 所有者として root を設定し、グループ所有者として ruser グループを設定します (新しい ruser はデフォルトで ruser グループとして入力されます)
>chmod 640 /home/ruse​​r/.bashrc /home/ruse​​r/.bash_profile
# root は読み取りと書き込みが可能、ruser グループのユーザーは読み取りのみ可能、他のユーザーは何もできません> mkdir /home/ruse​​r/bin # ユーザー実行ファイルまたはリンクを保存します> echo "export PATH=/home/ruse​​r/bin" >> /home/ruse​​r/.bash_profile
> ln -s /user/bin/ftp /home/ruse​​r/bin/ftp

bash の初期化メカニズムの詳細な説明については、これで終わりです。より関連性の高い bash 初期化コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • bash のスクリプトデバッグメカニズムの詳細な説明
  • Linux bash: ./xxx: バイナリ ファイルを実行できません エラー
  • bash を使って日付をカウントダウンする方法
  • Bashスクリプトを使用すると、シェルにログインするたびにLinuxシステム情報を表示できます。
  • 解決策 - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 権限が不十分です
  • Python3でLinux Bashコマンドを実行する方法
  • bash スクリプトで ssh/scp コマンドにパスワードを渡す方法の詳細な説明
  • Bash スクリプトでの配列メソッドの作成と使用の概要
  • bashコマンドの使い方の詳細な説明

<<:  vue構成ファイルはルーティングとメニューインスタンスコードを自動的に生成します

>>:  MySQLデータベースはMMM高可用性クラスタアーキテクチャを実装します

推薦する

Node+Express テストサーバーのパフォーマンス

目次1 テスト環境1.1 サーバーハードウェア1.1.1 t2.マイクロ1.1.2 c5.large...

docker-compose が遅すぎる場合の解決策の詳細な説明

解決策はただ一つ、ソースを変更することです。 github からのソースは基本的にタイムアウトするの...

IEの送信フォームの記録履歴クリックリターン情報を実現するためのCSSスタイルコントロールはまだ残っています

これは主に CSS スタイルのコントロールと META タグです。コードをコピーコードは次のとおりで...

MySQL SQL ステートメント分析とクエリ最適化の詳細な説明

パフォーマンスの問題のあるSQL文を取得する方法1. ユーザーからのフィードバックを通じてパフォーマ...

MySQL 5.7.18 インストーラーのインストール ダウンロード グラフィック チュートリアル

この記事では、MySQL 5.7.18インストーラーの詳細なインストールチュートリアルを参考までに記...

テーブルの追加と削除の操作を実装する js

この記事の例では、テーブルを追加および削除するためのjsの具体的なコードを参考までに共有しています。...

iframeノードの初期化の問題に関する議論

今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...

Mysqlトランザクション操作の失敗を解決する方法

Mysqlトランザクション操作の失敗を解決する方法トランザクションの原子性: トランザクションは、デ...

TypeScriptにおけるunknownとanyの違いについて詳しく説明します

目次序文1. 不明 vs 任意2. 未知とあらゆるもののメンタルモデル3. まとめ要約する序文any...

SecureCRT に基づくリモート Linux ホストへのファイルのアップロードとダウンロードのグラフィカルな手順

wget や curl ツールを使用して、Linux サーバーで大規模なネットワーク ファイルを直接...

Linux で特定の時間にコマンドを実行する方法

先日、rsync を使用して LAN 上の別のシステムに大きなファイルを転送していました。非常に大き...

MySQL データベースでよく使用される SQL ステートメントの詳細と概要

この記事では、MySQL データベースでよく使用される SQL ステートメントを例を使用して説明しま...

webpackが静的リソースキャッシュを実装する方法

目次導入複数の異なるハッシュを区別するハッシュチャンクハッシュコンテンツハッシュjs キャッシュの実...

フレックスとポジションの互換性の詳細な説明マイニングノート

今日は、すべてのブラウザ (主に IE 9 以上と Chrome) と互換性のある自分のホームページ...

Linux (Ubuntu) での MySQL 5.6.28 のインストールと設定のチュートリアル

mysql5.6.28のインストールと設定方法1. 基本的なシステム情報を確認し、yumでインストー...