#author("2024-04-15T10:05:36+00:00","default:sysosa","sysosa")
ubuntu22.04でnis
#author("2026-07-07T15:54:19+00:00","default:sysosa","sysosa")
ubuntu26.04でnis

***nisマスターの構築 [#a54b1478]

ubuntu 22.04.3 LTS(desktop)にnis-serverを入れてみます. 
ubuntu 26.04 LTS(desktop)にnis-serverを入れてみます. 
#code(nonumber){{
root@slurm:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
root@ubuntu26:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 26.04 LTS"
 :
root@slurm:~# 
root@ubuntu26:~# 
}}
パッケージのインストール.
#code(nonumber){{
root@slurm:~# apt update
root@slurm:~# apt install ypserv   (libnss-nis, nscd, rpcbind, ypbind-mt, yp-toolsが同時に入ります)
root@ubuntu26:~# apt update
root@ubuntu26:~# apt install ypserv   (libnsl2  libnss-nis  make  nscd  rpcbind  yp-tools  ypbind-mtが同時に入ります)
}}

nisドメイン名は、RHEL系なら「echo "NISDOMAIN=sybyl" >> /etc/sysconfig/network」で定義されますが、
ubuntuは「/etc/sysctl.conf」の中で定義され、nisdomainnameとするとこの値が表示される.
ubuntuではypservの起動スクリプト中に「/etc/defaultdomain」を参照してnisドメインを定義していますので

#code(nonumber){{
root@slurm:~# vi /etc/sysctl.conf
 :
kernel.domainname = sybyl
 :
root@slurm:~# reboot
 :
root@slurm:~# nisdomainname
sybyl
root@slurm:~#
root@ubuntu26:~# echo sybyl > /etc/defaultdomain

root@ubuntu26:~#
}}
とします。これでnisドメインの定義は完了.

っが、ypservの起動スクリプトを読むと「/etc/sysctl.conf」は考慮されず「/etc/defalutdomain」でnisドメインを決めています. &size(10){なんで?};
次にnisクライアントへ提供するマップを定義します. ここでは passwd, group, netgrp, auto.master, auto.home の5種を提供します
&size(10){それ以外にも提供できますが、使わないマップを提供しても意味がない};

ここでは「/etc/sysctl.conf」にも「/etc/defalutdomain」にもnisdomainを定義して構築を進めます
「/var/yp/Makefile」を修正します.

#code(nonumber){{
root@slurm:~# echo "sybyl" > /etc/defalutdomain
}}

nisサーバから提供するnisマップは passwd, group, netgrp, auto.master, auto.home の5種.
なので「/var/yp/Makefile」を修正します.

#code(diff,nonumber){{
--- /var/yp/Makefile.orig       2021-01-23 23:43:43.000000000 +0900
+++ /var/yp/Makefile    2023-12-05 23:07:16.423292319 +0900
--- /var/yp/Makefile.orig       2026-07-07 22:29:32.770250133 +0900
+++ /var/yp/Makefile    2026-07-07 22:30:33.916782240 +0900
@@ -107,7 +107,7 @@
 # If you don't want some of these maps built, feel free to comment
 # them out from this list.

-ALL =   passwd group hosts rpc services netid protocols netgrp
+ALL =   passwd group hosts netgrp auto.master auto.home
 #ALL += publickey mail ethers bootparams printcap
 #ALL += amd.home auto.master auto.home auto.local
 #ALL += timezone locale networks netmasks
}}
配布するnisマップのうち、auto.masterとauto.homeは元のファイルがないので空ファイルを用意します.
#code(nonumber){{
root@slurm:~# touch /etc/auto.master /etc/auto.home
root@ubuntu26:~# touch /etc/auto.master /etc/auto.home
}}
っでnisマスターを構築する
#code(nonumber){{
root@ubuntu26:~# nisdomainname sybyl
root@ubuntu26:~# systemctl enable ypserv --now

