LDAPで快適Linux環境 #5 NFSの設定

この記事は2020年に今は無き別サービスに投稿した記事を、今更Qiitaに再投稿したものです。

[前回](https://qiita.com/zawanume/items/efe59cce54ffbc470216)はクライアントからLDAPアカウントでログインするところまでいきました。今回は、ホームディレクトリをサーバーで管理するためにNFSの設定をしていきます。ここが一番苦労したところです。

# NFSサーバーの設定
サーバーパッケージをインストールします。

```bash:
root@server:~# apt install nfs-kernel-server
```
</br>
グループの共有ディレクトリを作成します。グループ`1st`の場合です。

```bash:
root@server:~# mkdir /home/share
root@server:~# cd /home/share

root@server:/home/share# mkdir 1st
root@server:/home/share# chown root:1st 1st
root@server:/home/share# chmod 770 1st
```

</br>

NFS共有の設定をします。`/etc/idmapd.conf`に自ドメインを記述します。

```bash:
root@server:~# vi /etc/idmapd.conf

Domain = example.local
```
</br>

`/etc/exports`の最終行にマウント情報を記述します。

```bash:
root@server:~# vi /etc/exports

/home/ldap 192.168.x.x/24(rw,root_squash)
/home/share 192.168.x.x/24(rw,no_root_squash)
```
`x.x`は適宜置き換えてください。`rw`で読み書き両方を許可します。`/home/ldap`は`root`であっても所有者でなければ見ることができないように`root_squash`とします。`/home/share`は`root`でも見られるように、`no_root_squash`とします。

設定を変更したら、デーモンを再起動します。
```bash:
root@server:~# systemctl restart nfs-server
```

# autofsの設定
クライアントがNFS共有されているディレクトリにアクセスしたときに自動でマウントされるように、`autofs`を使います。また、そのためのautomountマップはLDAPで管理します。

`LDAP`と`autofs`の連携に必要なschemaファイルを取り寄せるため、`autofs-ldap`をインストールします。
```bash:
root@server:~# apt install autofs-ldap
```
`autofs-ldap`をインストールすると、`/etc/ldap/schema/autofs.schema`が作成されます。これをldifファイルに変換し、LDAPサーバーに読み込ませます。
`autofs.conf`を新規作成し、以下の内容を記述します。
```conf:autofs.conf
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/autofs.schema
```
</br>
これをldifファイルに変換してサーバーに読み込ませます。

```bash:
root@server:~# slaptest -f autofs.conf -F /etc/ldap/slapd.d
```

`config file testing succeeded`と出たら成功です。しかしここで`slapcat`をすると`bad configulation directory!`と出てしまいます。これは生成されたldifファイルの所有者が`root:root`になっているのが原因なので、`openldap:openldap`に変更する。

```bash:
root@server:~# chown openldap:openldap /etc/ldap/slapd.d/cn=config/cn=schema/autofs.ldif
```
</br>

一応デーモンを再起動してから、`slapcat`してみます。

```
root@server:~# systemctl restart slapd
root@server:~# slapcat
```

# automountマップをLDAPに登録
`mount.ldif`を新規作成し、以下の内容を記述します。

```bash:
root@server:~# vi mount.ldif 

dn: ou=automount,dc=example,dc=local
objectClass: organizationalUnit
ou: automount

dn: ou=auto.master,ou=automount,dc=example,dc=local
ou: auto.master
objectClass: top
objectClass: automountMap

dn: cn=/homes,ou=auto.master,ou=automount,dc=example,dc=local
objectClass: top
objectClass: automount
automountInformation: ldap:ou=auto.home,ou=automount,dc=example,dc=local
cn: /homes

dn: ou=auto.home,ou=automount,dc=example,dc=local					
ou: auto.home
objectClass: top
objectClass: automountMap

dn: cn=*,ou=auto.home,ou=automount,dc=example,dc=local
objectClass: top
objectClass: automount
description: generic home directory
automountInformation: -rw,fstype=nfs,soft,intr 192.168.x.x:/home/ldap/&
cn: *

dn: cn=/mnt/share,ou=auto.master,ou=automount,dc=example,dc=local
objectClass: top
objectClass: automount
automountInformation: ldap:ou=auto.share,ou=automount,dc=uken,dc=local
cn: /mnt/share

dn: ou=auto.share,ou=automount,dc=example,dc=local	
ou: auto.share
objectClass: top
objectClass: automountMap

dn: cn=*,ou=auto.share,ou=automount,dc=example,dc=local
objectClass: top
objectClass: automount
description: share directory
automountInformation: -rw,fstype=nfs,soft,intr 192.168.x.x:/home/share/&
cn: *
```
`dc=example,dc=local`の下に、`ou=automount`を作成し、ここにautofsの設定を格納します。
`ou=automount`の下に`ou=auto.master`を作成し、この中にマウント情報を記述します。`cn`でクライアント側のマウントポイントを指定し、`automountInformation`でサーバー側のマウントマップの場所を指定します。
`ou=automount`の下に`ou=auto.home`,`ou=auto.share`を作成し、それぞれホームディレクトリのマウントマップ、共有ディレクトリのマウントマップとします。`cn=*`とし、`automountInformation`に`/hoge/&`と記述すると`/hoge`内の全てのサブディレクトリがマウント対象になります。
</br>
`ldapadd`コマンドで登録します。

```bash:
root@server:~# ldapadd -x -D cn=admin,dc=example,dc=local -W -f mount.ldif
```

# クライアントの設定
クライアントにパッケージ`nfs-common`,`autofs`,`autofs-ldap`をインストールします。

```bash
root@client:~# apt install nfs-common autofs autofs-ldap
```

</br>

`/etc/default/autofs`にautomountマップがあるLDAPサーバーの情報を記述します。

```bash
root@client:~# vi /etc/default/autofs

MASTER_MAP_NAME="ou=auto.master,ou=automount,dc=example,dc=local"
LOGGING="verbose"
LDAP_URI="ldap://192.168.x.x"
SEARCH_BASE="ou=automount,dc=example,dc=local"
MAP_OBJECT_CLASS="automountMap"
ENTRY_OBJECT_CLASS="automount"
MAP_ATTRIBUTE="ou"
ENTRY_ATTRIBUTE="cn"
VALUE_ATTRIBUTE="automountInformation"
```

</br>

`/etc/nsswitch.conf`の最終行に`automount`の設定を記述しておきます。

```bash:
root@client:~# vi /etc/nsswitch.conf

#最終行に追記
automount:    files ldap
```

設定が正しければ、再起動してログイン画面からLDAPユーザーにログインできるようになります。ログイン後、`env`で`HOME`を確かめてみましょう。
</br></br>
[次回](https://qiita.com/zawanume/items/f21a18a6e1f50e7fed18)はsudoの設定をしていきます。