0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu2x.04でNISとNFSでユーザー・ファイル管理

Last updated at Posted at 2024-01-09

はじめに

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:/homehoge000:/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を尋ねられるので、適当にhogehoge.hogehoge.co.jp等と適当なドメインを埋める。

ドメイン名はdomainnameコマンドで確認できる。

NISサーバーの設定

/etc/defaults/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サーバーのアドレスを指定

/etc/yp.conf(抜粋)
# ypserver ypserver.network.com          
ypserver 192.168.xxx.yyy

/etc/ypserv.securenets(抜粋)
# 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サーバーの設定

/etc/exports(抜粋)
/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みたいな名前の場所に変える。

/etc/passwd(抜粋)
kanri_hoge001:x:2000:2000:,,,:/home/kanri_hoge001:/bin/bash

/etc/passwd(抜粋)
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

/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サーバーのアドレスを指定

/etc/yp.conf(抜粋)
# ypserver ypserver.network.com          
ypserver 192.168.xxx.yyy

NISで管理する項目を設定

passwd, group, shadow, hostsをNISで管理する項目にする。コロン(:)の右の項目の第一項目にnisの文字を足す。

/etc/nsswitch.conf(抜粋)
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の指定

インストール時に聞かれなかったドメイン名を指定。

/etc/defaultdomain(自身で作成)
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だろうか。

/etc/defaults/nisの設定していないのに動いている...

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?