NSS,简写自Name Service Switch。我把它译为“名字服务中心”。
在*nix操作系统中,NSS是C语言库(Library C或者glibc)的一部分,用以寻找名字。比如说,我们运行ls -lh查看一个目录中的文件列表,可以看到各文件的用户和用户组,如下图中的root用户和root用户组。实际上,系统中保存的只是它们的数字ID。而显示时必须将其字符或字符加数字形式,就得NSS来帮助查找。
我们使用glibc NSS,可以通过/etc/nsswitch.conf来设定各种名称的访问方法,即主机名、用户名、组名等
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Desktop
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Documents
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Downloads
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Music
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Pictures
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Public
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Templates
-rwxr-xr-x. 1 root root 616 Oct 10 07:44 test.sh
-rw-r--r--. 1 root root 67 Oct 10 17:22 totalScore
drwxr-xr-x. 2 root root 6 Nov 11 22:36 Videos
在NSS问世之前,C语言库使用文件来寻找各种对象的名称,如/etc/passwd。后来,参照SUN公司Solaris 2中的处理方法,NSS应运而生。其基本思想是:让不同的服务访问不同的数据库。这样做有三个明显的好处:
1、新加入的服务无须将其数据添加到C语言库
2、各模块可以单独更新
3、C语言库不会变得雍肿
glibc NSS支持的数据库列表如下:
aliases,邮件的别名
ethers,以太网的IP
group,用户组数据库,大多数的操作系统上,保存在/etc/group
hosts,主机名和IP地址,大多数操作系统上,保存在/etc/hosts
netgroup,网络范围内的主机名和用户名
networks,网络名称和IP,大多数操作系统上,保存在/etc/networks
protocols,网络协议,如保存在/etc/protocols
passwd,用户名称,如保存在/etc/shadow
rpc,远程进程名称和地址
services,网络服务,如/etc/services
shadow,密码,如/etc/shadow
参考网址:
https://www.gnu.org/software/libc/manual/html_node/Name-Service-Switch.html
https://beeznest.wordpress.com/tag/name-service-switch/