カスタム検索
このエントリーをはてなブックマークに追加
tomo.gif (1144 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)To previous pageTo home pageMailing to me

pam_usbの話題と実験

Modified: 2 January 2005

pam_usbとは、USBメモリー内に、DSAキーを入れることにより、USBキーがなければログイン認証を強化するモジュールです。つまり、サーバーにUSBキーを差し込まないとログインできないようなシステムが実現できます。

 このpam_usbは、「日経Linux 2005年1月号」で紹介されていましたので、記事をみながら実験してみました。

参考1: 
http://wtnb.mydns.jp/blog/?wl_mode=more&wl_topic=9&wl_eid=2732
参考2(PAMの仕組みを知りたい)
http://www.itmedia.co.jp/help/tips/linux/l0230.html


ダウンロードからインストール
キーを作成する
動作テストする


 ダウンロードからインストール 

 ダウンロードする

公式サイトは以下です。

http://www.pamusb.org/

2005年1月2日に、"pam_usb-0.3.1.tar.gz"がダウンロードできました。


 インストールする

パッケージを確認する。

# rpm -q pam
pam-0.77-66.1
# rpm -q pam-devel
pam-devel-0.77-66.1
# rpm -q openssl
openssl-0.9.7a-40
# rpm -q openssl-devel
openssl-devel-0.9.7a-40
#

以下の手順で解凍し、Makeしてインストールします。

# tar zxvf pam_usb-0.3.1.tar.gz
    :
# cd pam_usb-0.3.1
# make
    :
# make install
    :
#

 キーを作成する 

 USBデバイスをマウントする

マウントポイントを作り、マウントする。

USBデバイスは、SCSIデバイスとして認識されます。したがって、デバイスは、コネクタの位置で"/dev/sda1"や"/dev/sdb1"となります。

# mkdir /media/usbdisk
# mount -t vfat /dev/sda1 /media/usbdisk
#

前半は、HUBの情報で、後半がUSBデバイスの情報です。

# cat /proc/bus/usb/devices

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 2.06
S:  Manufacturer=Linux 2.6.9-1.681_FC3 ohci_hcd
S:  Product=OHCI Host Controller
S:  SerialNumber=0000:00:02.0
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms

T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=55aa ProdID=b004 Rev=13.01
S:  Manufacturer=
S:  Product=USB MMC/SD
S:  SerialNumber=2C20AC9120
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
#

以下のコマンドでも確認できます。

# lsusb
Bus 001 Device 002: ID 0ea0:6803 Ours Technology, Inc. OTI-6803 Flash Disk
Bus 001 Device 001: ID 0000:0000
#


 DSAキーの生成

以下のコマンドで、DSAキーを作成します。

ユーザ"tomo"が認証ユーザの対象となります。

# usbadm keygen /media/usbdisk tomo 2048
[!] Directory /home/tomo/.auth/ not found, creating one...
[!] Directory /mnt/usb/.auth/ not found, creating one...
[!] Generating 2048 DSA key pair for tomo@fc3-osc
[!] Extracting private key...
[+] Private key extracted.
[+] Private key successfully written.
[!] Writing public key...
[+] Public key successfully written.
#

 3行目まで表示したところで、しばらく止まります。我慢して待ちましょう。

 DSAキーの秘密鍵の確認

DSAキーの秘密鍵は、USBデバイス内に作られますので、内容を確認してみます。

# cd /media/usbdisk/.auth
# ls -l
合計 8
-rwxr-xr-x  1 root root 1192  1月  2 12:30 tomo.fc3-osc
# more tomo.fc3-osc
-----BEGIN DSA PRIVATE KEY-----
MIIDPgIBAAKCAQEA6ApQurrVTD47PM0ErYA/emXDY2wVZUTR36AcXA7RD7d9YofN
dxTddWzZE1ymI/siwSFrQTqtFjGCiFndn4BPJjce6W2xGn9dFJ63WhSPITRab8b/
6MkAYOsfJX/Bu6XTgSOkt0ldSglR0dGLbt0EG+Jd09p3Jggnv7sDu1sxVdvqNAv8
    :
