#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情報をキャッシュするのでこれが動いていると変更情報の反映が遅れる.