GNU/Linux >> Linux の 問題 >  >> Linux

Bashは、どのように呼び出されているかをどのように知っていますか?

jailkitをインストールしました Ubuntu 12.04で ユーザーのシェルを/bin/bashに設定しました –ただし、呼び出されると、/etc/bash.bashrcが実行されます。 /etc/profileの代わりに

jailkitを使用したことがない場合 その要点は次のとおりです:

  1. システムルートの「jailed」バージョンは、/ home/jailのようにどこかに作成されます
  2. 投獄されたユーザーのホームディレクトリは、/ home / jail / home/testuserのようにそのフォルダ内に移動されます
  3. 関連する構成ファイルは/home/ jail / etc /にコピーされます–限定された/ etc/passwdを含みます
  4. アクセスを許可するプログラムは、
    / bin / bash
  5. などの対応するディレクトリにコピーされます。
  6. 投獄されたユーザーがログインすると、/ etc / jail /にchrootされ、それより上のファイルは表示されません

だから私はtestuserを持っています /etc/passwdにエントリがある人 このように:

testuser:x:1002:1003::/home/jail/./home/testuser:/usr/sbin/jk_chrootsh

ファイル/home/jail/etc/passwd 次のようなエントリがあります:

testuser:1001:1003::/home/testuser:/bin/bash

bash(1)を読みました したがって、問題は、bashがログインシェルとして呼び出されていないと見なしていることだと思います。

bashが対話型ログインシェルとして、または–loginオプションを使用して非対話型シェルとして呼び出されると、最初にファイルからコマンドを読み取って実行します。
/ etc / profile(ファイルが存在する場合)。

そのbashを取得します 実際には/usr/sbin/jk_chrootshによって呼び出されています しかし、bashの方法がわかりません シェルの種類と、実行するスタートアップファイルのセットを決定しています。

これをトラブルシューティングできるかどうかを確認したいのですが、わかりません:

bashはどのように呼び出されているかを知るのですか?

ps:login(1)も調べました 運が悪かった。

承認された回答:

通常、bashは、ログインプログラムがそれを呼び出すと、その名前が-bashであることをbashに通知するため、それがログインシェルであることを認識します。 。その名前はargv[0]にあります 、ゼロ番目のコマンドライン引数。これは通常、ユーザーがプログラムを呼び出す方法です。最初のハイフンは、ログインシェルであることをシェルに通知するための規則です。オプション--loginを渡すと、Bashはログインシェルとしても動作します。 または-l 。ログインシェルと非ログインシェルの違いを参照してください。詳細については。

Jailkit 2.16以降、jk_chrootsh シェルへの絶対パスを読み取り、さまざまなソースから呼び出し、このパスをargv[0]として渡します 、および独自のコマンドライン引数をそのシェルに渡します。 jk_chrootshの通常のユースケース それ自体が/etc/passwdで使用されます 、-lなどの引数を渡す方法はありません 。絶対パスは-で始まらないため 、jk_chrootshを作成する方法はありません 小さな中間プログラムを使用する以外に、ログインシェルを呼び出します。

#include <unistd.h>
int main () {
    execl("/bin/bash", "-bash", NULL);
    return 127;
}

jk_chrootshを期待していました ログインシェルを呼び出す簡単な方法があります。機能をリクエストすることをお勧めします。

関連:「exec {fd} / watchdog」はBashで何をしますか?
Linux
  1. Bashでプログラミングする方法:構文とツール

  2. シェルスクリプトBashでサブストリングをチェックする方法は?

  3. Bashシェルスクリプトで改行をエコーする方法

  1. CentOS / RHEL :BASH シェルの履歴を無効にする方法

  2. ネストされたシェルを実行しているかどうかを確認するにはどうすればよいですか?

  3. ファイルを bash シェル スクリプトに含める方法

  1. .bashrcの目的とそれはどのように機能しますか?

  2. 方法:無制限の Bash/シェル履歴?

  3. bash シェルでファイルのセクションを grep する方法