j9lBgHJ38XTI5QFuxiThASkpePcNBKpHwtIeeGZIAmOu3DcULeRdMCT6t0QWVPPa
NXPVReoX+GqtwJxjUSPNVydNBO2pBQcE8Bt78BE2z7C4Bi/D/Yv06s454D6A1g8i
v9t7V0Ro9yI4PQr2iA0aTP1swieS7loi0tKflA8xqDnrHEeZpfMyWqVBiEy9md9o
cnWIb9ZsgY6J7qNTAyyCfqgazF/3RiBasq85FtbcqICoCwVt94IhVkvPWAIVAJmx
M4fxYdiqAkjPwhe1cxYvbi2b
-----END DSA PRIVATE KEY-----
#

上記のように、USBデバイスに、".auth"というディレクトリが作られ、その中に、"tomo.fc-osc"というファイルが作られています。キーはテキストファイルなので表示できます。

 DSAキーの公開鍵の確認

# cd /home/tomo/.auth
# ls
id_pub
# more id_pub
-----BEGIN PUBLIC KEY-----
MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQDoClC6utVMPjs8zQStgD96ZcNjbBVl
RNHfoBxcDtEPt31ih813FN11bNkTXKYj+yLBIWtBOq0WMYKIWd2fgE8mNx7pbbEa
f10UnrdaFI8hNFpvxv/oyQBg6x8lf8G7pdOBI6S3SV1KCVHR0Ytu3QQb4l3T2ncm
CCe/uwO7WzFV2+o0C/zFCnBYyUD7KVHhTE8usjCU4vn72K8qpOf1dx3LTThL/ivE
     :
h0yKLRGb6w3CwuxVa2LqHaeGrY/ZQYByd/F0yOUBbsYk4QEpKXj3DQSqR8LSHnhm
SAJjrtw3FC3kXTAk+rdEFlTz2jVz1UXqF/hqrcCcY1EjzVcnTQTtqQUHBPAbe/AR
Ns+wuAYvw/2L9OrOOeA+gNYPIr/be1dEaPciOD0K9ogNGkz9bMInku5aItLSn5QP
Mag56xxHmaXzMlqlQYhMvZnfaHJ1iG/WbIGOie6jUwMsgn6oGsxf90YgWrKvORbW
3KiAqAsFbfeCIVZLz1g=
-----END PUBLIC KEY-----
#

 認証の指定

"/etc/pam.d/login"に、2行目に、以下のように追加します。

#%PAM-1.0
auth       required     /lib/security/pam_usb.so force_device=/dev/sda1 mntpoint=/media/usbdisk !check_device fs=vfat check_if_mounted=1
auth       required     pam_securetty.so
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_stack.so service=system-auth
session    optional     pam_console.so
# pam_selinux.so open should be the last session rule
session    required     pam_selinux.so multiple open

 動作テストする 

 コンソールログイン

"/etc/pam.d/login"では、コンソールログインで認証が働きます。

まずはUSBキーを入れたまま、コンソールから、キーを作成したユーザ("tomo")でログインして、できることを確認します。

ログオフしてから、USBキーを抜いて、再度ログインしてみます。今度はできないことを確認します。

ここで、USBキーを入れますとUSBがマウントされた旨のメッセージが出てきます。

今度はログインできます。

ログインではかならずUSBキーを確認するので、未登録の"root"では、USBキーの有無に関係なく、ログオンできなくなります。

リモートで"ssh"で接続する場合は、USBキーの認証が働かないのでログインできます。

"ssh"でもUSBキーの認証を機能させたい場合は、"/etc/pam.d/sshd"に認証の設定をすれば有効にできるようですが、リモートで使っても意味がないですよね。


To previous pageTo home pageMailing to meJump to Top of pageline.gif (927 ツバツイツト)line.gif (927 ツバツイツト)tomo.gif (1144 ツバツイツト)
カスタム検索



このエントリーをはてなブックマークに追加