03.03.09 09:37 oper777

0byteАвторизация с помощью Flash-накопителя

Подумал, что было бы неплохо использовать usb-flash (или SD-карту в ридере лэптопа) для авторизации на своих машинах без пароля. Сделать это оказалось очень просто.


Нужен пакет pam_usb, который скорее всего имеется в репозитории вашего дистрибутива.
Установим его.

Mandriva:
#urpmi pam_usb

Gentoo:
# echo "sys-auth/pam_usb" >> /etc/portage/package.keywords
# emerge -av ">=sys-auth/pam_usb-0.4.1"


Debian:
# apt-get install libpam-usb pamusb-tools

Из исходных кодов:
$ tar -zxvf pam_usb-<version>.tar.gz
$ cd pam_usb-<version>
$ make
# make install

Так же в процессе настройки понадобились пакеты python-dbus и pmount

#urpmi python-dbus pmount

После окончания установки подключаем USB-устройство (монтировать не надо) и используем pamusb-conf для добавления накопителя в конфигурационный файл:

# pamusb-conf --add-device usbkey
Please select the device you wish to add.
* Using "JetFlash TS2GJFV60 (XXXXXXXXXXXXXXXXXXXXXX)" (only option)

Which volume would you like to use for storing data ?
* Using "/dev/sda1 (UUID: 4871-9E7D)" (only option)

Name : usbkey
Vendor : JetFlash
Model : TS2GJFV60
Serial : XXXXXXXXXXXXXXXXXXXXXX
UUID : 4871-9E7D

Save to /etc/pamusb.conf ?
[Y/n] y
Done.


Вместо usbkey можно написать что угодно.

Теперь нужно добавить пользователей.

# pamusb-conf --add-user root
Which device would you like to use for authentication ?
* Using "usbkey" (only option)

User : root
Device : usbkey

Save to /etc/pamusb.conf ?
[Y/n] y
Done.


Таким же образом можно добавить остальных пользователей.

Проверим правильность настроек:

#pamusb-check root
* Authentication request for user "root" (pamusb-check)
* Device "usbkey" is connected (good).
* Performing one time pad verification...
* Regenerating new pads...
* Access granted.


Далее необходимо настроить систему таким образом, чтобы она обращалась к usb-устройствам для авторизации пользователя, а при отсутствии таковых - запрашивала пароль. В зависимоти от операционной системы, нужные файлы называются по-разному. Найдите в каталоге /etc/pam.d/ файл common-auth (Ubuntu, Debian) или system-auth (Gentoo, Mandriva). Если этих файлов нет, то придется вносить изменения в конфигурационный файл каждого сервиса, для которого будет действовать авторизация по USB-устройству.

В этом файле найдите строчку, похожую на эту:

auth sufficient pam_unix.so try_first_pass likeauth nullok

или

auth required pam_unix.so nullok_secure

и добавьте перед ней следующую строчку:

auth sufficient pam_usb.so

Проверим:

$ su
* pam_usb v0.4.2
* Authentication request for user "root" (su)
* Device "usbkey" is connected (good).
* Performing one time pad verification...
* Access granted.


В документации сказано, что этого достаточно, однако у меня KDM не принимал USB-накопитель вместо пароля. Пришлось внести изменения и в /etc/pam.d/kde3. Нужно точно так же добавить строчку

auth sufficient /lib/security/pam_usb.so

Теперь можно пробовать в KDE заблокировать сеанс (Ctrl+Alt+L) и разблокировать нажатием Enter.

В пакете pam_usb есть еще один инструмент - pamusb-agent. Это постоянно работающая программа, выполняющая определенные действия при подключении и отключении USB-ключа. В следующем примере при извлечении накопителя сеанс блокируется и запускается заставка:

GNOME (gnome-screensaver):
<user id="yuri">
<device>MyDevice</device>
<agent event="lock">gnome-screensaver-command --lock</agent>
<agent event="unlock">gnome-screensaver-command --deactivate</agent>
</user>


KDE (kscreensaver):
<user id="yuri">
<device>MyDevice</device>
<agent event="lock">dcop kdesktop KScreensaverIface lock</agent>
<agent event="unlock">dcop kdesktop KScreensaverIface quit</agent>
</user>


Вы можете поставить туда любые другие команды. Теперь осталось сделать добавить pamusb-agent в автозагрузку:

