ubuntu22.04でnis
ubuntu 22.04.3 LTS(desktop)にnis-serverを入れてみます.
root@slurm:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
:
root@slurm:~#
パッケージのインストール.
root@slurm:~# apt update
root@slurm:~# apt install ypserv (libnss-nis, nscd, rpcbind, ypbind-mt, yp-toolsが同時に入ります)
nisドメイン名は、RHEL系なら「echo "NISDOMAIN=sybyl" >> /etc/sysconfig/network」で定義されますが、
ubuntuは「/etc/sysctl.conf」の中で定義され、nisdomainnameとするとこの値が表示される.
root@slurm:~# vi /etc/sysctl.conf
:
kernel.domainname = sybyl
:
root@slurm:~# reboot
:
root@slurm:~# nisdomainname
sybyl
root@slurm:~#
っが、ypservの起動スクリプトを読むと「/etc/sysctl.conf」は考慮されず「/etc/defalutdomain」でnisドメインを決めています. なんで?
ここでは「/etc/sysctl.conf」にも「/etc/defalutdomain」にもnisdomainを定義して構築を進めます
root@slurm:~# echo "sybyl" > /etc/defalutdomain
nisサーバから提供するnisマップは passwd, group, netgrp, auto.master, auto.home の5種.
なので「/var/yp/Makefile」を修正します.
|
配布するnisマップのうち、auto.masterとauto.homeは元のファイルがないので空ファイルを用意します.
root@slurm:~# touch /etc/auto.master /etc/auto.home
っでnisマスターを構築する
root@slurm:~# /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
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:
The current list of NIS servers looks like this:
slurm
Is this correct? [y/n: y] 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'
slurm has been set up as a NIS master server.
Now you can run ypinit -s slurm on all slave server.
root@slurm:~#
ここでnisサーバとなる起動スクリプト「/lib/systemd/system/ypserv.service」を確認します.
root@slurm:~# cat /lib/systemd/system/ypserv.service
[Unit]
Description=NIS/YP (Network Information Service) Server
Requires=rpcbind.service
After=network.target rpcbind.service
Before=ypbind.service
[Service]
Type=forking
PIDFile=/run/ypserv.pid
Environment=YPSERVARGS=
EnvironmentFile=-/etc/default/nis
ExecStartPre=/bin/domainname -F /etc/defaultdomain
ExecStart=/usr/sbin/ypserv $YPSERVARGS
[Install]
WantedBy=multi-user.target
root@slurm:~#
「/etc/default/nis」がRHEL系でのsysconfigなファイルになりそう
YPSERVARGSでypservのport番号とかできそう. 別にfirewallは使わないけど使用するポートを固定にしておきます
root@slurm:~# vi /lib/systemd/system/ypserv.service
:
Environment=YPSERVARGS="-p 834"
:
root@slurm:~# systemctl enable ypserv --now <-- ypserv を起動します
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も使用するみたい.
次にyppasswdです. 同じく「/lib/systemd/system/yppasswdd.service」を見ると
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
[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
[Install]
WantedBy=multi-user.target
root@slurm:~#
なのでこちらも「/etc/default/nis」で定義すればいいのかなと見える. ここでは品がないけどyppasswdd.serviceファイルに直接書く
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マスターの設定は完了.
「apt install nis」でもいいみたいだけど、必要なパッケージだけ入れたいので
root@ubuntu22:~# apt update
root@ubuntu22:~# apt install ypbind-mt (同時にlibnss-nis nscd yp-toolsがインストールされる)
nisマスターのように実際に稼働するスクリプトを見てみると
root@ubuntu22:~# cat /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:~#
こちらもnisdomainは「/etc/defaultdomain」で定めるみたい. 「/etc/yp.conf」にniddomainとypservのip/host名を入れればokっと思ったのだが違うみたい.
どうも「/etc/yp.conf」にはypservの宛先を入れるのみの様子
っで構築
root@ubuntu22:~# echo sybyl > /etc/defaultdomain
root@ubuntu22:~# echo "ypserver slurm" > /etc/yp.conf
root@ubuntu22:~# systemctl enable ypbind --now
root@ubuntu22:~# vi /etc/nsswitch.conf
:
passwd: files systemd nis
group: files systemd nis
shadow: files nis
automount: nis
:
root@ubuntu22:~#
一応これで完成ですが、挙動が怪しい場合は IPAddressDeny を無効にします
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
vi /etc/autofs.conf
master_map_name = auto.home
timeout = 300
map_type = nis
vi /etc/nsswitch.conf
automount: nis
nisクライアントのsudoをnisマスターで管理したい.
nisに乗るようにgroupIDを1000番以上に変更して、nis groupマップにsudoエントリーを乗せる.
各nisクライアントから sudo group を削除する
これで行けるみたい
(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情報をキャッシュするのでこれが動いていると変更情報の反映が遅れる.