CentOS 6.5 で OpenLDAP（8）SSHのログイン制限

## 概要
LDAPに登録されている全員にSSHログインを許可しないようにする
特に、テストサーバーと本番サーバーなど、サーバー環境が分かれている場合、本番サーバーには特定のユーザーしかアクセス出来ないようにする
この際、「description」属性を使用し、制限をかける

## 前提
* 部長とシステム運用課の課長と社員は、本番サーバーにアクセス権を持つ
* 部長とシステム開発課の課長と社員は、テストサーバーにアクセス権を持つ

## LDAPサーバーに各ユーザーの権限を設定する
```text:/etc/openldap/ldif/auth.ldif
# 部長：武田 貴彦
dn: uid=takahiko.takeda,dc=People,dc=example,dc=com
changetype: modify
add: description
description: production
-
add: description
description: development

# 開発課 課長：横山 真也
dn: uid=shinya.yokoyama,dc=People,dc=example,dc=com
changetype: modify
add: description
description: development

# 運用課 課長：井上 修
dn: uid=osamu.inoue,dc=People,dc=example,dc=com
changetype: modify
add: description
description: production

# 開発課 社員：石川 直樹
dn: uid=naoki.ishikawa,dc=People,dc=example,dc=com
changetype: modify
add: description
description: development

# 運用課 社員：田村 和夫
dn: uid=kazuo.tamura,dc=People,dc=example,dc=com
changetype: modify
add: description
description: production
```

```shell-session
ldapmodify -x -D "cn=Manager,dc=example,dc=com" -W -f /etc/openldap/ldif/auth.ldif
```

## テストサーバー側設定
### /etc/nslcd.conf 編集
```text:/etc/nslcd.conf
uid nslcd
gid ldap
uri ldaps://192.168.0.10/
base dc=example,dc=com
ssl yes
tls_cacertdir /etc/openldap/cacerts
tls_reqcert allow

filter passwd (description=development)
filter shadow (description=development)
filter group  (objectClass=posixGroup)
```

### /etc/ssh/ldap.conf 編集
```text:/etc/ssh/ldap.conf
uri ldaps://192.168.0.10/
base dc=example,dc=com
host 192.168.0.10
ssl yes
tls_cacertdir /etc/openldap/cacerts
tls_checkpeer yes
tls_reqcert allow

pam_filter description=development
```

### /etc/pam_ldap.conf
```text:/etc/pam_ldap.conf
uri ldaps://192.168.0.10/
base dc=example,dc=com
host 192.168.0-.10
ssl yes
tls_cacertdir /etc/openldap/cacerts
tls_checkpeer yes
tls_reqcert allow

pam_filter description=development
nss_base_passwd ou=People,dc=example,dc=com?sub?description=development
nss_base_shadow ou=People,dc=example,dc=com?sub?description=development
nss_base_group  ou=Group,dc=example,dc=com?sub?objectClass=posixGroup
```

### 再起動
```shell-session
reboot
```

## 本番サーバー側設定
### /etc/nslcd.conf 編集
```text:/etc/nslcd.conf
uid nslcd
gid ldap
uri ldaps://192.168.0.10/
base dc=example,dc=com
ssl yes
tls_cacertdir /etc/openldap/cacerts
tls_reqcert allow

filter passwd (description=production)
filter shadow (description=production)
filter group  (objectClass=posixGroup)
```

### /etc/ssh/ldap.conf 編集
```text:/etc/ssh/ldap.conf
uri ldaps://192.168.0.10/
base dc=example,dc=com
host 192.168.0.10
ssl yes
tls_cacertdir /etc/openldap/cacerts
tls_checkpeer yes
tls_reqcert allow

pam_filter description=production
```

### /etc/pam_ldap.conf
```text:/etc/pam_ldap.conf
uri ldaps://192.168.0.10/
base dc=example,dc=com
host 192.168.0-.10
ssl yes
tls_cacertdir /etc/openldap/cacerts
tls_checkpeer yes
tls_reqcert allow

pam_filter description=production
nss_base_passwd ou=People,dc=example,dc=com?sub?description=production
nss_base_shadow ou=People,dc=example,dc=com?sub?description=production
nss_base_group  ou=Group,dc=example,dc=com?sub?objectClass=posixGroup
```

### 再起動
```shell-session
reboot
```

## 確認
### SSH確認
開発課は本番サーバーへ接続できない
運用課はテストサーバーへ接続できない
部長は全サーバーにアクセスできる

以上を確認する