1つのアカウントに2つのパスワードを割り当てたい。私が知りたいのは、1)これが可能か、2)これがセキュリティにどのような影響を与えるのか、です。
私がこれをしたい理由は、現在、いくつかのローカルテストで忙しく、特定の状況では便利だと思ったからです。いくつかの調査の後、 [〜#〜] pam [〜#〜] と呼ばれるものを見つけましたが、インストール/構成のしくみに関する情報を見つけるのに苦労しています。
Ubuntu 12.04を実行しています。
はい、ごくまれですが、これは間違いなく実行可能です。
自分でデフォルトとして実装する代わりに/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.
この種の構成の技術的およびセキュリティ関連の影響を以下に示します。
/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
が存在する理由の1つです。
このエントリをsudoersファイル(/etc/sudoers
)に追加すると、ユーザーjoeがあなたと同じように何でもできるようになります。
joe ALL=(yourusername) ALL
これができるなら、おそらくすべきではないでしょう。
PAMの構成はやや複雑で、認証メカニズムについては1つの自明があります。正しい構成には有限のセットがありますが、安全でない構成には無限のセットがあります。これにより、物事を変えようとして、何をしているのか正確にわからない場合は、物事が台無しになることはほぼ確実です。
セキュリティと「特定の状況で便利」のどちらかを選択する場合は、前者を選択してください。
同じアカウントに2つの異なるユーザー名を設定し、それぞれにパスワードを設定できます。 vipw
を実行して/etc/passwd
を手動で編集し、目的のアカウントの既存の行を複製してユーザー名を変更します(そして Gecosフィールド の場合は、ホームディレクトリとシェル)。 vipw -s
を実行し、そのユーザーの行を/etc/shadow
に複製します。新しいユーザー名でログインし、passwd
を実行して新しいユーザー名のパスワードを変更します。これで、同じアカウントに対して、異なるパスワードを持つ2つの異なるユーザー名ができました(ユーザーIDがアカウントを決定するものです)。
これはおそらく良い考えではありません。何をしようとしているかに応じて、他のアプローチがより適切な場合があります。
別のアカウントを作成し、最初のアカウントにSudoでそのアカウントとしてコマンドを実行する権限を与えます。
user1 ALL = (user2) ALL