問題タブ [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.
authentication - pam_userdb.so を使用して vsftpd の Berkeley DB で暗号化されたパスワード
Berkeley DB を使用して、一部の仮想ユーザーで vsftpd をインストールしようとしています。私は主にこのガイドに従っています: http://www.neant.ro/2012/04/secure-ftp-with-vsftpd/ . すべて正常に動作しますが、データベース内でパスワードをハッシュしたいと考えています。glibc 2.12 で CentOS 6.3 を使用しています。
pam_userdb.so のマンページから、crypt が提供するものを使用できると思います。crypt(3) マンページを見ると、SHA-256 と SHA-512 を使用できます。私はそれらの1つを使用したいと思います。
私の疑問は、それを実装する方法です。私が知っていることから、pam.dファイルに移動し、引数cryptを編集して追加する必要がありますが...どの値を指定すればよいですか? SHA-256 の場合は 5? SHA-512 の場合は 6 ?
ここで、データベース内の SHA-256/SHA-512 のパスワードが必要です。ハッシュを取得する正しい方法はどれですか? crypt関数を使用する必要があると思います。ただ、Rubyで取得する必要があるのですが、何か方法はありますか?
助けてくれてありがとう、
php - PHP pam_auth() の最適な管理ガイドライン
わかりました。現在、新しいサイト用の小さな一時的なウェルカム ランディング ページを開発中です。一般の訪問者は、必要に応じて電子メール アドレスを送信できます。しかし、現在の開発段階で、完全なサイトをそのまま表示するために、開発者用のユーザー/パス ログインも追加したいと考えています。開発者はそれぞれ、ローカル LAMP システムにユーザー/パスを持っています。
今のところ、適切な Web サイト ユーザー システムの上に 2 つの個別のユーザー システムを作成せずに開発者を特定したいのは、そのユーザーがローカル システムにログインできるかどうかをすばやく確認するためです。if(pam_auth($_POST["u"], $_POST["p"])) はまさにそれを行います。シンプル、いいね。
しかし、その後、apache ユーザーに */security/pam_passwd ファイルへのアクセスを許可する必要があることを発見しました (または、少し良い方法: pam_tally*)。それを行うと、セキュリティ ホールが作成されます。
PHP(+apache) から、他の開発者がユーザーを検証し、ローカル LAMP セキュリティ システムに合格するために何をしたか知りたいですか? これが唯一の方法ですか、それとも代替手段はありますか? より良い提案はありますか?
最良の答えは必ずしもコードではなく、ライブラリ名の提案または他のソリューションの説明へのリンクです。
linux - PAM の設計方法に関する高度な質問
プロジェクト用の PAM モジュールを作成しています。PAM モジュールは、(毎回すべてを書き直すのではなく) 一部のコマンド ライン ユーティリティによって再利用されるライブラリを使用します。このライブラリでは、リモート ホストのサブネット メンバーシップに応じて、ログやログを区別するポリシーを解釈させたいと考えています。この値はおそらく認証アプリケーションからのものであることがわかりますが、わかりません。共有オブジェクトは libpam から pamh 構造にアクセスできないため、pam_get_item を実行するだけでは (PAM モジュール自体からアクセスできるように) 実行できないため、他の手段に頼る必要がありました。
私が思いついた最善の解決策は、共有オブジェクトが接続された TTY を探すようにすることです。そこにある場合は、utmp に移動し、その TTY に関連付けられたログイン プロセスを見つけ、そこから IP アドレスを抽出します。TTY がない場合は、ネットワーク ユーザーの最初のログインであると想定します。次に、ライブラリはソケットを繰り返し処理し (これは、基本的には、ターゲットのファイル名に「socket」という単語を含むシンボリック リンクとして定義しましたls -l /proc/<pid>/fd
)、ソケットの inode 番号を使用して相互参照します。/proc/net/tcp
その inode 番号に関連付けられたリモート IP アドレスを抽出します。そこに inode が見つからない場合は、Unix ドメインまたは tcp6 であると想定します (IPv6 のサポートは近日中に行われる予定であり、近い将来にはそれほど重要ではありません)。それでも見つからない場合は、何らかのデーモンがそれに対してリンクしているアプリケーションを呼び出していると想定し、そのように解釈します (価値がある場合は最終的に何かを実行する可能性がありますが、最初の 2 つが実行されない場合は、今のところ大きな NOOP にすぎません)。何も返さない。
動作しているように見えますが、PAM がどのように機能するのかについて、いくつかの高レベルの質問があります。
PAM 操作を管理する公式の標準はありますか? たとえば、どこかの POSIX 標準でカバーされていますか? 複数の PAM 実装があることは知っていますが (これまでに 4 つまたは 5 つ見つけました)、既存の共通点が当然なのか事実上のものなのか、またはたまたまシステムをどのように構成したのかはわかりません。
ls -l /proc/<pid>/fd > /lsOutput
モジュール自体から(経由で)実行した後system()
:
[root@hypervisor pam]# cat /lsOutput 合計 0
lrwx------。1 ルート ルート 64 6 月 15 日 15:09 0 -> /dev/null
lrwx------。1 ルート ルート 64 6 月 15 日 15:09 1 -> /dev/null
lrwx------。1 ルート ルート 64 6 月 15 日 15:09 2 -> /dev/null
lr-x------。1 ルート ルート 64 6 月 15 日 15:09 3 -> ソケット:[426180]
[root@hypervisor pam]#
ls
ユーザーがログインした後にマニュアルを発行します。
したがって、基本的には、TTY と追加のソケットの両方がセッション モジュールの終了後にのみ開かれるようです (私の一時的なテスト モジュールのセッション処理は、sshd
サービスのスタックの最後です)。私はそれを別の方法で取得することができませんでした (または、接続しているクライアントが記述子 3 の TCP ソケットではない場合について考えることさえできます)。
これは私の想像力の欠如によるものですか、それとも必然的なものですか?クライアントとのコミュニケーションは、他の有用なことを行うための前提条件と思われるため、私は後者に傾いています。よくわからないので、誰かに聞いてみようと思います。記述子 3 は常に認証クライアントになります (私の .so は、それが最も小さい番号の TCP ソケットであり、TTY がない場合のみであると仮定しますが、3
常に接続クライアントの記述子である必要があるようです)。最初の TCP 記述子をプルすることは、リモート クライアントの ID を確立する「決定論的」な方法でしょうか? それとも、これが実行されるはずの規定された方法はなく、それは私のシステムがどのように構成されているか、または SSH が PAM とのインターフェースとしてどのように選択されているかのどちらかですか?
- それは
sshd
rhost 値を設定しているのか、それとも他の場所から来ているのか?grep
SSH と libpam の両方のソース コードを試してみましたが、ダイスはありませんでした。何かが pam_set_item を呼び出したときに libpam がホスト値の設定を処理する場所を確認できますが、pam_set_item が実際に呼び出されて特定のホストに設定されたわけではありません。
グーグルで検索しましたが、バレルの底をこすって指先に破片がつき始めています。
私がこれを知ることに興味を持っている主な理由は、「正しい」答えだけでなく、後で驚くようなことがないようにするためです. これを行う可能性のある Solaris プラットフォームがいくつかありますが、私の主な動機は、実際には一定であることに基づいた仮定を立てることです。
また、クライアント プログラム/モジュールにホスト情報をライブラリにフィードさせることもできますが、その場合、コードを 2 ~ 3 回書き直す必要があることも認識しています (CLI ツールは utmp からセッション情報を準備し、pam_get_item から PAM モジュールを準備するため)。プロジェクトが必要以上に複雑に見える可能性があります。
fedora - Eclipse の Pam モジュール
Pam モジュールを作成したかったのです。IDE として Eclipse を使用し、C/C++ で pam モジュールを作成しています。
必要な2つのpamモジュールを含めようとしたとき
ビルドすると、「そのようなファイルまたはディレクトリはありません」というエラーが表示されます。システムを調べて、pam_modules.h と pam_macros.h が見つかるかどうかを確認しましたが、運がありませんでした。間違った場所を探していたか、インストールしていないのかもしれません。
それらをどこに保存すべきか、プログラムで 2 つのヘッダー ファイルを使用できるようにする方法を教えてください。それらを手動で Eclipse にインポートする必要がありますか?
macos - OSX でビルドされた PAM モジュールの共有ライブラリと動的ライブラリ
OSX初心者です。RedHat でうまく動作するカスタム PAM モジュールがあります。OSXに移植しようとしています。壁にぶち当たりました。OSX が「LinuxPam」ではなく「OpenPam」を使用していることは知っています。私は実際にEclipseを使用してモジュールを構築できます[ただし、XcodeとXcodeコマンドラインツールをインストールする必要がありました]。
モジュールをインストールして使用しようとすると、openpam_load_module がモジュールのロードに失敗したという一般的なメッセージがログに表示されます。オンラインで掘り下げた後、スローしたオブジェクトをロードしようとする小さな dlopen "テスト" プログラムを見つけました。失敗すると、はるかに優れたエラーが発生します。私のモジュールは、「pam」、「sqlite3」、および「mysqlclient」ライブラリの存在に依存しています。このテストローダーは文句を言います
まあ、そのlibは存在します。それはEclipseプロジェクトのビルドパスにあります。Eclipse リンク行でフルパスを「ハードコーディング」してみました。ライブラリの静的バージョンとのリンクも試みました。喜びはありません。
ライブラリの静的バージョンにリンクすると、次のメモが表示されます。
その後に大量の未定義シンボルが続きます。ここからどこへ行けばいいのかわからない。アイデア?