今更ながらnis
小規模で運用なら便利かな.
ただLinuxログインとsmb共有のパスワードが別々に管理されるのが微妙な点. それぞれ設定すればいいのだが
LDAPやsamba-ADのような大鉈よりは扱いいいかな. 他との連携もあまりないのなら便利なツールと思う
ここでは極々簡単に
役目 | マシン名 | ipアドレス | 備考 |
nis サーバ | nis | 192.168.0.118 | nfsサーバも兼ねる 提供map passwd, group, hosts, autofs(auto.master. auto.home), netgroup |
nis クライアント | nis-client | 192.168.119 |
*nisドメイン名: sybyl
rockylinux9でnis NIS/rockylinux9
nisドメイン名を定義します.
単純に「/etc/sysconfig/network」に定義します
[root@nis ~]# yum install ypserv
[root@nis ~]# echo "NISDOMAIN=sybyl" >> /etc/sysconfig/network
[root@nis ~]# reboot
(再起動後)
[root@nis ~]# domainname
sybyl
[root@nis ~]#
提供サービスに合致する様に「/var/yp/Makefile」を修正する.
ここでは「passwd, group, hosts, autofs, netgroup」マップをnis配下に配るので
Makefileを下記のように修正します.
|
該当するファイルは、/etc/passwd, /etc/group, /etc/hosts, /etc/netgroup, /etc/auto.master, /etc/auto.homeとなる.
留意
/etc/passwd, /etc/groupの全てのエントリーがnis共有されるわけではなく、Makefileにも書かれているが、
/etc/login.defsに記載の「UID_MIN」「GID_MIN」以下の値はnisマップには加わらない.
その後nisマスターへの下地を作ります
配布するデータの/etc/passwd, /etc/group, /etc/hostsは既定で存在するが、/etc/auto.master、/etc/auto.home と /etc/netgroup は存在せず手動で作る必要があります
これらファイルを欠けていると次のypinitでエラーが生じるので事前に用意します
[root@nis ~]# touch /etc/auto.master /etc/auto.home /etc/netgroup
[root@nis ~]# /usr/lib64/yp/ypinit -h
usage:
ypinit -m
ypinit -s master
where -m is used to build the data bases on a master NIS server,
and -s is used for a slave data base. master must be an existing
reachable NIS server.
[root@nis ~]# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. nis.sybyl.local 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: nis.sybyl.local
next host to add: <--- ここで Ctrl-Dをタイプ
The current list of NIS servers looks like this:
nis.sybyl.local
Is this correct? [y/n: y] 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 registeredgmake[1]: Leaving directory `/var/yp/sybyl'
nis.sybyl.local has been set up as a NIS master server.
Now you can run ypinit -s nis.sybyl.local on all slave server.
[root@nis ~]#
これで下準備は完了
firewallとかはhttps://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/sec-securing_servicesを参照します.
まずnisなのでrpcbindを許可する
[root@nis ~]# firewall-cmd --add-service=rpc-bind --zone=public --permanent
[root@nis ~]# firewall-cmd --reload
そしてypservのサービスは 834、ypxfrdは 835、yppasswdは 836 をそれぞれ使うようにする. ypservを834にしたら、たまにrpc.statdがそれを使っていたことがある
番号は先の参照先から、yppasswdは単にその続き. 一応 /etc/services に被らない番号を指定
ypservの834はrpc.statdと被る可能性があります. 「lsof -i -P」で要確認. 「/etc/sysconfig/nfs」で「STATDARG="-p 837"」とかに
[root@nis ~]# vi /etc/sysconfig/network
# Created by anaconda
NISDOMAIN=sybyl
YPSERV_ARGS="-p 834"
YPXFRD_ARGS="-p 835"
[root@nis ~]# vi /etc/sysconfig/yppasswdd
:
:
YPPASSWDD_ARGS="-e chsh -e chfn --port 836" <-- chsh[シェル変更]、chfn[GECOS変更]も許可してport 836を使う
[root@nis ~]#
として
[root@nis ~]# firewall-cmd --add-port=834-836/tcp --add-port=834-836/udp --zone=public --permanent
[root@nis ~]# firewall-cmd --reload
(確認)
[root@nis ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: dhcpv6-client rpc-bind ssh
ports: 834-836/tcp 834-836/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@nis ~]#
と反映させる.
っでサービスを開始させる
[root@nis ~]# systemctl enable yppasswdd.service ypserv.service ypxfrd.service --now
あとはコンテンツとなるマップを作成します.
/etc/passwdや/etc/group、/etc/hostsは通常の使い方のままで、そのままがnisマップになる. 先のUID_MIN,GID_MINの製薬はあるけど
それ以外の auto.master、auto.home、netgroupのマップを用意します
nisクライアントが auto.master を参照するか否かはクライアントの /etc/nsswitch.conf に依存します.
そのnisクライアントで /etc/nsswitch.conf の automount項目が
automount: files nis
なら、/etc/auto.masterを評価して次に nis の値を評価します.
ここでnisマスターサーバに於いて「auto.msater」には「Direct maps」方式と「Indirect maps」方式の2つがあります
「Direct maps」方式は下記のように記載して、どのディレクトリに何をmountさせるかは指定する次のmap/fileに依存する
[root@nis ~]# cat /etc/auto.master
/- auto.home --timeout=60 --> auto.home マップを参照
[root@nis ~]#
(あるいはフィルを直に指定する)
[root@nis ~]# cat /etc/auto.master
/- /etc/auto.nfs --> ファイルシステム上の「/etc/auto.nfs」を参照
[root@nis ~]#
*全クライアントの/etc/auto.nfsを整備することになります. Ansibleとかの出番かな
「Indirect maps」方式. ディレクトリ毎にマップを用意するなら
[root@nis ~]# cat /etc/auto.master
/home auto.home
/apps auto.apps
(あるいは)
/home /etc/auto.home
/apps /etc/auto.apps
[root@nis ~]#
とします.
「Direct maps」方式なら
[root@nis ~]# cat /etc/auto.home
/home -rw,proto=tcp,nfsvers=3 nfs:/home
/apps -rw,proto=tcp,nfsvers=3 nfs:/apps
(あるいは)
/home/illya -rw,proto=tcp,nfsvers=3 nfs:/home/illya
/home/saber -rw,proto=tcp,nfsvers=3 nfs:/home/saber
/apps -rw,proto=tcp,nfsvers=3 nfs:/apps
[root@nis ~]#
「Indirect maps」方式なら
[root@nis ~]# cat /etc/auto.home
illya -rw,proto=tcp,nfsvers=3 nis:/home/illya
saber -rw,proto=tcp,nfsvers=3 nis:/home/saber
[root@nis ~]#
/etc/auto.homeを書き換えてmakeした後で、全クライアントの「systemctl reload autofs」が必要. これをしないと反映されない
「 (host, user, domain) 」で定義されます。
利用場所は /etc/passwd の最終行に「+@sybyl-users」と加えてログインユーザの制限やら
nfsサーバにて/etc/exportsに
/home @sybyl-hosts(rw)
とするとnetgroupで定義された「sybyl-hosts」のホスト限定でnfs-mountとか定義できます。
*nfsサーバがnisクライアントになる必要があります. そうしないと netgroup が参照できないので
っで具体的な作り方ですが
[root@nis ~]# cat /etc/netgroup
sybyl-users \
(-,illya,sybyl) (-,saber,sybyl)
sybyl-hosts \
(nis-client01,-,sybyl) (nis-client02,-,sybyl) \
(nis-client03,-,sybyl) (nis-client04,-,sybyl) \
(nis-client05,-,sybyl)
[root@nis ~]#
な感じです
*netgroupを/etc/passwdで使うには /etc/nsswitch.conf の passwd 欄を「passwd: files compat」とかに要修正
「netgroup」を使った方法もあるがまずは、通常方法で
[root@nfs ~]# yum install nfs-utils
[root@nfs ~]# cat /etc/exports
/apps 192.168.0.0/255.255.255.0(rw,no_root_squash)
/home 192.168.0.0/255.255.255.0(rw,no_root_squash)
[root@nfs ~]# systemctl enable nfs-server && systemctl start nfs-server
[root@nfs ~]# firewall-cmd --permanent --zone=public --add-service={nfs,nfs3,mountd,rpc-bind}
[root@nfs ~]# firewall-cmd --reload
単純にnisサーバ内で
[root@nis ~]# useradd -m -d /home/illya illya
とかで作ります。その後にnisマップにするために
[root@nis ~]# cd /var/yp
[root@nis yp]# make
とします。これで参加全ノードでアカウントが共有されます
[root@nis-client ~]# yum -y install ypbind autofs nfs-utils
[root@nis-client ~]# authconfig --enablenis --nisdomain=sybyl --nisserver=nis --update
[root@nis-client ~]# systemctl enable autofs
[root@nis-client ~]# systemctl start autofs
(SELinuxが有効なら)
[root@nis-client ~]# setsebool -P use_nfs_home_dirs 1
「/etc/sudoers」を確認すると「wheel」グループに所属するユーザはルート権限を持て得る。
*ubuntuでは sudo グループ に所属みたい
%wheel ALL=(ALL) ALL
またこのwheelグループのGIDを調べると
[root@nis ~]# getent group | grep wheel
wheel:x:10:
[root@nis ~]#
と既に存在してGID:10である。「/var/yp/Makefile」を確認すると「/etc/login.defs」と関連して伝播させるエントリーはUID/GID共に1000以上と決まっている。
このwheelのGID:10を弄って GID:1000 とかにすれば伝播可能なのだが、次にnis配下の計算機でgroup情報の参照順が問題になる。
情報の参照順は「/etc/nsswitch.conf」で決まっていて、
[root@nis-client ~]# grep ^group /etc/nsswitch.conf
group: files nis sss
[root@nis-client ~]#
と「/etc/group」を評価して、次にnisを評価している。
nis配下の計算機がCentOSなら「/etc/group」で既にwheelが定義されているので、「/etc/group」のwheelエントリーを削除とかする必要がある。
方策としては、
1.wheelのGIDを1000以上にして、nis配下の各計算機の/etc/groupからwheelを削除する
2.管理用のgroupをGID:1000以上で新設して、nis配下の各計算機の「/etc/sudoers」をに追記する
の2方向でしょうか。
apt install nis
vi /etc/yp.conf
vi /etc/nsswitch.conf
systemctl restart rpcbind nis
apt install nfs-kernel-server autofs