GNOME:
System -> Preferences -> Sessions, выберите Startup Programs и нажмите Add, введите pamusb-agent и нажмите ОК. Нажмите Close.

KDE:
cd ~/.kde/Autostart && ln -s /usr/bin/pamusb-agent pamusb-agent



LeniH 03.03.09 09:52 # +1
Интересная статья.

А во время загрузки можно сделать так если стоит флешка то грузиться, если же нет карты в ридере то он пишет нет ключа загрузки!
oper777 03.03.09 10:25 # +2
Может быть скажу ерунду, но первое, что пришло в голову - это переместить загрузчик (или initrd) с жесткого диска на флеш, тогда система просто не запустится.
l1feh4ck3r 03.03.09 10:36 # +5
Еще предложи весь /boot на флэшку кинуть ;)
xT 03.03.09 11:24 # +4
Если карты нету в ридере - то вообще ничего не писать =) для секюрности
l1feh4ck3r 03.03.09 10:37 # +0
Прикольная статья. Главное - может быть полезной в определенных кругах.
Jayrome 03.03.09 10:41 # +3
Оказывается, всё гораздо проще, чем я думал. :)
LeniH 03.03.09 11:24 # +1
просто иногда надо чтобы доступ к ноуту не имели даже чтобы он загружался)))

с boot разделом конечно удобно..

Надо будет попробывать!
xT 03.03.09 11:39 # +6
Перенести в How-to`s =)
exelens 03.03.09 11:55 # +-1
Готово
dima_boh 03.03.09 11:57 # +0
Отлично! Спасибо за статью.
xcr 03.03.09 13:44 # +0
Спасибо, полезно.
Господа, а ни у кого ли не было такого:
# pamusb-check xcr
* Authentication request for user "xcr" (pamusb-check)
* Device "test2" is connected (good).
* Performing one time pad verification...
Error: device /dev/sdb1 is not removable
* Mount failed
* Access denied.
oper777 03.03.09 15:18 # +0
А просто в консоли pmount работает?

pmount /dev/sdb1

и потом

pumount /dev/sdb1

?
oper777 03.03.09 15:26 # +3
Нагуглил, что это ошибка в pmount, вернее даже в libsysfs2, которую использует pmount. Для её обхода можно внести в файл /etc/pmount.allow имя устройства, т.е.

/dev/sdb1
xcr 03.03.09 15:54 # +0
О, да, это оно. Спасибо!
Я тоже гуглил, но не нашел ничего..
Denis 03.03.09 17:38 # +1
Да, классная вещь. Недавно столкнулся, заодно и патчик для нее набросал.
Суть патча заключается в том, что он добавляет в конфиг опцию, при включении которой ключ (pad) на флешку пишется не каждый раз при вставливании ее или по истечению срока жизни ключа, а один раз (только если ключ не существует), тем самым уменьшая объем записи на флешку и, соответственно, продлевая ее жизнь. ;)

Если кого-нибудь заинтересует, то этот патч здесь: http://sourceforge.net/tracker/index.php?func=detail&aid=2634450&group_id=127530&atid=708790
zb 04.03.09 17:41 # +0
слишком много о себе думает утилита. а именно mmcblk0 в sysfs не считается removable, соответвенно и способа туда ключ сделать нету. так же не очень ясно требование обязательно держать раздел.
тогда как дураку понятно что можно и по просто наличию девайса проверять данные. в общем сделано неудобно, критерии плохие, я бы не стал ей доверять безопасность :)

ps:
sudo pamusb-conf --verbose --add-device keys
Inspecting /org/freedesktop/Hal/devices/pci_1180_822_mmc_host_mmc_card_rca55091_storage_mmc_sd_mmc
Invalid: Not a removable device

при любом раскладе.
Alx 29.06.10 06:37 # +0
а можно ли сделать так чтобы он в качестве ключа использовал не файл на флешке а её серийный номер?
Посты Комментарии
Последние посты
Посты Комментарии
Последние комментарии
Посты Комментарии
Изменения
Посты Комментарии Изменения Черновики Избранное
Черновики (все)
Посты Комментарии Изменения Черновики Избранное
Избранное (всё)
Посты Комментарии Изменения Черновики Избранное
Лучшие блоги (все 127)
Элита (все 2421 из 196 городов)
welinux.ru