web-dev-qa-db-ja.com

別々のUNIXアカウントでユーザー名を共有できますが、パスワードは別々にできますか?

UNIXシステムでは、個別のユーザーアカウントごとに一意のユーザー名があります。したがって、パスワードは一意ではありません。すべての個別のユーザーがまったく同じパスワードを持つ可能性があります。

逆にやりたいです。 1つのユーザー名が必要ですが、そのログイン名に複数のパスワードを設定したいと思います。パスワードに応じて、(異なるUIDで)別のアカウントにログインするか、単に別のホームディレクトリを使用します。

目標は、2つの別々のエンティティが同じユーザー名を共有し、それらのファイルを別々にすることです。この場合、異なるUID間のファイル権限はそれほど重要ではありません。

これを達成する方法、またはそのようなものについて何か考えはありますか?/etc/shadowまたはPAMの乱用?

これは、PAMモジュールを作成することで実現できるものですか(これまでに作成したことはありません。非常に難しいですか?)

3
poundifdef

私はそれが可能だとは思わない。 /etc/passwdに同じユーザー名で異なるUIDを持つ2つのエントリを含めることができますが、システムはおそらく2番目のエントリを無視する(または何らかの方法で誤動作する)でしょう。おそらく、そのような/etc/passwdファイルは破損していると見なされます。

システムにログインすると、最初にユーザー名の入力を求められます。それが完了すると、システムはパスワードの入力を求め、入力されたパスワードがそのユーザー名に対応するアカウントのパスワードと一致するかどうかを確認します。パスワードを入力するまでに、システムはアクセスしようとしているアカウントをすでに判別しています。

システムのさまざまな部分を変更して目的の動作を実現できると思いますが、ユーザーを認証および承認するもの(コンソールログイン、su、ssh、およびその他の方法)を含む、いくつかの異なるソフトウェアを置き換える必要があります。有効)。間違いがあると、大きなギャップのあるセキュリティホールが開かれる可能性があります。

編集:コメントに基づくと、おそらくPAMがこれを行う方法です。私はPAMに精通していないため、詳細を説明できません。 (それはまだ本当に悪い考えです。)

8
Keith Thompson

私は絶対に確実にするためにAPIドキュメントを再確認していませんが、おそらくPAMでこれを行う方法を見つけることができます。おそらくそれほど難しいことではありません。既存のPAMモジュールでそれを行うことさえできるかもしれません。

そうすべきではありません。基本的に、名前が1つのユーザーIDにのみマップされると想定するものはたくさんあります。たとえば、Cライブラリのgetpwnam。私は確かに、私が維持しなければならないどのシステムでもこれを望んでいません。ランダムな破損は日常茶飯事だと思います。

また、これはあなた/あなたの友人の目標にあまり近づきません。まず、PCに物理的にアクセスできる場合、ルートを取得するのは簡単です。第二に、実際にはだれもだまされません。物事が欠落していることは明らかです(ドキュメントXが欠落している理由、Webブラウザーの履歴がない理由、Firefox拡張機能がない理由、すべての変更時間とアクセス時間はなぜですか)古代のファイルなど)

3
derobert

ダブルログインは、2つ(またはそれ以上)のPAM認証バックエンドで実行できると思います。たとえば、LDAPと通常のpasswd/shadowユーザーログインを使用している場合、最初の方法でパスワード入力が数回失敗すると、PAMは2番目にフォールバックします。

少なくともこれは、私たちがこの同じセットアップを使用したときに私が数年前に遭遇したものでした。

これが異なるuserIDが使用されることを意味するかどうかはわかりませんが、LDAPが同じユーザー名を別のユーザーIDにマップできるため、おそらくそうです。

しかし、とにかく、これは、マシンにログインするたびに、失敗したログインを作成する必要があることを意味します(私が正しく覚えていれば、2〜3回)。だから、それはそれほど快適なハックではありません。

しかし、それでも、システムがプライマリバックエンド内のすべてを検索するのと同じ問題が他の人によって生成されるため、偽のログインの情報が返されます。

2
Tylla

理論的にはそれは可能ですが、それは一般的に悪い考えであり、それがそのための既製のプログラムを見つけられない理由を説明しています。

あなたが求めているのは、同じ公に見えるアイデンティティを持つ別々のアカウントを持つことです。それらは別個のアカウントであるため、明確な真のアイデンティティを持っています。このように提示すると、賢明な場合があります(アクセス許可とログで使用されるプライベートIDを使用)。一般的なユーザー認証レベルでは何も考えられません。

ただし、これでは、ユーザーの1人が共有アカウントを使用していると信じるという目標を達成できるとは思いません。ユーザー名が同じであると偽る以上のことを行う必要があります。ファイル共有を偽造する必要があります(ファイルが削除された場合、まだ使用していることに気づき、ジグが起動します)、ログイン時間など。オン。この時点で、別のユーザー名を使用することもできます。

したがって、自分用のアカウントを作成し、使用するふりをするだけの別の共有アカウントを作成します。分離を改善するには、これらのアカウントを別々の仮想マシンで作成します(たとえば、 [〜#〜] lxc [〜#〜] を使用します)。