root@slurm:~# /usr/lib/yp/ypinit -m
root@ubuntu26:~# /usr/lib/yp/ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers.  slurm is in the list of NIS server hosts.  Please continue to add
servers.  ubuntu26 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:  slurm
        next host to add:  ubuntu26
        next host to add:
The current list of NIS servers looks like this:

slurm
ubuntu26

Is this correct?  [y/n: y]  y
Is this correct?  [y/n: y]
We need a few minutes to build the databases...
Building /var/yp/sybyl/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory '/var/yp/sybyl'
Updating passwd.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating passwd.byuid...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating group.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating group.bygid...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating hosts.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating hosts.byaddr...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating netgroup...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating netgroup.byhost...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating netgroup.byuser...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating auto.master...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating auto.home...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating shadow.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredgmake[1]: Leaving directory '/var/yp/sybyl'
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating netgroup...
Updating netgroup.byhost...
Updating netgroup.byuser...
Updating auto.master...
Updating auto.home...
Updating shadow.byname...
gmake[1]: Leaving directory '/var/yp/sybyl'

slurm has been set up as a NIS master server.
ubuntu26 has been set up as a NIS master server.

Now you can run ypinit -s slurm on all slave server.
root@slurm:~#
Now you can run ypinit -s ubuntu26 on all slave server.
root@ubuntu26:~#
}}

ここでnisサーバとなる起動スクリプト「/lib/systemd/system/ypserv.service」を確認します.
これでnisマスターが動きました

次に関連で yppasswd を有効にします。「yppasswdd.service」を見ると
#code(nonumber){{
root@slurm:~# cat /lib/systemd/system/ypserv.service
root@ubuntu26:~# systemctl cat yppasswdd.service
# /usr/lib/systemd/system/yppasswdd.service
[Unit]
Description=NIS/YP (Network Information Service) Server
Description=NIS Users Passwords Change Server
Requires=rpcbind.service
After=network.target rpcbind.service
Before=ypbind.service
Wants=network-online.target
After=network-online.target rpcbind.service

[Service]
Type=forking
PIDFile=/run/ypserv.pid
Environment=YPSERVARGS=
PIDFile=/run/yppasswdd.pid
Environment=YPPASSWDDARGS= YPCHANGEOK=chsh YPPWDDIR=/etc
EnvironmentFile=-/etc/default/nis
ExecStartPre=/bin/domainname -F /etc/defaultdomain
ExecStart=/usr/sbin/ypserv $YPSERVARGS
ExecStart=/usr/sbin/rpc.yppasswdd -D $YPPWDDIR -e $YPCHANGEOK $YPPASSWDDARGS

[Install]
WantedBy=multi-user.target
root@slurm:~#
root@ubuntu26:~#
}}
&size(10){「/etc/default/nis」がRHEL系でのsysconfigなファイルになりそう};
YPSERVARGSでypservのport番号とかできそう. 別にfirewallは使わないけど使用するポートを固定にしておきます

と「/etc/default/nis」の設定次第みたい。またこのファイル「/etc/default/nis」は ypserv.service と ypxfrd.service への設定ファイルでもあるようでその設定も加えた
&size(10){「systemctl cat ypserv.service」「systemctl cat ypxfrd.service」};
#code(nonumber){{
root@slurm:~# vi /lib/systemd/system/ypserv.service
 :
Environment=YPSERVARGS="-p 834"
 :
root@slurm:~# systemctl enable ypserv --now    <-- ypserv を起動します
root@ubuntu26:~# vi /etc/default/nis

root@slurm:~# 
root@slurm:~# lsof -i |grep ypserv
ypserv    26055            root    5u  IPv4 212744      0t0  UDP *:834
ypserv    26055            root    6u  IPv4 212753      0t0  TCP *:834 (LISTEN)
ypserv    26055            root    7u  IPv6 212762      0t0  UDP *:835
ypserv    26055            root    8u  IPv6 212767      0t0  TCP *:835 (LISTEN)
root@slurm:~#
}}
"-p 834"とすると、連続して次のportも使用するみたい.
YPCHANGEOK="chsh -e chfn"
YPPWDDIR=/etc
YPPASSWDDARGS="--port 834"

