====== 概要 ====== * プライベートLAN内でコンピュータの設定(ユーザー情報など)を共有するシステムをNetwork Information Service (NIS) と呼びます * 複数人でクラスタ計算機を使用するとき、それぞれの計算ノードに各自のアカウントを一つずつ作成するのは非常に手間であるので、このシステムを使います * 共有する設定を管理するサーバをNISサーバと呼び、今回は管理ノードをその役割に当てます * 現在ではNISはレガシーなので(例えば以下で述べるアップデート関係の問題も一向に対処されません)、LDAPなど別の手段も検討してください ====== 設定方法 ====== ===== 管理ノード ===== - NISのパッケージをインストールする sudo apt install nis * 途中でNISドメイン名を聞かれので、好きなように設定してください(以下では kanri.nis とします) * 「NISドメイン名」はNISにより設定を共有するコンピュータのグループの名前のことで、DNSのドメイン名とは別物です * NISドメイン名は /etc/defaultdomain に保存されるので、変更したくなったらこのファイルを編集してください * 設定したNISドメイン名は次のコマンドで確認できます $ domainname - /etc/defalut/nis に管理ノードをNISサーバとすることを指定する $ sudo vi /etc/defalut/nis ... # Are we a NIS server and if so what kind (values: false, slave, master)? NISSERVER=master # Are we a NIS client? NISCLIENT=false ... - /etc/yp.conf にNISサーバのIPアドレスまたはホスト名を指定する $ sudo vi /etc/yp.conf ypserver 192.168.0.1 - /etc/ypserv.securenets の最終行をプライベートLANのネットマスクとIPアドレスに変更する $ sudo vi /etc/ypserv.securenets (略) # This line gives access to everybody. PLEASE ADJUST! #0.0.0.0 0.0.0.0 255.255.255.0 192.168.0.0 * これによりプライベートネットワークからのみNISサーバへの接続を許可します - NISを再起動します $ sudo systemctl restart rpcbind nis - NISデータベースを更新する $ sudo /usr/lib/yp/ypinit -m At this point, we have to construct a list of the hosts which will run NIS servers. kanri 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 . next host to add: kanri next host to add: # Ctrl + D キー The current list of NIS servers looks like this: kanri Is this correct? [y/n: y] y We need a few minutes to build the databases... (以下略) ===== 計算ノード ===== - NISによってUbuntuがハングアップするのを防ぎます。 $ sudo vim /lib/systemd/system/systemd-logind.service # IPAddressDeny=any をコメントアウト $ sudo systemctl daemon-reload * https://qiita.com/kakinaguru_zo/items/18258d4dd296a755badd - NISのパッケージをインストールする $ sudo apt install nis * NISドメイン名は管理ノードで設定したものと同じにする - /etc/yp.conf にNISドメイン名とNISサーバのIPアドレスを指定する $ sudo vi /etc/yp.conf domain kanri.nis server 192.168.0.1 - /etc/nsswitch.conf に、/etc/ にある passwd, group, shadow, hosts はNISサーバのものを使用するように指定する(OSのバージョンによって微妙に変わってくるが、それぞれの項目の先頭に nis を付け加えるだけでオーケー) $ sudo vi /etc/nsswitch.conf (略) passwd: nis files systemd group: nis files systemd shadow: nis files gshadow: files hosts: nis files dns (略) * ユーザ情報に加えてNISサーバで行われる名前解決も共有するようにしています * これにより、各計算ノードで /etc/hosts を編集する必要がなくなります * グループの管理は管理ノードのみで行いたいため、gshadow(グループのパスワードが暗号化されて入っているファイル)は共有しません - NISを再起動します(やたら時間がかかります。10分くらい、原因不明) $ sudo systemctl restart rpcbind nis - どのマシンの情報が共有されているかを見て、正しく設定されたか確認します $ ypwhich kanri ====== 使い方 ====== - ユーザーを追加するには、管理ノードで次のようにします(以下はユーザーsugimotoを追加する場合) $ sudo adduser sugimoto $ sudo make -C /var/yp * **NISサーバの共有する情報を変更したとき(つまりユーザーの追加したり、ホストファイルを編集したりしたとき)は、その都度 make -C /var/yp を実行する必要があります** - 新しいユーザで計算ノードにログインできるか確認します $ ssh sugimoto@keisan11 ====== 補足 ====== ===== ログインにやたら時間がかかる場合 ===== * Ubuntu18.04で発生を確認 * Ubuntu20.04では未確認 $ sudo vim /lib/systemd/system/systemd-logind.service # IPAddressDeny=any をコメントアウト $ sudo systemctl daemon-reload ===== udevのアップデートに失敗する場合 ===== * apt upgrade をすると次のエラーを吐きます Job for systemd-udevd.service failed because a timeout was exceeded. See "systemctl status systemd-udevd.service" and "journalctl -xe" for details. invoke-rc.d: initscript udev, action "restart" failed. ● systemd-udevd.service - udev Kernel Device Manager Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled) Active: activating (start) since Xxx xxxx-xx-xx xx:xx:xx UTC; 20ms ago TriggeredBy: ● systemd-udevd-kernel.socket ● systemd-udevd-control.socket Docs: man:systemd-udevd.service(8) man:udev(7) Main PID: 50463 (systemd-udevd) Tasks: 1 Memory: 940.0K CGroup: /system.slice/systemd-udevd.service └─50463 /lib/systemd/systemd-udevd xxx xx xx:xx:xx keisan11 systemd[1]: Starting udev Kernel Device Manager... dpkg: error processing package udev (--configure): installed udev package post-installation script subprocess returned error exit status 1 * Ubuntu 18.04, 20.04 で発生を確認 $ sudo vim /lib/systemd/system/systemd-udevd.service # IPAddressDeny=any をコメントアウト $ sudo systemctl daemon-reload $ sudo apt update $ sudo apt upgrade ====== 参考 ====== * http://meme.biology.tohoku.ac.jp/klabo-wiki/index.php?%B7%D7%BB%BB%B5%A1%2FNIS * http://masahir0y.blogspot.com/2012/12/nis.html