今更ながらnis

小規模で運用なら便利かな.
ただLinuxログインとsmb共有のパスワードが別々に管理されるのが微妙な点. それぞれ設定すればいいのだが

LDAPやsamba-ADのような大鉈よりは扱いいいかな. 他との連携もあまりないのなら便利なツールと思う

ここでは極々簡単に

役目マシン名ipアドレス備考
nis サーバnis192.168.0.118nfsサーバも兼ねる
提供map
passwd, group, hosts, autofs(auto.master. auto.home), netgroup
nis クライアントnis-client192.168.119

*nisドメイン名: sybyl

nisサーバ設置

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を下記のように修正します.

--- /var/yp/Makefile.orig       2019-08-09 12:26:57.000000000 +0900
+++ /var/yp/Makefile    2021-04-17 15:43:43.765427188 +0900
@@ -124,10 +124,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 mail \
-       # netgrp shadow publickey networks ethers bootparams printcap \
-       # amd.home auto.master auto.home auto.local passwd.adjunct \
-       # timezone locale netmasks
+all:  passwd group hosts netgrp auto.master auto.home
 
 
 ########################################################################

該当するファイルは、/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 をそれぞれ使うようにする.
番号は先の参照先から、yppasswdは単にその続き. 一応 /etc/services に被らない番号を指定

[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 --zone=public --permanent
[root@nis ~]# firewall-cmd --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
[root@nis ~]# systemctl start yppasswdd.service ypserv.service ypxfrd.service

あとはコンテンツとなるマップを作成します.

nisマップ作成

/etc/passwdや/etc/group、/etc/hostsは通常の使い方のままで、そのままがnisマップになる. 先のUID_MIN,GID_MINの製薬はあるけど

それ以外の auto.master、auto.home、netgroupのマップを用意します

auto.master

nisクライアントが auto.master を参照するか否かはクライアントの /etc/nsswitch.conf に依存します.
そのnisクライアントで /etc/nsswitch.conf の automount項目が

automount:  files nis

なら、/etc/auto.masterを評価して次に nis の値を評価します.

ここでnisマスターサーバに於いて

[root@nis ~]# cat /etc/auto.master
/- auto.home
[root@nis ~]#

なら、nisクライアントは「Direct maps」方式で auto.home マップを参照して autofs を稼働させることになる

あるいは

[root@nis ~]# cat /etc/auto.master
/- /etc/auto.nfs
[root@nis ~]#

ならnisクライアントは、各々クライアントに備わった /etc/auto.nfs を参照して autofs を稼働させます

*全クライアントの/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 ~]#

とします.

auto.home

「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」が必要. これをしないと反映されない

netgroup

「 (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」とかに要修正

nfs設定

「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アカウント作成

単純にnisサーバ内で

[root@nis ~]# useradd -m -d /home/illya illya

とかで作ります。その後にnisマップにするために

[root@nis ~]# cd /var/yp
[root@nis yp]# make

とします。これで参加全ノードでアカウントが共有されます

nisクライアントになるには

[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

nisでsudoできるユーザを管理する

「/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方向でしょうか。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-09-30 (木) 02:16:19 (20d)