YPSERVARGS="-p 838"

YPXFRDARGS="-p 966"

次にyppasswdです. 同じく「/lib/systemd/system/yppasswdd.service」を見ると
root@ubuntu26:~#
}}

この上で
#code(nonumber){{
root@slurm:~# cat /lib/systemd/system/yppasswdd.service
[Unit]
Description=NIS Users Passwords Change Server
Requires=rpcbind.service
Wants=network-online.target
After=network-online.target rpcbind.service
root@ubuntu26:~# systemctl enable yppasswdd.service --now

[Service]
Type=forking
PIDFile=/run/yppasswdd.pid
Environment=YPPASSWDDARGS= YPCHANGEOK=chsh YPPWDDIR=/etc
EnvironmentFile=-/etc/default/nis
ExecStartPre=/bin/domainname -F /etc/defaultdomain
ExecStart=/usr/sbin/rpc.yppasswdd -D $YPPWDDIR -e $YPCHANGEOK $YPPASSWDDARGS
root@ubuntu26:~# systemctl enable ypxfrd.service --now

[Install]
WantedBy=multi-user.target
root@ubuntu26:~# systemctl restart ypserv.service

root@slurm:~#
root@ubuntu26:~# lsof -i -P | grep yp
rpc.ypxfr 5878            root   5u  IPv4  30683      0t0  UDP *:966
rpc.ypxfr 5878            root   6u  IPv4  35346      0t0  TCP *:966 (LISTEN)
rpc.ypxfr 5878            root   7u  IPv6  35352      0t0  UDP *:966
rpc.ypxfr 5878            root   8u  IPv6  35358      0t0  TCP *:966 (LISTEN)
rpc.yppas 6807            root   5u  IPv4  37932      0t0  UDP *:834
rpc.yppas 6807            root   6u  IPv4  37937      0t0  TCP *:834 (LISTEN)
rpc.yppas 6807            root   7u  IPv6  36808      0t0  UDP *:834
rpc.yppas 6807            root   8u  IPv6  36813      0t0  TCP *:834 (LISTEN)
ypserv    7230            root   5u  IPv4  39207      0t0  UDP *:838
ypserv    7230            root   6u  IPv4  39216      0t0  TCP *:838 (LISTEN)
ypserv    7230            root   7u  IPv6  39225      0t0  UDP *:838
ypserv    7230            root   8u  IPv6  39232      0t0  TCP *:838 (LISTEN)
root@ubuntu26:~#
}}
なのでこちらも「/etc/default/nis」で定義すればいいのかなと見える. ここでは品がないけどyppasswdd.serviceファイルに直接書く
#code(nonumber){{
root@slurm:~# vi /lib/systemd/system/yppasswdd.service
 :
Environment=YPPASSWDDARGS="--port 836"  YPCHANGEOK=chsh YPPWDDIR=/etc
 :
root@slurm:~# systemctl enable yppasswdd --now

root@slurm:~# lsof -i | grep yppas
rpc.yppas 26203            root    5u  IPv4 213377      0t0  UDP *:836
rpc.yppas 26203            root    6u  IPv4 213382      0t0  TCP *:836 (LISTEN)
rpc.yppas 26203            root    7u  IPv6 213387      0t0  UDP *:837
rpc.yppas 26203            root    8u  IPv6 213392      0t0  TCP *:837 (LISTEN)
root@slurm:~#
}}

以上でnisマスターの設定は完了.

***nisクライアント [#f5db4678]
「apt install nis」でもいいみたいだけど、必要なパッケージだけ入れたいので
#code(nonumber){{
root@ubuntu22:~# apt update

root@ubuntu22:~# apt install ypbind-mt    (同時にlibnss-nis nscd yp-toolsがインストールされる)
}}
nisマスターのように実際に稼働するスクリプトを見てみると
#code(nonumber){{
root@ubuntu22:~# cat /lib/systemd/system/ypbind.service
root@ubuntu24:~# systemctl cat ypbind.service
# /usr/lib/systemd/system/ypbind.service
[Unit]
Description=NIS Binding Service
Requires=rpcbind.service
Wants=network-online.target
After=network-online.target rpcbind.service
Before=systemd-user-sessions.service
Before=nss-user-lookup.target

