web-dev-qa-db-ja.com

ユーザーアカウントに複数のパスワードを与えることはできますか?

1つのアカウントに2つのパスワードを割り当てたい。私が知りたいのは、1)これが可能か、2)これがセキュリティにどのような影響を与えるのか、です。

私がこれをしたい理由は、現在、いくつかのローカルテストで忙しく、特定の状況では便利だと思ったからです。いくつかの調査の後、 [〜#〜] pam [〜#〜] と呼ばれるものを見つけましたが、インストール/構成のしくみに関する情報を見つけるのに苦労しています。

Ubuntu 12.04を実行しています。

22

はい、ごくまれですが、これは間違いなく実行可能です。

自分でデフォルトとして実装する代わりに/etc/password/etc/shadowベースの認証方法には、このような構成のプロビジョニングはありません。より簡単な方法は、ユーザーの複数のパスワードをすでにサポートしているバックエンドに認証を委任することです。

よく知られているのは [〜#〜] ldap [〜#〜] で、このuserPassword属性は RFC4519 に従って複数の値になります。

'userPassword'属性に複数の値が必要な例として、毎月ユーザーが一部の自動化システムによって生成された異なるパスワードを使用すると予想される環境があります。移行期間中、期間の最終日と最初の日と同様に、2つの連続する期間の2つのパスワードをシステムで有効にする必要がある場合があります。

このRFCにもかかわらず、この設定が実際に受け入れられるようにするには、ほとんどのディレクトリサーバー実装でパスワードポリシー構成を変更する必要があります。

Linux側では、それを禁止するものは何もありません(ここでは、testuserという名前のアカウントに両方のpass1およびpass2 as userPassword属性値):

$ uname -a
Linux lx-vb 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ grep VERSION /etc/os-release
VERSION="13.04, Raring Ringtail"
$ grep "^passwd" /etc/nsswitch.conf 
passwd: files ldap
$ ldapsearch -LLL -h localhost -p 1389 -D "cn=directory manager" -w xxxxxxxx "uid=testuser" userPassword
dn: uid=testuser,ou=People,dc=example,dc=com
userPassword:: e1NTSEF9b2JWYXFDcjhNQmNJVXZXVHMzbE40SFlReStldC9XNFZ0NU4yRmc9PQ==
userPassword:: e1NTSEF9eDlnRGZ5b0NhKzNROTIzOTFha1NiR2VTMFJabjNKSWYyNkN3cUE9PQ==
$ grep testuser /etc/passwd
$ getent passwd testuser
testuser:*:12345:12345:ldap test user:/home/testuser:/bin/sh
$ sshpass -p pass1 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass2 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass3 ssh testuser@localhost id
Permission denied, please try again.

この種の構成の技術的およびセキュリティ関連の影響を以下に示します。

  • ユーザーアカウントは明らかに攻撃に対してより脆弱ですが、ここで本当に重要なのは、パスワードの数よりも品質と保護です。
  • ほとんどのユーティリティは、ユーザーが単一のパスワードを持っていると想定しているため、ユーザーがパスワードの1つを個別に更新することはできません。パスワードを変更すると、ユーザーのパスワード属性が1つになる可能性があります。
  • 複数のユーザーがそれぞれのパスワードを使用して同じアカウントを共有できるようにすることが目的である場合、使用されているパスワードに基づいて実際にログインしているユーザーを特定するメカニズムはありません。
16
jlliagre

/etc/shadowファイルにユーザーの2つのエントリを作成しようとしたところ、機能しませんでした。最初に入力されたのは、使用されたパスワードエントリでした。

テストユーザーを作成しました。

$ useradd -d /home/newuser newuser

パスワードを「super123」に設定します。

$ passwd newuser

/etc/shadowファイルを手動で編集し、2番目のエントリを作成します。

newuser:$6$....password #1...:15963:0:99999:7:::
newuser:$6$....password #2...:15963:0:99999:7:::

次に、2つのパスワードを使用してアカウントでログインを試みます。

su - newuser

/etc/shadowの最初のエントリが使用されます。次のように反転すると、2番目の位置のエントリは機能しません。

newuser:$6$....password #2...:15963:0:99999:7:::
newuser:$6$....password #1...:15963:0:99999:7:::

次に、2番目のパスワードは機能し、最初のパスワードは機能しません。

Sudoを使用する

このアプローチは完全なハックです。Sudoを使用するだけですが、それがSudoが存在する理由の1つです。

このエントリをsudoersファイル(/etc/sudoers)に追加すると、ユーザーjoeがあなたと同じように何でもできるようになります。

joe ALL=(yourusername) ALL
7
slm

これができるなら、おそらくすべきではないでしょう。

PAMの構成はやや複雑で、認証メカニズムについては1つの自明があります。正しい構成には有限のセットがありますが、安全でない構成には無限のセットがあります。これにより、物事を変えようとして、何をしているのか正確にわからない場合は、物事が台無しになることはほぼ確実です。

セキュリティと「特定の状況で便利」のどちらかを選択する場合は、前者を選択してください。

4
msw

同じアカウントに2つの異なるユーザー名を設定し、それぞれにパスワードを設定できます。 vipwを実行して/etc/passwdを手動で編集し、目的のアカウントの既存の行を複製してユーザー名を変更します(そして Gecosフィールド の場合は、ホームディレクトリとシェル)。 vipw -sを実行し、そのユーザーの行を/etc/shadowに複製します。新しいユーザー名でログインし、passwdを実行して新しいユーザー名のパスワードを変更します。これで、同じアカウントに対して、異なるパスワードを持つ2つの異なるユーザー名ができました(ユーザーIDがアカウントを決定するものです)。

これはおそらく良い考えではありません。何をしようとしているかに応じて、他のアプローチがより適切な場合があります。

  • コミットしてバージョン管理からチェックアウトすることにより、別のアカウントを作成してファイルを共有します。
  • 別のアカウントを作成し、両方のユーザーアカウントが属するグループを作成して、共有するファイルへの書き込みアクセス権をグループに付与します。
  • 別のアカウントを作成し、最初のアカウントにSudoでそのアカウントとしてコマンドを実行する権限を与えます。

    user1 ALL = (user2) ALL
    
  • 1つの特定のコマンドの実行のみを許可 であるアカウントのSSHキーを作成します。