問題タブ [pam]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
active-directory - Kerberos を使用して Linux を Active Directory にバインドする
Linux マシン (debian 4.0) を W2k3 AD にバインドしようとしています。TGT を取得できるように kerberos を適切に構成しました。また、ユーザーは適切に認証されます。ただし、PAM はスティッキー ウィケットのようです。たとえば、AD ユーザーの 1 人として Linux マシンに SSH 接続しようとすると、認証は成功しますが (auth.log に従って)、シェルを取得できません。デフォルト環境は適切に構成されており、PAM は Homedir も適切に作成します。参考として、大まかに次のことを行いました。
linux - ログインにハードウェア トークンを使用する
私は暗号化のトピックに不慣れで、PKI や PKCS などを勉強しています。PKI の基本的な概念と、それが暗号化/復号化にどのように使用されるかを理解しています。ただし、USB トークンやスマートカードなどのハードウェア トークンを使用してコンピュータに安全にログインする方法については混乱しています。私が理解している手順と、混乱している部分を次に示します(質問の長さについては事前に申し訳ありません)。
シナリオ: ネットワーク上のコンピューター xyz には、SECRET グループに属するユーザーのみがアクセスできるデータが含まれています。ユーザー Bob と Joe はこのグループに属しており、これらのリソースへのアクセスを可能にする資格情報を提供するために使用できる USB トークンが発行されています。USB トークンは 2 要素認証を採用しており、ピンを入力する必要があります。トークンは PKCS11 に準拠しています。
- Bob は USB トークンを Linux マシンに挿入します。
- PAM-PKCS11 モジュールはこのイベントを認識し、Bob に自分の PIN を入力するように促します。
- Bob が 4 桁の PIN を正しく入力すると、モジュールは次の方法で Bob のトークンの証明書の有効性をチェックします(これはさまざまですが、最小値は何ですか?)。
- 信頼できる CA を確認するためのルート証明書の検索
- 証明書の有効期限と失効リストの確認
- トークンの ID をユーザー ファイル(どこ?、ステップが抜けている)またはディレクトリ (LDAP など)と照合する
- すべてが正常に見える場合、モジュールは成功した結果を PAM に通知します。
- この行には十分なラベルが付けられているため、PAM は認証を受け入れ、Bob はログインして、SECRET グループのユーザーに限定された情報を表示できます。
私が見逃している部分は、Bob がこのマシンにアクセスできるかどうか、および Bob がネットワーク (またはデスクトップ) ユーザーである Bob に正確に関連付けられているかどうかに関する情報がどこに保存されているかです。私は、Bob に関するその他の識別データが、ID (電子メール アドレスなど) を含めて USB に保存されることを理解しています。しかし、この強力なセキュリティはどうですか?ログインプロセス中に暗号が使用されているのはどこですか? (または、それがこれらのトークンの本当の目的ではないのですか?) 誰かが USB を手に入れて 4 桁の PIN を知っていれば、それで十分だと思われますよね? さらに、別のユーザーが新しい USB トークンを取得できないことを信頼し、信頼できる CA を使用して新しい証明書を取得するが、すべての識別データをボブのものと同じにすることを許可するのは、基本的に CA の信頼ですか? 欠けている重要な部分があることは知っています.. しかし、何十もの記事を読んだ後、この領域の説明は見過ごされているようです。機密データを含むマシンにログインするための十分な認証手段としてハードウェア トークンを使用することは良い考えですか? それとも、そのようなトークンの主な目的は、他のアプリケーションで使用されるキー ペアを安全に保存することですか?ご協力ありがとうございます!
c - PAM によるさまざまなアクセス レベル
現在、オペレータと管理者の 2 つのレベルのアクセスを持つグラフィカル アプリケーションがあります。ログインと認証はすべて自作であり、代わりに PAM を使用するようにアプリケーションを切り替えたいと考えています。それを行う正しい方法が何であるかはわかりません。
私が間違っている場合は訂正してください。ただし、PAM は「はい」または「いいえ」のチェックに要約されるようです。つまり、このサービスにアクセスできるか、できないかです。どのユーザーがログインしているかに基づいて、さまざまなレベルのアクセス権を持つための規定はありません。ただし、誰がオペレーターで誰が管理者であるかを判別できるようにする必要があり、可能であれば PAM を介して厳密に実行できるようにしたいと考えています。
したがって、オペレーター用と管理者用の 2 つの異なる構成を持つ 2 つのサービスをセットアップすると思います。次に、私のアプリケーションは最初に認証を試み、それが失敗した場合は. 両方が失敗した場合、アクセスは拒否されます。私は正しい軌道に乗っていますか、それとも完全に脱線していますか?/etc/pam.d/pamdemo
/etc/pam.d/pamdemo-admin
pamdemo-admin
pamdemo
概念実証として作成した C コードのサンプルを次に示します。ログインを行うときに、ユーザーに資格情報を 2 回要求したくありません。2回の呼び出しでユーザー名を覚えているので、アプリケーションレベルからpam_start()
アクセスしてパスワードに対して同じキャッシュを行うことはできません。pam_get_item(PAM_AUTHTOK)
そして、そうしようとしていたときに、これを行うにはまったく別の方法があるかもしれないことに気づきました. ユーザー名/パスワード、Kerberos チケット、指紋など、認証方法に関係なく、このアプリケーションが機能することを望みます。
書かれているように、このデモ プログラムは "password:" プロンプトを繰り返します。二度も聞かれたくない!
python - Python PAMモジュールのセキュリティ上の懸念はありますか?
Unixログイン用の一般的な認証メカニズムを利用するPAMモジュールを作成することに興味があります。私の過去のプログラミング経験のほとんどはPythonでのものであり、私が対話しているシステムにはすでにPythonAPIがあります。グーグルで調べてみたところ、 pam_pythonが見つかりました。これにより、PAMモジュールがpython intrepreterを呼び出すことができるため、PAMモジュールを基本的にPythonで記述できるようになります。
ただし、SUID Pythonスクリプトなど、ユーザー自身よりも高いアクセスレベルで実行されるPythonコードをユーザーが呼び出すことを許可すると、セキュリティ上のリスクがあることを読みました。これらの懸念はPythonPAMモジュールにも当てはまりますか?
c++ - Linux C++ アプリケーションでの SecurID 認証
Linux C++ ベースのアプリケーションで SecurID 認証を実装する方法を推奨できる人はいますか? II は次のオプションを考えていました。
- SecurID 用の apache モジュール (フロントエンドで Apache を使用しています)
- パム
- Radius を介した SecurID の組み合わせについて聞いたことがありますが、理解できません。
linux - プログラムによる Linux での特権の昇格
Linux で実行するグラフィカル インストーラーを作成しています。インストールは、ファイルを のいくつかの場所にコピーすることで構成する必要があります/usr
。現在、インストーラーは Python で書かれています。
ファイルをコピーする必要がある場合、インストーラーの権限をエスカレートするにはどうすればよいですか? 私はPolicyKitを見ましたが、
- a) PolicyKit の一般的な「ファイルのインストール」アクション ID がないようです。
- b)私が使用できるアクションIDのうち、それらがディストリビューション全体で標準であるとは思わない
PAM も調べましたが、libpam を使用するコードがありますが、何もできないようです。(ユーザー名とパスワードを入力して) ユーザーを認証した後、への書き込みアクセス権がありません/usr
。after authenticationでユーザーを変更しようとしos.setuid(0)
ましたが、OS からエラーが発生します。
また、奇妙なことに、私がどのサービスを提供するかは問題ではないようですpam_start
。ユーザー名とパスワードが正しい限り、必要なものは何でも渡すことができます。私が持っていることがわかり/etc/pam.d/sudo
ました。以下のコードは簡略化されており、パスワードはオブジェクトに正しく保存されておりpam_conversation
、ハンドル オブジェクトを渡しています。
同様に動作します
つまり、両方とも成功します。
最後の手段として、おそらくgksudo
orを実行できkdesudo
ますが、それらのプログラムに縛られたくありません。ユーザーに私のインストーラーを呼び出すように要求することsudo
は、(非常に) 最後の手段です。
php - PHP pam_auth と Cookie
簡単に言えば、私は社内のレポート エンジンを開発しています。これは完全に Web ベース (PHP およびさまざまな AJAX 技術を使用) であり、MySQL データベースに格納されたデータを弊社の製品ソフトウェアによって解釈します。これは Ubuntu 8.04 サーバーで実行され、すべての従業員がそのマシンで Linux ユーザー アカウントを持っています。pam_auth を使用して、ユーザーに Linux ユーザー アカウントでのログインを強制し、特定のレポートにアクセスするための適切なグループに属しているかどうかを判断するログイン システムをセットアップしました。
その部分はうまく機能します。ここでの問題は、Cookie を使用して「私を覚えている」機能を追加することです。ユーザーが時間を節約し、セッションが期限切れになるたびにログインしなければならないという煩わしさを軽減するために、ユーザーが 30 日間の Cookie を持っていることを望みます。コードの「remember me」部分を書きましたが、Cookie は問題なく保存されます。ユーザー名とパスワードの md5 ハッシュのみを保存しています。ここでの問題は、それらを再認証するときです。通常は、保存されたユーザー名をデータベースから取得したそのユーザーのパスワード ハッシュと比較することで、単純にこれを行います。複雑なのは、ユーザー名とパスワードのハッシュに直接アクセスできないことです。それらはすべて /etc/passwd および /etc/shadow に保管され、ログインは PAM モジュールによって処理されます。pam_auth は、プレーン テキストのユーザー名とプレーン テキストのパスワードを想定しています。
私の唯一の選択肢は、パスワードをプレーンテキストとして保存するか、可逆的な暗号化を使用することのようですが、私はこれらのアイデアのどちらも特に好きではありません.
ここにもっと良い解決策はありますか?
python - mod_python で実行するスクリプトで pam_python を使用する
Linux システムのユーザーが自分のアカウントに関連する特定のタスクを実行できるようにする Web インターフェイスを開発したいと考えています。Python と Apache の mod_python を使用して、サイトのバックエンドを作成することにしました。ユーザーを認証するには、python_pamを使用して PAM サービスにクエリを実行できると考えました。モジュールにバンドルされている例を適応させたところ、次のようになりました。
私の問題は、単純なスクリプトで使用する場合でも mod_python を使用する場合でも、この関数が同じように動作しないことです。これを説明するために、次の簡単なケースを書きました。
スクリプトの結果は次のとおりです。
しかし、mod_python の結果は次のとおりです。
auth
関数が同じ入力に対して同じ値を返さない理由がわかりません。どこでこれを間違えたのですか?これが元のスクリプトです。
どうもありがとう !
編集:エラーが見つかりました。スクリプトをルートとして実行していました。mod_python は、Web サーバーのユーザーとしてスクリプトを実行していました。root のみがシャドウを読み取る権限を持っています。これをどのように回避するかはわかりませんが、少なくとも問題が何であるかはわかりました。
python - PAM 認証の問題
このモジュールを使用して、pam を使用して認証しています: http://code.google.com/p/web2py/source/browse/gluon/contrib/pam.py
authenticate('username','password') を呼び出すと、True/False が返されます。「root」以外の「ユーザー名」で機能します。私の推測では、PAM にはルート パスワードのチェックを許可しないセキュリティ制限があると思われます。
rootパスワードを確認できるようにする必要があります。この制限を取り除くために、pam.conf または他の場所で変更できるものはありますか?