arinux

Linux サーバー設定備忘録
<< openLDAP 構築(26) - 複製(レプリケーション - syncrepl) (2) | main | openLDAP 構築(28) - アカウント管理(2) >>
openLDAP 構築(27) - アカウント管理(1)


メモ ユーザー管理(passwd と shadow)


LDAP をユーザ認証に使う場合、LDAPにユーザのアカウント情報を格納しておくことになります。LDAP ではアカウント情報はユーザごとにディレクトリエントリーを作ります。


objectclass は schema ファイルで定義されています。定義されていない objectclass は使うことができません。objectclass というのは、このディレクトリエントリーが どのような情報であるかを表すための属性です。ここで説明するアカウント情報は 「posixAccount」 という objectclass を使っています。


「objectclass posixAccount」 は /usr/local/etc/openldap/schema/nis.schema に定義されています。この定義によると、「objectclass posixAccount」 は cn, uid, uidNumber, gidNumber, homeDirectory を持たないといけない(MUST)、となっています。


虫眼鏡 objectclass posixAccount の定義

objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'
        DESC 'Abstraction of an account with POSIX attributes'
        SUP top AUXILIARY
        MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
        MAY ( userPassword $ loginShell $ gecos $ description ) )


/etc/passwd と posixAccount の対応は以下の通りです。


gamba:x:1001:1001:gamba user:/home/gamba:/bin/bash
----- - ---- ---- ---------- ----------- ---------
  | |  |   |      |          |         └ loginShell
  | |  |   |      |          └ homeDirectory
  | |  |   |      └ gecos※2
  | |  |   └ gidNumber
  | |  └ uidNumber
  | └ userPassword※1
  └ uid


※1
エントリーに 「objectClass: shadowAccount」 を記述すると 「x」 と書かれます。そうでなければ、暗号化されたパスワードがここに書かれます。


※2
「gecos」 は General Electric Comprehensive Operating System の略称で、 General Electric(GE)の OS です。かつてUnixマシンから GECOS マシンにプリンタ出力やバッチ処理要求を送信する際に、パスワードファイルからユーザー情報を取り出して付加したことに由来しています。このフィールドは省略可能で実質意味がありません。また、ユーザーのフルネームを書くことが多いですが、その名前からパスワードを推測されることもあるので、パスワードに通じる文字列を書くのは好ましくありません。


虫眼鏡 objectclass shadowAccountの定義


shadow 情報は 「shadowAccount」 という objectclass を使用し、同じく nis.schema に定義されています。


objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount'
        DESC 'Additional attributes for shadow passwords'
        SUP top AUXILIARY
        MUST uid
        MAY ( userPassword $ shadowLastChange $ shadowMin $
              shadowMax $ shadowWarning $ shadowInactive $
              shadowExpire $ shadowFlag $ description ) )


/etc/shadow と shadowAccount の対応は以下の通りです。


gamba:$1$DZi.QrCx$p7g9FVn:13654:0:99999:7:::0
----- ------------------- ----- - ----- - - - -
 |            |           |  |  |  |||└ shadowFlag
 |            |           |  |  |  ||└ shadowExpire
 |            |           |  |  |  |└ shadowInactive
 |            |           |  |  |  └ shadowWarning
 |            |           |  |  └ shadowMax
 |            |           |  └ shadowMin
 |            |           └ shadowLastChange
 |            └ userPassword
 └ uid 


虫眼鏡 各フィールドの意味


shadowLastChange最終パスワード変更日時。 1970/1/1から、パスワードが最後に更新された日までの日数が入る。 「0」を入れておくと、最初のログイン時にパスワード変更を求められ、 その日までの日数が自動的に記述される。
shadowMinパスワード変更不能日数。一度パスワードを変更したら、 一定期間パスワード変更をさせないための日数。「0」を記述すると、 制限がなくなる。
shadowMaxパスワード変更要求迄の日数。次にパスワードを強制的に 変更させられるまでの日数。
shadowWarningパスワード期限満了警告日数。 パスワードがもうすぐ期限切れになる、と警告を何日前に出すかの日数。
shadowInactiveアカウント無効までの日数。 パスワード期限切れになってから、何日後にアカウントを抹消するかの日数。
shadowExpireアカウント期限満了の日付。 1970/1/1から、アカウントが抹消された日までの日数。
shadowFlag予約。 将来的に何か情報を追加するようシステムが変更された場合に, その新規情報を書き込むために空けてある。自動的に「0」が記述される。


メモ アカウントの追加


例として、「gamba」ユーザーを追加します。


  1. MD5ハッシュ値でパスワードを生成します。
    [root]# slappasswd -h "{MD5}"
    New password:
    Re-enter new password:
    {MD5}X03MO1qnZdYdgyfeuILPmQ==
    


  2. ユーザー追加のldifファイルを作成します。
    [root]# vi useradd01.ldif
    
    dn: uid=gamba,ou=people,dc=examples,dc=com
    uid: gamba
    objectClass: top
    objectClass: account
    objectClass: posixAccount
    objectClass: shadowAccount
    cn: gamba
    uidNumber: 1001
    gidNumber: 1001
    userPassword: {MD5}X03MO1qnZdYdgyfeuILPmQ==    # 1. で生成したパスワード
    homeDirectory: /home/gamba
    loginShell: /bin/bash
    gecos: gamba user
    shadowLastChange: 0
    shadowMin: 0
    shadowMax: 99999
    shadowWarning: 7
    


  3. エントリーを追加します。
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./useradd01.ldif
    Enter LDAP Password:
    adding new entry "uid=gamba,ou=people,dc=examples,dc=com"
    


  4. 検索して確認します。
    [root]# ldapsearch -x -h localhost -b "uid=gamba,ou=people,dc=examples,dc=com"
    (省略)
    



メモ アカウントのロック


  1. 「loginShell」 属性を変更する LDIF ファイルを作成します。
    [root]# vi gamba_mod01.ldif
    
    dn: uid=gamba,ou=people,dc=examples,dc=com
    changetype: modify
    replace: loginShell
    loginShell: /bin/false
    


  2. エントリーを更新します。
    [root]# ldapmodify -x -W -D "cn=Manager,dc=examples,dc=com" -f ./gamba_mod01.ldif
    Enter LDAP Password:
    modifying entry "uid=gamba,ou=people,dc=examples,dc=com"
    


  3. 検索して確認します。
    [root]# ldapsearch -x -h localhost uid=gamba
    (省略)
    loginShell: /bin/false
    (省略)
    


  4. ロックしたアカウントでログインしてみます。
    [root@test16]# ssh -l gamba 10.1.1.15
    gamba@10.1.1.15's password:
    Last login: Fri Nov  2 10:32:29 2007 from 10.1.1.16
    Connection to 10.1.11.15 closed.
    


  5. 「loginShell」 を 「/bin/false」 ではなく 「/sbin/nologin」 にした場合は、ログイン時のメッセージは、以下のようになります。
    [root@test16]# ssh -l gamba 10.1.1.15
    gamba@10.1.1.15's password:
    Last login: Fri Nov  2 10:33:58 2007 from 10.1.1.16
    This account is currently not available.
    Connection to 10.1.1.15 closed.
    



つづく

| arinux | openldap | 15:29 | comments(0) | trackbacks(0) | pookmark |









http://arinux.net/trackback/31
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ 掲載予定のタイトル
  • Wordpress
  • Pukiwiki
  • SMTPs/POPs/IMAPs
  • fml
  • Tips
+ CSS Nite
+ MOBILE
qrcode
+ LINKS
+ RECOMMEND
+ PROFILE