LDAPサーバ(Debian10)

2020/6/26,2020/8/8


インストール

Jessie(Debian8)と同じ手順でインストールする。
apt -y install slapd ldap-utils


インストール中にLDAP管理者のパスワードを入力する。
ldap01.png
パスワードは2回入力
ldap02.png

ポリシー

実験室内での使用を前提にする。
  1. LDAPサーバドメインはdc=takahashi,dc=labとする。
  2. 在籍中のユーザだけを登録する。
  3. ユーザ名、uidは学籍番号とする。
  4. ユーザの登録、削除はバッチファイルを使う。
  5. ユーザアカウント生成時にホームディレクトリも生成する。
  6. 初期パスワードを用意する。ログイン後、各ユーザが変更する。

設定

LDAPドメイン他は現在のドメイン名(FQDN等)から適当に生成される。
現在のドメイン名と異なるLDAPドメインを使うときは注意する。
LDAPドメインやLDAP管理者に関する設定を確認する。
slapcat
#dn: dc=takahashi,dc=lab  LDAPドメインを確認
#dn: cn=admin,dc=takahashi,dc=lab  管理者を確認
#dn: dc=....が違うときは、dpkg-reconfig slapd
#/etc/ldap/slapd.d/cn=config.ldif他を作り直したのちslapcatで再度確認する

base.ldapを作る。
# base.ldif (2020/06/26)
cat << 'EOL' > base.ldif
dn: ou=people,dc=takahashi,dc=lab
objectClass: organizationalUnit
ou: people

dn: ou=group,dc=takahashi,dc=lab
objectClass: organizationalUnit
ou: group
EOL

LDAPサーバにbase.ldifを登録する。(管理者がわからないときはslapcatで確認する。)
-Wは実行時にパスワード入力プロンプトが出る。 -w xxxxxxにLDAP管理者のパスワードを記述するとパスワード入力プロンプトは省略できる。
ldapadd -x -D cn=admin,dc=takahashi,dc=lab -W -f base.ldif
#または
#ldapadd -x -D cn=admin,dc=takahashi,dc=lab -w xxxxxx -f base.ldif
slapcat ;
#dn: ou=people,dc=takahashi,dc=labを確認
#dn: ou=group,dc=takahashi,dc=labを確認
userPassword::以下はbase64でエンコードされている。デコードしてみると{SSHA}....がでてくる。
echo "xxxxxxxxxxxxxxxx"| base64 -d
{SSHA}xxxxxxxx

間違えた時は
ldapdelete -x -D cn=admin,dc=takahashi,dc=lab "ou=people,dc=takahashi,dc=lab" -W
ldapdelete -x -D cn=admin,dc=takahashi,dc=lab "ou=group,dc=takahashi,dc=lab" -W

ユーザ登録

ユーザ用初期パスワードを生成
mkdir ~/LDAP;cd ~/LDAP
#password生成
cd ~/LDAP;slappasswd -s xxxxxxxx > xxxxxxxx.ssha

ユーザ登録用スクリプトmyldapadd.shでユーザ情報他を生成する
#!/bin/bash
#~/LDAP/myldapadd.sh usename
#  uid = username(serial number) i.e. 12345
#  password = xxxxxxxx
SUFFIX='dc=takahashi,dc=lab'
USERLDIF='ldapuser.ldif'
CN=$1
USERDIR=/home$2/$CN
PASS=`cat ../xxxxxxxx.ssha`

#------------
# ldapuser.ldif
    echo "dn: uid=$CN,ou=people,$SUFFIX" >> $USERLDIF
    echo "objectClass: inetOrgPerson" >> $USERLDIF
    echo "objectClass: posixAccount" >> $USERLDIF
    echo "objectClass: shadowAccount" >> $USERLDIF
    echo "cn: $CN" >> $USERLDIF
    echo "sn: $CN" >> $USERLDIF
    echo "userPassword: $PASS" >> $USERLDIF
    echo "loginShell: /bin/bash" >> $USERLDIF
    echo "uidNumber: $CN" >> $USERLDIF
    echo "gidNumber: $CN" >> $USERLDIF
    echo "homeDirectory: $USERDIR" >> $USERLDIF
    echo >> $USERLDIF

    echo "dn: cn=$CN,ou=group,$SUFFIX" >> $USERLDIF
    echo "objectClass: posixGroup" >> $USERLDIF
    echo "cn: $CN" >> $USERLDIF
    echo "gidNumber: $CN" >> $USERLDIF
    echo "memberUid: $CN" >> $USERLDIF
    echo >> $USERLDIF

#user dir(home dir)
    mkdir $USERDIR
    chmod 700 $USERDIR
    cp -R /etc/skel/* $USERDIR/ 
    cp -R /etc/skel/.[A-z]* $USERDIR/
    ln -s /tmp .cache
    chown -R $CN:$CN $USERDIR

ユーザ情報の生成・登録作業を行う。一件づつ登録してもよいが、ユーザが多いときはスクリプトを作成してもよい。

#!/bin/bash
#~/LDAP/20200808/user.sh
#2020/08/08

#delete students 旧ユーザを削除
#ldapdelete -x -D "cn=admin,dc=takahashi,dc=lab" -w xxxxxxxx "uid=10300,ou=people,dc=takahashi,dc=lab"
#ldapdelete -x -D "cn=admin,dc=takahashi,dc=lab" -w xxxxxxxx "cn=10300,ou=Group,dc=takahashi,dc=lab"
#rm -rf /NFSx/10300

#add students 新規ユーザを登録
#rm -rf ldapuser.ldif
../myldapadd.sh 5177 0
../myldapadd.sh 445 1
../myldapadd.sh 17000 2

ldapadd -x -D cn=admin,dc=takahashi,dc=lab -w xxxxxxxx -f ldapuser.ldif


ユーザ削除

ユーザを指定して、ユーザ情報とグループを削除
#ldapdelete -x -D "cn=admin,dc=takahashi,dc=lab" -w xxxxxxxx "uid=10300,ou=people,dc=takahashi,dc=lab"
#ldapdelete -x -D "cn=admin,dc=takahashi,dc=lab" -w xxxxxxxx  "cn=10300,ou=Group,dc=takahashi,dc=lab"

Server World(https://www.server-world.info/query?os=Debian_10&p=openldap&f=1)