2013-08-07 9 views
5

pythonスクリプトに接続された外部デバイスを使用して自分自身を認証できるようにコンピュータをセットアップしようとしています。私は、自分のプログラムでinittabloginプログラムを置き換えることから始め、私はbashシェルに入ることができました。問題は、loginで与えられたような(私が推測する)ような新鮮な環境は得られないということです。私は環境を混乱させる方法があることを知っていますが、たとえそうしたことが当てはまるのであれば、私はそれを "デフォルト"の設定にする方法を見ていません。クリーンな環境でCからbashを呼び出すにはどうすればいいですか?

+4

「login」のソースを調べましたか?それは私が見る最初の場所です。おそらく 'login'プログラムがあなたが推測することができない多くの事があります。 –

+4

また、 'login'プログラムを完全に置き換える代わりに[' pam'モジュール](https://en.wikipedia.org/wiki/Pluggable_authentication_module)を書くことも考えられます。 –

+0

@GregHewgill私はそれについて考えましたが、私はそれのソースを見つけることができませんでした。私はどこから始めるべきかわからない –

答えて

1

いくつかのアイデア:すべての

まずそれは、プラグイン可能なログインアーキテクチャPAMを使用するように、ほとんどの場合に良いだろう。これにより、すべてのPAM対応アプリケーションとサービスが認証方法(たとえばssh)を使用できること、および通常のサービスを使用してそれをバイパスする方法がないことが保証されます。あなたは本当に私は自分自身がそれぞれの環境変数セットのためのunsetenvを使用して環境をクリアすることをお勧めしたいloginを交換したい場合は

(すでに設定された変数を決定するためにenvironを使用することができます)。環境をクリーンアップした後、bashでプログラムを置き換えるにはexecのような呼び出しを使用することがありますが、このコンテキストでは環境は変更されません。コマンドライン引数-lを追加して、起動されるbashをloginとすることができます。

Bashは起動時にいくつかの初期スクリプトを実行しています。設定したくない環境変数については、/etc/profile/etc/bashrcなどのファイルをチェックすることができます。

envに依存したい場合は、env -i bashを使用して、きれいな環境でbashを呼び出すことができます(それはすべてのLinuxシステムに存在するはずです)。

0

main(int argc、char * argv []、char * envp [])がオペレーティングシステムによって呼び出されると、3番目のパラメータには環境が含まれます。だから、bashを呼び出す必要があるまで、そのコピーを保存してください。

+0

私は環境を保存したくない、私はそれを破壊したい。 –

関連する問題