Чи можете ви надати обліковому запису користувача кілька паролів?


21

Я хочу призначити 2 паролі одному обліковому запису. Що я хочу знати, це 1) це можливо, і 2) які наслідки для цього мають безпека?

Я хочу це зробити, тому що зараз я зайнятий деякими локальними тестуваннями, і я вважав, що це буде зручно в деяких конкретних ситуаціях. Після деяких досліджень я знайшов щось під назвою PAM , але я намагаюся знайти інформацію про те, як працює установка / конфігурація.

Я запускаю Ubuntu 12.04.


1
Я, ймовірно, просто налаштувати, sudoщоб дозволити user1 запускати команди як user2. ( sudoне тільки для запуску команд як root; він може виконувати команди як будь-який користувач.)
cjm

Відповіді:


16

Так, хоча це досить рідко, це, безумовно, можливо.

Замість того, щоб намагатися реалізувати його самостійно, оскільки /etc/password /etc/shadowметод аутентифікації на основі замовчуванням не передбачає такої конфігурації, більш простим способом є делегування автентифікації до бек-енду, який вже підтримує декілька паролів для користувача.

Добре відомо , один LDAP , який userPasswordатрибут багатозначний в відповідно до RFC4519 :

Прикладом потреби в декількох значеннях в атрибуті 'userPassword' є середовище, коли кожного місяця від користувача потрібно використовувати інший пароль, створений деякою автоматизованою системою. Під час перехідних періодів, як і останній та перший день періодів, можливо, буде потрібно дозволити два паролі, щоб два періоди поспіль були дійсними в системі.

Незважаючи на цей RFC, вам, можливо, знадобиться змінити конфігурацію політики паролів у більшості реалізацій сервера каталогів, щоб цей параметр був фактично прийнятий.

З боку Linux, нічого не забороняє робити це (тут аккаунт з іменем testuserдавались pass1і pass2як 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
@JosephR. Ви праві. Я просто оновив свою відповідь після того, як реалізував те, що запропонував, і пережив це.
jlliagre

Відмінна відповідь, зараз працює як шарм. Дякую :)
агрегат1166877

7

Я просто спробував створити 2 записи для користувача у /etc/shadowфайлі, і це не вийшло. Першим, хто вводився, був введений пароль.

Приклад

Створено тестового користувача.

$ useradd -d /home/newuser newuser

Встановіть пароль на "super123":

$ passwd newuser

Вручну відредагуйте /etc/shadowфайл та зробивши другий запис:

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

Потім спробуйте увійти в обліковий запис за допомогою двох паролів.

su - newuser

Перше введення /etc/shadow- це те, що використовується, запис на другій позиції ніколи не працює, якщо ви перегорнете такі:

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

Тоді другий пароль працює, а перший не працює.

Використовуйте судо

Цей підхід є тотальним злом, я б просто скористався sudo, частково чому він sudoіснує.

Ви можете додати цей запис до файлу sudoers ( /etc/sudoers), який дозволить користувачеві joe дозволити робити що-небудь як ви:

joe ALL=(yourusername) ALL

Я фактично забув, що sudoможна це зробити. +1
агрегат1166877

4

Якщо ви можете це зробити, ви, мабуть, не повинні.

Конфігурація PAM є дещо складною і існує одна правда щодо механізмів аутентифікації: існує кінцевий набір правильних конфігурацій, але нескінченний набір небезпечних конфігурацій. Це майже впевненість, що якщо ви спробуєте змінити речі і не знаєте, що саме ви робите, ви накрутите речі.

Якщо вибір є між безпекою та "зручним у певних конкретних ситуаціях", вибирайте перший.


+1 за "безпеку над зручністю" (з якою я повністю згоден), але я є типом людини, яка хоче перевірити все, навіть якщо тільки для досвіду, тому не на 100% відповідь, яку я шукаю.
агрегат1166877

2

Ви можете встановити два імена користувачів, кожен зі своїм паролем, для одного облікового запису. Запустіть vipwредагування /etc/passwdвручну, скопіюйте існуючий рядок для облікового запису, який вас цікавить, і змініть ім’я користувача (і якщо вам подобається поле Gecos , домашній каталог та оболонка). Запустіть vipw -sі копіюйте рядок для цього користувача в /etc/shadow. Увійдіть під новим ім'ям користувача та запустіть, passwdщоб змінити пароль для нового імені користувача. Тепер у вас є два різних імені користувача з різними паролями для одного і того ж облікового запису (ідентифікатор користувача визначає обліковий запис).

Це, мабуть, не дуже гарна ідея. Залежно від того, що ви намагаєтеся зробити, інші підходи можуть бути більш підходящими:

  • Створіть інший обліковий запис і діліться файлами, скориставшись та виїхавши з контролю версій.
  • Створіть інший обліковий запис, створіть групу, до якої належать обидва облікові записи користувача, і надайте груповому запису доступ до файлів, якими ви хочете поділитися.
  • Створіть інший обліковий запис і надайте першому обліковому запису право запускати команди як цей обліковий запис з sudo:

    user1 ALL = (user2) ALL
    
  • Створіть ключ SSH для облікового запису, який дозволяє виконувати лише одну конкретну команду .

Ви не хочете скопіювати це на herehttp: //askubuntu.com/questions/567139/2-password-1-account-login?
Rinzwind
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.