はじめに
Ubuntu20.04、Ubuntu22.04の計算機群でNISでユーザー管理をして、NFSでファイルを共有する一連の計算機を連携させるために必要な手続きをまとめる。やりたいことは大体CentOS7(研究室内新設サーバー)の設定メモ #centos7 - Qiitaなんだけど、Ubuntuで組むことにしたのでまとめなおす。
いつも書きかけ
お世話になったリファレンス: ubuntu 16.04 or raspberry pi 3 でのNISの設定 #Raspberrypi3 - Qiita
構築環境の構造
ドメイン名: hoge
構成マシン | IP (Intra) | 役割・コメント |
---|---|---|
hoge000 | 192.168.x.y1 | hoge00nのNIS+NFSサーバー |
hoge001 | 192.168.x.y2 | NIS+NFSクライアント1 |
hoge002 | 192.168.x.y3 | NIS+NFSクライアント2 |
... | ... | ... |
hoge000:/home
とhoge000:/opt_share
がNFSのマウント元。マウント先もPATHは同じ。
サーバーとクライアントでOSのバージョンや、CPU、GPUの有無等の環境が異なるので、各計算機でopt
にはローカライズしたアプリを入れて、本構築環境全体にわたって、共有したいものを/opt_share
として準備して、NFSでマウントする。
準備
ホスト名の恒久的変更
hostnamectl set-hostname hoge000
でホスト名をhoge000
に変更。hoge001
, hoge002
も同様に。
NISクライアント管理用アカウントの作成(クライアント)
ユーザー名がNISのサーバーとクライアントで被っていると、(設定にもよるが)NISサーバーのユーザーにしかログインできなくなる。
一方で、管理用アカウントはNISクライアントのローカルにもあった方が良い(RedHat系と違ってrootを使わずsudoを使うので)ので、専用アカウントを作っておくと便利。
sudo adduser kanri_hoge001 #ユーザー追加
sudo gpasswd -a kanri_hoge001 sudo #該当ユーザーにsudo権限追加
管理用アカウントkanri_hoge001
のUID, GIDがNISサーバーに用意されているものと重なるといろいろトラブるので(kanri_hoge001
を指定したつもりが、NISサーバーの同じUIDを持っているアカウントだとみなされてしまうとか)、UID/GIDを1000大きな数字にしておく
sudo usermod -u 2000 kanri_hoge001 #最初に割り振られたUIDが1000だったと想定
sudo groupmod -g 2000 kanri_hoge001 #最初に割り振られたGIDが1000だったと想定
確認は/etc/passwd
, /etc/group
を読むか、id
コマンドで正しく設定されているか確認。
この作業をし忘れてNIS/NFSのセットアップを終え、運用を始めた後に対処しようとすると、変更箇所が多岐にわたるので、できるだけ早い段階で行っておいた方がよい。(たくさんあるファイルのpermissionとかをchuser
, chgrp
などで修正する必要があるし、複数ログインなどでロックされていてファイルの属性が変えられなかったりで、/etc/passwd
, /etc/group
の直書換等が発生した実例があるため。)
NIS+NFSサーバー
NISとNFSのサーバーの設定はどちらを先にやってもよい。
NISサーバーの設定
お世話になりまくったリファレンス: 自作クラスタ計算機:nisの基本設定 [雑多な記録]
インストール
OS: Ubuntu 20.04
sudo apt install nis
でNISをインストール。
この際に、NISDOMAINを尋ねられるので、適当にhoge
やhoge.hogehoge.co.jp
等と適当なドメインを埋める。
ドメイン名はdomainname
コマンドで確認できる。
NISサーバーの設定
# Are we a NIS server and if so what kind (values: false, slave, master)?
NISSERVER=master
# Are we a NIS client?
NISCLIENT=false
NISサーバーのアドレスを指定
# ypserver ypserver.network.com
ypserver 192.168.xxx.yyy
# Always allow access for localhost
255.0.0.0 127.0.0.0
# This line gives access to everybody. PLEASE ADJUST!
#0.0.0.0 0.0.0.0
255.255.255.0 192.168.xxx.0
NISを再起動
sudo systemctl restart rpcbind
sudo systemctl restart nis
なんでかわからないけれど、nisの方のデーモンの起動に時間がかかる。(2分くらい)
データベースの更新
sudo /usr/lib/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. hoge000 is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>.
next host to add: hoge000
next host to add: (ここで、ctrl + D を入力)
The current list of NIS servers looks like this:
hoge000
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/hoge.hogehoge.co.jp/ypservers...
Running /var/yp/Makefile...
make[1]: ディレクトリ '/var/yp/hoge.hogehoge.co.jp' に入ります
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating netgroup...
Updating netgroup.byhost...
Updating netgroup.byuser...
Updating shadow.byname...
make[1]: ディレクトリ '/var/yp/hoge.hogehoge.co.jp' から出ます
hoge000 has been set up as a NIS master server.
Now you can run ypinit -s hoge000 on all slave server.
NFSサーバーの設定
インストール
sudo apt install nfs-kernel-server
でNFSサーバーをインストール。
NFSサーバーの設定
/home 192.168.x.0/255.255.255.0(rw,async) #読み書き許可、非同期
/opt_share 192.168.x.0/255.255.255.0(rw,async) #読み書き許可、非同期
設定の反映
sudo systemctl restart nfs-server
でサービス再起動。
sudo exportfs
で正しく設定出来ているか確認できる。
NIS+NFSクライアント
コメント: NISでアカウント共有はできていなくとも、ひとまずNFSは確認ができるので、まずはNFSクライアントの設定をして動作確認後、NISクライアントの動作確認をした方がスムーズだと思う。
管理用アカウント作成と$HOME
の移動
Ubuntuはrootが個別にユーザーとして用意されておらず、基本sudoで管理者権限を利用する。NFSで、NISサーバーのアカウントを/home
にマウントするとすると、クライアント側の既存ユーザーの$HOME
用ディレクトリを移動しておいた方が良い。
$HOME
用ディレクトリの移動
各ユーザーの$HOME
は/etc/passwd
に記載がある。これをユーザーごとに変えていく。
インストール直後は/home
にユーザーがあるはずなので、これを/home_hoge001
みたいな名前の場所に変える。
kanri_hoge001:x:2000:2000:,,,:/home/kanri_hoge001:/bin/bash
を
kanri_hoge001:x:2000:2000:,,,:/home_hoge001/kanri_hoge001:/bin/bash
(UID/GIDはNISサーバーと被らないように1000番ずらしてある)
そのあとに、/home
を/home_hoge001
にリネーム:
sudo mv /home /home_hoge001
(フォルダ利用している状態でこれをするとデッドロックしそうなものだけれど、特に問題はない。)
この状態で一度ログアウトしてからログインして、pwd
で場所を確認したりecho $HOME
で場所を確認して所望の箇所になっていることを確認する。
コメント: 計算機の仕様として/home
に専用のディスク等がマウントされている場合は、/home_hoge001
を作った後にsudo umount /home
してsudo mount /home_hoge001 disk_id
でマウント先を変える。
NISサーバーのユーザー共有用ディレクトリを作成
sudo mkdir /home
でNISサーバーの$HOME
ディレクトリをマウントする用のディレクトリを作成。
NFSクライアントの設定
インストール
sudo apt install nfs-common
でインストール。
手動マウントテスト
sudo mount -t nfs hoge000:/home /home
, sudo mount -t nfs hoge000:/opt_share /opt_share
でマウントできていることを確認する。
例えばdf -h
で
hoge000:/home 1.8T 52G 1.7T 3% /home
hoge000:/opt_share 1.8T 52G 1.7T 3% /opt_share
のような感じでマウントされていることがわかる。
これを自動マウントするためには/etc/fstab
に
hoge000:/home /home nfs defaults 0 0
hoge000:/opt_share /opt_share nfs defaults 0 0
を追記する。
この状態でsudo umount /home
でアンマウント、sudo mount /home
マウントして正常にマウントできていれば設定は完了。次回は起動時に自動でマウントされるようになる。
NISクライアントの設定
インストール
OS: Ubuntu 22.04
sudo apt install nis
でインストール。(20.04の時と異なり、NISドメインはこの時点では聞かれなかった。
NISサーバーのアドレスを指定
# ypserver ypserver.network.com
ypserver 192.168.xxx.yyy
NISで管理する項目を設定
passwd
, group
, shadow
, hosts
をNISで管理する項目にする。コロン(:)の右の項目の第一項目にnis
の文字を足す。
passwd: nis files systemd sss
group: nis files systemd sss
shadow: nis files sss
gshadow: files
hosts: nis files mdns4_minimal [NOTFOUND=return] dns
domainnameの指定
インストール時に聞かれなかったドメイン名を指定。
hoge
以上のファイルを作って、sudo systemctl enable --now ypbind
で反映完了。domainname
コマンドで期待通りのドメイン名が出ることを確認。ypwhich
でサーバーのホスト名が出ていれば問題なし。
NISクライアント再起動
sudo systemctl restart rpcbind ypbind
sudo systemctl restart rpcbind nis
(上記 domainameの指定 をしておかないと、ypbind
が立ち上がっていないのでこのコマンドはエラーを返す。)
トラブルシューティング
systemctl status nis
を入力するとUnit nis.service could not be found.
という出力が返ってくる。
Ubuntu22.04では、これはnisではなくて、ypbindになっている。
つまり、Ubuntu20.04でデーモン名としてnisだったものは基本的にすべてypbindに差し替える必要がある。
この辺の事情Ubuntu 22.04 LTS で NIS Client を設定する #Ubuntu - Qiitaだろうか。