_Ubuntu 12.04
_にjailkit
をインストールし、ユーザーのシェルを_/bin/bash
_に設定しましたが、呼び出されると、_/etc/bash.bashrc
_ではなく_/etc/profile
_が実行されます。
これまでにjailkit
を使用したことがない場合は、その要点を以下に示します。
したがって、_/etc/passwd
_に次のようなエントリを持つtestuser
があります。
_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
がシェルのタイプと、実行する必要のあるスタートアップファイルのセットをどのように決定しているかわかりません。 。
これをトラブルシューティングできるかどうかを確認したいのですが、わかりません。
ps:運が悪かったのでlogin(1)
も調べました。
通常、bashは、ログインプログラムがそれを呼び出すと、その名前が-bash
であることをbashに通知するため、それがログインシェルであることを認識します。その名前は、0番目のコマンドライン引数であるargv[0]
にあります。これは、通常、ユーザーがプログラムを呼び出す方法です。最初のハイフンは、ログインシェルであることをシェルに伝えるための規則です。オプション--login
または-l
を渡すと、Bashはログインシェルとしても動作します。詳細については、 ログインシェルと非ログインシェルの違いは? を参照してください。
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
がログインシェルを呼び出す簡単な方法を持っていることを期待していました。機能をリクエストすることをお勧めします。
login
は、argv[0]
で始まる-
を使用してユーザーのログインコマンド/シェルを呼び出します。シェルはargv[0]
をチェックして、ログインシェルとして呼び出されているかどうかを判断します。
@slmが言うように、それはbash
マニュアルの「呼び出し」セクションで明確に指定されています。
さらに、csh
、tcsh
、ksh
、zsh
、 yash
、bash
などのいくつかのシェル、およびAlmquist Shellの一部のバリアントは、login
を有効にする-l
オプションをサポートしています。最初の引数。これはlogin
では使用されませんが、任意のargv[0]
でコマンドを実行するのが難しいもの(ほとんどのシェルなど)からログインシェルをシミュレートする場合に使用できます。グラフィカルログインマネージャーで使用されているのを見てきました。
bashのmanページ を見てください。彼らは、そこで呼び出す方法の違いについて話し合っています。このセクションは[〜#〜]呼び出し[〜#〜]と呼ばれます。呼び出される主な2つの方法は、ログインシェル(bash -l
)およびインタラクティブシェルとして(bash -i
)。
この他のUnixとLinuxのQ&Aを見てください: ログインシェルと非ログインシェルの違いは? 。それはあなたが求めていることをほぼ正確にカバーしています。