[Service]
Type=forking
PIDFile=/run/ypbind.pid
Environment=YPBINDARGS=
EnvironmentFile=-/etc/default/nis
ExecStartPre=/bin/domainname -F /etc/defaultdomain
ExecStart=/usr/sbin/ypbind $YPBINDARGS

[Install]
WantedBy=multi-user.target
root@ubuntu22:~#
root@ubuntu24:~#
}}
こちらもnisdomainは「/etc/defaultdomain」で定めるみたい. 「/etc/yp.conf」にniddomainとypservのip/host名を入れればokっと思ったのだが違うみたい.
どうも「/etc/yp.conf」にはypservの宛先を入れるのみの様子
っで構築
#code(nonumber){{
root@ubuntu22:~# echo sybyl > /etc/defaultdomain
root@ubuntu22:~# echo "ypserver slurm" > /etc/yp.conf
root@ubuntu22:~# echo "ypserver ubuntu26" > /etc/yp.conf

root@ubuntu22:~# systemctl enable ypbind --now

(確認)
root@ubuntu24:~# ypwhich
ubuntu26
root@ubuntu24:~# ypwhich -m
auto.home ubuntu26
passwd.byname ubuntu26
group.bygid ubuntu26
netgroup.byuser ubuntu26
ypservers ubuntu26
passwd.byuid ubuntu26
group.byname ubuntu26
auto.master ubuntu26
netgroup.byhost ubuntu26
shadow.byname ubuntu26
netgroup ubuntu26
hosts.byname ubuntu26
hosts.byaddr ubuntu26
root@ubuntu24:~#
}}

nis情報をnis masterから取得出来ているみたい.
っでnis情報をこのマシンのアカウント系で使えるように「/etc/nsswitch.conf」を修正します

root@ubuntu22:~# vi /etc/nsswitch.conf
 :
passwd:         files systemd nis
group:          files systemd nis
shadow:         files nis
automount:      nis
 :
root@ubuntu22:~#
}}

一応これで完成ですが、挙動が怪しい場合は IPAddressDeny を無効にします
#code(nonumber){{
root@ubuntu22:~# sed -i "s/IPAddressDeny=any/#IPAddressDeny=any/" /lib/systemd/system/systemd-logind.service

root@ubuntu22:~# systemctl daemon-reload

root@ubuntu22:~# systemctl restart systemd-logind.service
}}



***ubuntu20.04の場合 [#f6b02c9c]
#code(nonumber){{
vi /etc/autofs.conf
  master_map_name = auto.home
  timeout = 300
  map_type = nis
vi /etc/nsswitch.conf
  automount: nis
}}

***sudoの一元管理 [#a6bea7f7]
nisクライアントのsudoをnisマスターで管理したい.
nisに乗るようにgroupIDを1000番以上に変更して、nis groupマップにsudoエントリーを乗せる.

各nisクライアントから sudo group を削除する

これで行けるみたい

#code(nonumber){{
(nis server)
root@slurm:~# lsof |grep sudo
root@slurm:~# groupmod -g 5000 sudo

root@slurm:~# cd /var/yp
root@slurm:/var/yp# make


(nis client)
root@ubuntu22:~# ypcat group
illya:x:1000:
sudo:x:5000:illya
nogroup:x:65534:

root@ubuntu22:~# cp /etc/group /etc/group.orig
root@ubuntu22:~#
root@ubuntu22:~# delgroup sudo
Removing group `sudo' ...
Done.
root@ubuntu22:~#
}}

留意点: nscdがnis情報をキャッシュするのでこれが動いていると変更情報の反映が遅れる.
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS