侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

Docker部署 NIS 服务(测试笔记)

barwe
2023-06-07 / 0 评论 / 0 点赞 / 1,435 阅读 / 3,196 字
温馨提示:
本文最后更新于 2023-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

NIS 部署

NIS 和 NFS 都是 UNIX 和 Linux 系统之间共享资源的服务。

NIS 主要用于共享网络信息(如用户、组、主机名等),而 NFS 主要用于共享文件和目录。

NIS 和 NFS 通常会一起使用,以便在网络中实现统一的 身份验证资源共享

NIS(Network Information Service)是一个 分布式数据库 服务,旨在简化管理大型 UNIX 网络中的用户、组、主机名等信息。在 NIS 中,服务器维护一个中央数据库,包含有关网络中所有用户、组、主机名等信息。客户端则通过 NIS 协议从服务器中获取这些信息,以便在本地系统上进行身份验证和授权等操作。

NFS(Network File System)是一个 分布式文件系统 服务,旨在允许多个 UNIX 或 Linux 系统之间共享文件和目录。在 NFS 中,服务器将文件系统的部分或全部内容导出到网络上,并允许客户端通过 NFS 协议挂载这些共享的文件系统。一旦挂载,客户端就可以像访问本地文件系统一样访问文件和目录。

准备文件

/etc/hosts

宿主机的 /etc/hosts 文件应该记录 NIS 服务端和客户端容器的 IP 地址,最好保证服务端和客户端应该在同一个局域网中。

172.17.0.2 nis-server
172.17.0.3 nis-client

启动容器时将其挂载到 /etc/hosts:ro 即可。

/etc/localtime

容器时间应该与宿主机保持一致,将此文件挂载到容器的 /etc/localtime:ro 即可。

network

NISDOMAIN=msnis
YPSERV_ARGS="-p 1011"
OTHER_YPBIND_OPTS="-broadcast"
  • NISDOMAIN 是 NIS 域名(不过这里好像没有起作用,还是先写上)
  • YPSERV_ARGS 是服务端启动 ypserv 需要的额外参数
  • OTHER_YPBIND_OPTS 是客户端启动 ypbind 需要的额外参数
    • 不加 broadcast 选项 ypbind 可能连接不上服务器,可能与服务器禁用了 dns 有关(待确定)

启动容器时将其挂载到 /etc/sysconfig/network 即可。

ypserv.conf

服务端配置文件。

dns: no
files: 30
xfr_check_port: yes
* : * : * : none
  • dns: NIS 服务器大多使用于内部局域网络,只要有 /etc/hosts 即可,不用 DNS
  • files: 默认会有 30 个数据库被读入内存当中,账号多的话,可以调大点
  • xfr_check_port: 与 master/slave 有关,将同步更新的数据库比对所使用的端口,放置于 <1024 内
  • 设定限制客户端或 slave server 查询的权限

格式:[主机名/IP] : [NIS域名] : [可用数据库名称map] : [安全限制security]

  • [主机名/IP]:可以使用 network/netmask 如 192.168.80.0/255.255.255.0
  • [NIS域名]:msnis
  • [可用数据库名称]:就是由 NIS 制作出来的数据库名称
  • [安全限制]:包括没有限制 (none)、仅能使用 <1024 (port) 及拒绝 (deny)

上面写法表示允许任何主机连接到 NIS server。

启动容器时将其挂载到 /etc/ypserv.conf 即可。

yp.conf

客户端配置文件。

domain msnis server nis-server

格式:domain [NIS 域名] server [服务端主机名/域名/IP]

启动容器时将其挂载到 /etc/yp.conf 即可。

nsswitch.conf

设定账号密码与相关信息的查询顺序,默认是先找 /etc/passwd 再找 NIS 数据库。

修改这三项:

passwd:     files nis
shadow:     files nis
group:      files nis

启动容器时将其挂载到 /etc/nsswitch.conf 即可。

systemctl

Docker 容器只提供进程隔离,它不是一个完整的虚拟系统,不能使用 systemctl 等系统管理工具。

docker-systemctl-replacement 一定程度上可以代替传统的 systemctl 用于 Docker 容器中。

wget https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py -O systemctl
chmod a+x systemctl

启动容器时将其挂载到 /bin/systemctl 即可。

Dockerfile

FROM centos:7
RUN yum update -y \
 && yum install -y epel-release \
 && yum install -y wget which nano \
 && yum install -y ypserv ypbind yp-tools \
 && yum install -y policycoreutils-python

wget which nano 都是选装的。

客户端启动 ypbind 服务时需要 setsebool,该命令由 policycoreutils-python 提供。

构建:

docker build . -t brms:1

服务端

测试

docker run -itd --name nis-server \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/hosts:/etc/hosts:ro \
-v $PWD/systemctl:/bin/systemctl \
-v $PWD/network:/etc/sysconfig/network \
-v $PWD/ypserv.conf:/etc/ypserv.conf \
-v $PWD/server.sh:/root/server.sh \
--hostname=nis-server \
--domainname=nis-server \
--privileged=true \
brms:1 /usr/sbin/init && de nis-server

容器内执行:

nisdomainname msnis
systemctl start rpcbind
systemctl start ypserv
systemctl start yppasswdd
chkconfig ypserv on
chkconfig yppasswdd on
# for i in `seq 1 5`; do echo "=====create nisuser$i====="; useradd -u 100$i nisuser$i; echo password | passwd --stdin nisuser$i; done
/usr/lib64/yp/ypinit -m

客户端

测试:

docker run -it --rm \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/hosts:/etc/hosts:ro \
-v $PWD/systemctl:/bin/systemctl \
-v $PWD/yp.conf:/etc/yp.conf \
-v $PWD/nsswitch.conf:/etc/nsswitch.conf \
-v $PWD/network:/etc/sysconfig/network \
--hostname=nis-client \
--domainname=nis-client \
--privileged=true \
brms:1 /usr/sbin/init

容器内执行:

nisdomainname msnis
systemctl start rpcbind
systemctl start ypbind

测试连接:

yptest

参考

0

评论区