
ユーザーシェルをインストール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
ログインシェルを呼び出す簡単な方法があることを望みました。機能リクエストを送信することをお勧めします。
答え2
login
argv[0]
で始まるユーザーのログインコマンド/シェルを呼び出します-
。シェルはこれを調べて、argv[0]
ログインシェルとして呼び出されたかどうかを判断します。
@slmが述べたように、マニュアルの「通話」セクションに明示的に指定されていますbash
。
またcsh
、、、、、などのいくつかのシェルがありtcsh
ますksh
。zsh
yash
、bash
Almquistシェルのいくつかのバリアントは、最初の引数と混合せずに-l
このモードを有効にするオプションをサポートしています。login
使用しないでくださいlogin
。しかし、使用するのが難しいことを避けたい場合は、argv[0]
グラフィカルログインマネージャが使用するのを見たことがあります。
答え3
見てバッシュのマニュアルページ。彼らはそこでそれをどのように呼ぶかについての違いを議論しました。この部分を言います呼ぶ。これを呼び出す2つの主な方法は、ログインシェル(bash -l
)と対話型シェル(bash -i
)です。
次のタイトルの他のUnixとLinuxのQ&Aを見てください。ログインシェルと非ログインシェルの違いは何ですか?。質問した内容をほぼ正確に扱っています。