ユーザーシェルをインストールjailkit
して設定しましたが、呼び出されると代わりに実行されます。Ubuntu 12.04
/bin/bash
/etc/bash.bashrc
/etc/profile
以前に使用したことがない場合は、jailkit
ポイントは次のとおりです。
- システムルートの「jail」バージョンは、/home/jailのようなどこかに作成されます。
- 刑務所に閉じ込められたユーザーのホームディレクトリは、このフォルダ内に移動されます(例:/home/jail/home/testuser)。
- 制限された /etc/passwd を含む関連する構成ファイルが /home/jail/etc/ にコピーされます。
- /bin/bash などの適切なディレクトリへのアクセスを許可するプログラムをコピーします。
- 刑務所に閉じ込められたユーザーがログインすると、/etc/jail/としてルートが指定され、そのファイルを表示できません。
だから、次の項目を持つ人がいます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)
運がありませんでした。
ベストアンサー1
通常、bashはログインプログラムがそれを呼び出すとbashに名前を付けるので、これはログインシェルであることを知っています-bash
。名前は、argv[0]
ユーザーがプログラムを呼び出す従来の方法である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
ログインシェルを呼び出す簡単な方法があることを望みました。機能リクエストを送信することをお勧めします。