oper777 03.03.2009 09:37

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 ?

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 ?

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



Тэги:
+ 13 -
Похожие Поделиться

LeniH 03.03.2009 09:52 #
Интересная статья.

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

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

Надо будет попробывать!
xT 03.03.2009 11:39 #
Перенести в How-to`s =)
exelens 03.03.2009 11:55 #
Готово
dima_boh 03.03.2009 11:57 #
Отлично! Спасибо за статью.
xcr 03.03.2009 13:44 #
Спасибо, полезно.
Господа, а ни у кого ли не было такого:
# 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.2009 15:18 #
А просто в консоли pmount работает?

pmount /dev/sdb1

и потом

pumount /dev/sdb1

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

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

Если кого-нибудь заинтересует, то этот патч здесь: http://sourceforge.net/tracker/index.php?func=detail&aid=2634450&group_id=127530&atid=708790
zb 04.03.2009 17:41 #
слишком много о себе думает утилита. а именно 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.2010 06:37 #
а можно ли сделать так чтобы он в качестве ключа использовал не файл на флешке а её серийный номер?
antigluk 03.08.2010 10:52 #
за статью спасибо) один вопрос: почему она в блоге 0byte?