суббота, февраля 23, 2008

Аутентификация: pam_usb

Это уж двухлетней давности моя статья, сейчас с удивлением обнаружил, что в блоге ее не опубликовал. Исправляюсь ;)

Наткнулся я тут на весьма интересную штуку - pam_usb называется. Коротко говоря, она позволяет производить аутентификацию пользователей в системе не по паролю, а по криптографическому ключу на флэшке.

Во-первых, кто такой PAM?

PAM - это Plugable Authentithication Modules, т.е. подключаемые модули аутентификации. Идея состоит в том, что любая софтина, которой нужно аутентифицировать пользователя (напр.: login, passwd, sudo...) обращается к сервису PAM. Тот, в свою очередь, глядя в конфиг, по очереди обращается к указанным модулям, спрашивая у них - пускать или не пускать? Если напротив модуля стоит required, то "признание" этим модулем пользователя является условием необходимым, но не достаточным. Если стоит sufficient - значит, признания даже только одним этим модулем достаточно. Там еще много настроек указать можно...

Т.е. теоретически, ничего не стоит, написав дополнителный модуль для PAM, настроить систему так, чтобы она вместо пароля спрашивала сетчатку глаза там или отпечатки пальцев...

PAM_USB

Это, как вы уже поняли, один из таких модулей. При попытке логина он ищет на указанном в конфиге устройстве файл вида /.auth/user.host, в хомяке пользователя - файл ~/.auth/id_pub, и проверяет их соответствие по алгоритму DSA.

Почему-то pam_usb нету в Debian, хотя распространяется он по GPL, и исходник весит 27Kb. Взять его можно на pamusb.org, жалко только, сайт в состоянии редизайна, и информации там по минимуму...

И еще: вообще-то, этому модулю пофиг, что вы ему укажете в качестве дивайса. С тем же успехом это может быть дискета или CD.

А нафига оно?

А вы еще не поняли? Пароль-то придумать ведь надо еще! Придумаешь простой - просто подобрать, придумаешь сложный - просто забыть. Про пароли, написанные карандашом на мониторе, я молчу. А носить всегда в кармане флэшку и выдергивать ее, уходя - все-таки гораздо легче, чем помнить пароль типа $KHYhguh(7438!

Как это сделать?

Итак, предположим, вы скачали и поставили пакет pam_usb. Что дальше делать?

Во-первых, надо сгенерировать ключи для нужных юзеров. Монтируем флэшку, скажем, в /mnt/flash, и говорим

# usbadm keygen /mnt/flash username 2048,

где username - это имя интересующего нас юзера, а 2048 - длина ключа. Повторяем это для всех нужных юзеров и отмонтируем флэшку.

Теперь надо настроить сам PAM. В директории /etc/pam.d лежат файлы, соответствующие программам, которые используют PAM: login, xdm, ... У меня в Debian'е все они включают (директивой @include) файл common-auth. В случае другого дистра, вероятно, придется поискать, куда именно вставлять интересующие нас строчки:

а) если мы хотим, чтобы система в случае вставленной флэшки пускала без пароля, а без флэшки спрашивала пароль - должны быть строки

auth sufficient pam_usb.so check_device=-1 check_if_mounted=-1 force_device=/dev/transcend fs=vfat

auth required pam_unix.so nullok_secure

(где /dev/transcend - дивайс флэшки, а vfat - тип файловой системы на ней).

б) если мы хотим, чтобы в систему можно было зайти только по флэшке, зато без пароля:

auth required pam_usb.so check_device=-1 check_if_mounted=-1 force_device=/dev/transcend fs=vfat

в) наконец, если мы хотим, чтобы можно было зайти только при вставленной флэшке, и спрашивался пароль:

auth required pam_usb.so check_device=-1 check_if_mounted=-1 force_device=/dev/transcend fs=vfat

auth required pam_unix.so nullok_secure

Например, у меня сейчас в файле common-auth записаны строки из варианта а).

7 комментариев:

  1. Анонимный2/24/2008 1:22 AM

    в debian testing пакеты все же есть :)

    libpam-usb - PAM module for authentication with a USB flash drive
    pamusb-tools - helper tools for the pam-usb module

    ОтветитьУдалить
  2. Радует. Правда, статья писалась во времена еще Debian Sarge - там не было.

    ОтветитьУдалить
  3. Как-то баловался с pam_usb, хорошая штука... Жаль только, что PAM сам по себе ограничен и нетривиален в настройке.
    Вот я, к примеру, хочу, чтобы один пользователь мог заходить только по флешке( не вводя пароль), другой по флешке или по паролю, а третий по флешке и по паролю. Ваши рецепты оговаривают все эти варианты, но при этом распространяются на всех пользователей сразу.

    ОтветитьУдалить
  4. Вот тут: http://www.kernel.org/pub/linux/libs/pam/modules.html есть список модулей PAM. В частности, вот этот: http://www-dev.cites.uiuc.edu/pam/ модуль позволяет задавать разную логику авторизации для разных юзеров.

    ОтветитьУдалить
  5. Вот я, к примеру, хочу, чтобы один пользователь мог заходить только по флешке( не вводя пароль), другой по флешке или по паролю, а третий по флешке и по паролю.
    ну, вообще-то в /etc/pamusb.conf можно очень даже раздельно написать для разных пользователей и разных устройств.

    кстати, в качестве рекламы :)
    под впечатлением от заметки настроил и себе pamusb. тонкости, с которыми столкнулся, описал у себя в блоге.

    ОтветитьУдалить
  6. Анонимный3/24/2008 1:48 AM

    В 0.4 версии usbadm уже отсутствут ... как быть?

    ОтветитьУдалить
  7. Анонимный4/12/2009 5:28 AM

    Интересная штука, надо бы попробовать... вот только раздобыть бы подешёвке флешку метров на 64 :) как раз для этого. А то 4-гектаровую жалко.

    ОтветитьУдалить