UNIXシステムでは、各個々のユーザーアカウントに固有のユーザー名があります。したがって、パスワードは一意ではありません。すべてのユーザーはまったく同じパスワードを持つことができます。
私はその逆をしたい。 1つのユーザー名が必要ですが、そのログインに複数のパスワードが必要です。パスワードによっては、別のアカウント(別のUIDを使用)にログインしたり、別のホームディレクトリを持つことができます。
目標は、同じユーザー名を共有する2つの独立したエンティティを持つことですが、そのファイルは独立しています。この場合、異なるUID間のファイル権限はそれほど重要ではありません。
これや同様のものを実装する方法についてのアイデアはありますか? /etc/shadowまたはPAMが乱用されていますか?
これがPAMモジュールを書くことは可能ですか? (私はそのようなことをしたことがありません。とても、とても難しいですか?)
答え1
私はこれが可能だとは思わない。/etc/passwd
ユーザー名は同じですが、異なるUIDを持つ2つの項目があるかもしれませんが、システムは2番目の項目を無視することができます(または何らかの方法で誤動作する可能性があります)。/etc/passwd
言い換えれば、これらのファイルは破損していると見なされます。
システムにログインすると、まずユーザー名を入力するように求められます。これが完了すると、パスワードを入力するように求められ、そのユーザー名のアカウントパスワードと一致することが確認されます。パスワードを入力すると、システムはあなたがアクセスしたいアカウントをすでに識別しています。
必要な動作を得るためにシステムのさまざまな部分を変更することができるようですが、ユーザーを認証して権限を付与するすべてのもの(コンソールログイン、su、ssh、およびその他の方法)を含むソフトウェアのさまざまな部分を交換する必要があります。 )が有効になっています)。どんな間違いでも大きなセキュリティ抜け穴を引き起こす可能性があります。
編集する:コメントによれば、PAMがこれを行う方法である可能性があります。私は詳細に説明するほどPAMに精通していません。 (これはまだ非常に悪い考えです。)
答え2
確実にするためにAPIドキュメントを再確認しませんでしたが、おそらくPAMを使用してこれを行う方法を見つけることができます。それほど難しくないかもしれません。これを行うには、既存のPAMモジュールを使用することもできます。
やるべきことではありません。デフォルトでは、名前が1つのユーザーIDにのみマッピングされると仮定するものがたくさんあります。たとえば、getpwnam
Cライブラリから。私は維持する必要があるどのシステムでもこれをやりたくありません。任意の破損が標準になると予想しています。
さらに、これはあなた/友人の目標を達成するのに実際には役に立ちません。まず、PCに物理的にアクセスできる場合は、ルートを取得するのは簡単です。第二に、実際には誰もだまされません。明らかにすべてが失われます。
答え3
私の考えでは、2つ以上のPAM認証バックエンドで二重ログインを実行できると思います。たとえば、LDAPおよび通常のpasswd / shadowユーザーログインを使用している場合、パスワードの入力が最初の方法で複数回失敗した場合、PAMは2番目の方法に置き換えられます。
少なくともそれは同じ設定で数年前に私が経験したものです。
これが別のuserIDが使用されることを意味するのかはわかりませんが、LDAPは同じユーザー名を別のuserIDにマップできるため、これも可能です。
しかし、とにかく、これはコンピュータにログインするたびにログイン失敗を生成する必要があることを意味します(私の記憶が正しい場合は2〜3回)。だからハッキングするのはそれほど楽ではありません。
ただし、システムはデフォルトのバックエンドのすべてを検索して偽のログインを返すため、上記の他の問題と同じ問題が発生します。
答え4
理論的には可能ですが、一般的にこれは悪い考えです。これにより、既成プログラムが見つからない理由が説明されます。
公開されている同じ身元を持つ別のアカウントをリクエストしています。別のアカウントなので実際の身元も違います。このように表現すると(権限とログに個人IDを使用することは)賢明です。一般ユーザー認証レベルには存在するものは何も思いません。
しかし、私はこれがあるユーザーが自分が共有アカウントを使用していると信じることができるあなたの目標を満たすとは思いません。ユーザー名が同じように偽装するよりも多くのことを行う必要があります。ファイル共有(ファイルを削除してまだ使用していることがわかったら、フィクスチャが機能している)、ログイン時間などを偽造する必要があります。この時点で別のユーザー名を使用できます。
したがって、自分のアカウントと使用するふりをする別の共有アカウントを作成してください。より良い分離のために、別の仮想マシンにこれらのアカウントを作成します(例:LXC)。