nss-mymachines 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 · 指令索引systemd-241

名称

nss-mymachines, libnss_mymachines.so.2 — 提供了 解析本地容器名称的功能

大纲

libnss_mymachines.so.2

描述

nss-mymachines 是一个 glibc(GNU C Library) NSS(Name Service Switch) 插件, 提供了本地容器名称的解析功能。 systemd-machined.service(8) 服务按照本地容器所属 scope 的顺序,在这些本地容器的名称与其IP地址之间建立对应关系。 该功能仅可用于使用了网络名字空间(network namespace)的容器(参见 systemd-nspawn(1) 手册中对 --private-network 的描述)。 注意,解析得到的名称是在 systemd-machined 中注册的名称, 可能不同于容器内配置的主机名。

该插件还为映射到容器中的用户与组的名称提供了解析功能。 分配给 container 容器的所有用户与组的名称都会在主机上显示为 "vu-container-uid" 与 "vg-container-gid" (参见下文的例子)。 该功能仅可用于使用了用户名字空间(user namespace)的容器。参见 --private-users 选项(参见 systemd-nspawn(1) 手册)。

要激活此NSS模块,可将 "mymachines" 添加到 /etc/nsswitch.conf 文件中以 "hosts:", "passwd:", "group:" 开头的行里面。

建议将 "mymachines" 放置在 /etc/nsswitch.conf 文件中 紧跟 "files" 或 "compat" 项之后,以确保在解析时,本地映射文件 /etc/hosts, /etc/passwd, /etc/group 仍为最优先, 同时又将其他解析方式(DNS之类)作为后备。

配置 /etc/nsswitch.conf 文件

下面的 /etc/nsswitch.conf 文件就是一个正确开启了 nss-mymachines 插件的例子:

passwd:         compat mymachines systemd
group:          compat mymachines systemd
shadow:         compat

hosts:          files mymachines resolve [!UNAVAIL=return] dns myhostname
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

nss-mymachines 提供的映射

使用 systemd-nspawn(1) 运行 "rawhide" 容器:

# systemd-nspawn -M rawhide --boot --network-veth --private-users=pick
Spawning container rawhide on /var/lib/machines/rawhide.
Selected user namespace base 20119552 and range 65536.
...

$ machinectl --max-addresses=3
MACHINE CLASS     SERVICE        OS     VERSION ADDRESSES
rawhide container systemd-nspawn fedora 30      169.254.40.164 fe80::94aa:3aff:fe7b:d4b9

$ getent passwd vu-rawhide-0 vu-rawhide-81
vu-rawhide-0:*:20119552:65534:vu-rawhide-0:/:/sbin/nologin
vu-rawhide-81:*:20119633:65534:vu-rawhide-81:/:/sbin/nologin

$ getent group vg-rawhide-0 vg-rawhide-81
vg-rawhide-0:*:20119552:
vg-rawhide-81:*:20119633:

$ ps -o user:15,pid,tty,command -e|grep '^vu-rawhide'
vu-rawhide-0      692 ?        /usr/lib/systemd/systemd
vu-rawhide-0      731 ?        /usr/lib/systemd/systemd-journald
vu-rawhide-192    734 ?        /usr/lib/systemd/systemd-networkd
vu-rawhide-193    738 ?        /usr/lib/systemd/systemd-resolved
vu-rawhide-0      742 ?        /usr/lib/systemd/systemd-logind
vu-rawhide-81     744 ?        /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
vu-rawhide-0      746 ?        /usr/sbin/sshd -D ...
vu-rawhide-0      752 ?        /usr/lib/systemd/systemd --user
vu-rawhide-0      753 ?        (sd-pam)
vu-rawhide-0     1628 ?        login -- zbyszek
vu-rawhide-1000  1630 ?        /usr/lib/systemd/systemd --user
vu-rawhide-1000  1631 ?        (sd-pam)
vu-rawhide-1000  1637 pts/8    -zsh

$ ping -c1 rawhide
PING rawhide(fe80::94aa:3aff:fe7b:d4b9%ve-rawhide (fe80::94aa:3aff:fe7b:d4b9%ve-rawhide)) 56 data bytes
64 bytes from fe80::94aa:3aff:fe7b:d4b9%ve-rawhide (fe80::94aa:3aff:fe7b:d4b9%ve-rawhide): icmp_seq=1 ttl=64 time=0.045 ms
...
$ ping -c1 -4 rawhide
PING rawhide (169.254.40.164) 56(84) bytes of data.
64 bytes from 169.254.40.164 (169.254.40.164): icmp_seq=1 ttl=64 time=0.064 ms
...

# machinectl shell rawhide /sbin/ip a
Connected to machine rawhide. Press ^] three times within 1s to exit session.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ...
2: host0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 96:aa:3a:7b:d4:b9 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 169.254.40.164/16 brd 169.254.255.255 scope link host0
       valid_lft forever preferred_lft forever
    inet6 fe80::94aa:3aff:fe7b:d4b9/64 scope link
       valid_lft forever preferred_lft forever
Connection to machine rawhide terminated.

参见

systemd(1), systemd-machined.service(8), machinectl(1), nss-systemd(8), nss-resolve(8), nss-myhostname(8), nsswitch.conf(5), getent(1)