zoukankan      html  css  js  c++  java
  • nsswitch

    nsswitch简介

    nsswith:network service switch ,网络服务转换,是一个通用框架,实现名称解析。因为人们更容易记得是字符串样式的名称,而不是数字格式的。不是Nintendo switch。

    例如:用户登录linux操作系统的时候,输入用户名,系统会将用户输入的用户名解析成id号,与解析库中存放的id进行比对,如果匹配,则让用户输入密码,然后解析用户的密码并比对,如果都匹配,那么用户可以登录。

    解析库是什么?

    解析库可以理解为存放 名称(name):字段(id)的存储。可以是文件系统的文件、关系型数据库、NIS(Network Information Service)、LDAP等。对于一个程序来说,如果要实现名称解析,就需要编写至少一个接口,与上述的几种解析库进行通信,至少一个接口是因为当解析库换掉的时候,还需要与替换后的解析库进行通信,要能够理解对方的协议,很麻烦。这时就需要一个通用框架,来实现与不同解析库的通讯。nsswitch就是这样的通用框架。通过配置文件nsswitch.conf规定了哪些服务通过哪些路径及按照什么顺序来查找特定类型的信息还可以指定某个方法奏效或失效时系统将采取什么动作。

    nsswitch与各存储交互的模块

    有两个位置:

    /lib64/libns*
    /usr/lib64/libns*
    [root@master pam.d]# ls /lib64/libns*
    /lib64/libnsl-2.17.so         /lib64/libnss_db.so            /lib64/libnss_mymachines.so.2
    /lib64/libnsl.so              /lib64/libnss_db.so.2          /lib64/libnss_nis-2.17.so
    /lib64/libnsl.so.1            /lib64/libnss_dns-2.17.so      /lib64/libnss_nisplus-2.17.so
    /lib64/libnspr4.so            /lib64/libnss_dns.so           /lib64/libnss_nisplus.so
    /lib64/libnss3.so             /lib64/libnss_dns.so.2         /lib64/libnss_nisplus.so.2
    /lib64/libnssckbi.so          /lib64/libnss_files-2.17.so    /lib64/libnss_nis.so
    /lib64/libnss_compat-2.17.so  /lib64/libnss_files.so         /lib64/libnss_nis.so.2
    /lib64/libnss_compat.so       /lib64/libnss_files.so.2       /lib64/libnsspem.so
    /lib64/libnss_compat.so.2     /lib64/libnss_hesiod-2.17.so   /lib64/libnsssysinit.so
    /lib64/libnss_db-2.17.so      /lib64/libnss_hesiod.so        /lib64/libnssutil3.so
    /lib64/libnssdbm3.chk         /lib64/libnss_hesiod.so.2
    /lib64/libnssdbm3.so          /lib64/libnss_myhostname.so.2
    
    [root@master pam.d]# ls /usr/lib64/libns*
    /usr/lib64/libnsl-2.17.so         /usr/lib64/libnss_db.so            /usr/lib64/libnss_mymachines.so.2
    /usr/lib64/libnsl.so              /usr/lib64/libnss_db.so.2          /usr/lib64/libnss_nis-2.17.so
    /usr/lib64/libnsl.so.1            /usr/lib64/libnss_dns-2.17.so      /usr/lib64/libnss_nisplus-2.17.so
    /usr/lib64/libnspr4.so            /usr/lib64/libnss_dns.so           /usr/lib64/libnss_nisplus.so
    /usr/lib64/libnss3.so             /usr/lib64/libnss_dns.so.2         /usr/lib64/libnss_nisplus.so.2
    /usr/lib64/libnssckbi.so          /usr/lib64/libnss_files-2.17.so    /usr/lib64/libnss_nis.so
    /usr/lib64/libnss_compat-2.17.so  /usr/lib64/libnss_files.so         /usr/lib64/libnss_nis.so.2
    /usr/lib64/libnss_compat.so       /usr/lib64/libnss_files.so.2       /usr/lib64/libnsspem.so
    /usr/lib64/libnss_compat.so.2     /usr/lib64/libnss_hesiod-2.17.so   /usr/lib64/libnsssysinit.so
    /usr/lib64/libnss_db-2.17.so      /usr/lib64/libnss_hesiod.so        /usr/lib64/libnssutil3.so
    /usr/lib64/libnssdbm3.chk         /usr/lib64/libnss_hesiod.so.2
    /usr/lib64/libnssdbm3.so          /usr/lib64/libnss_myhostname.so.2

    nsswitch配置文件(/etc/nsswitch.conf)

    # An example Name Service Switch config file. This file should be
    # sorted with the most-used services at the beginning.                  ## 说明了nsswitch的作用:将服务名称切换到配置文件,这个配置文件应该是将最常用的服务放在起始位置
    #
    # The entry '[NOTFOUND=return]' means that the search for an            ## 条目[NOTFOUND=return]的意思是从前一个条目没有检索到任何内容的时候就停止检索,这个的意思是找了但是没找到。
    # entry should stop if the search in the previous entry turned          ## 由于其他原因(服务不可用),检索失败的情况下会查找下一个条目。这个的意思是库文件存在,但根本就没有要查找的条目
    # up nothing. Note that if the search failed due to some other reason
    # (like no NIS server responding) then the search continues with the
    # next entry.
    #
    # Valid entries include:                                                ## 可用的条目
    #
    #    nisplus            Use NIS+ (NIS version 3)
    #    nis            Use NIS (NIS version 2), also called YP
    #    dns            Use DNS (Domain Name Service)
    #    files            Use the local files
    #    db            Use the local database (.db) files
    #    compat            Use NIS on compat mode
    #    hesiod            Use Hesiod for user lookups
    #    [NOTFOUND=return]    Stop searching if not found so far
    #
    
    # To use db, put the "db" in front of "files" for entries you want to be   ## 说明了检索顺序
    # looked up first in the databases
    #
    # Example:
    #passwd:    db files nisplus nis
    #shadow:    db files nisplus nis
    #group:     db files nisplus nis

    # Example - obey only what nisplus tells us...
    #services: nisplus [NOTFOUND=return] files
    #networks: nisplus [NOTFOUND=return] files
    #protocols: nisplus [NOTFOUND=return] files
    #rpc: nisplus [NOTFOUND=return] files
    #ethers: nisplus [NOTFOUND=return] files
    #netmasks: nisplus [NOTFOUND=return] files

     

    nsswitch的info项

    下面的列表描述了nsswitch.conf文件控制搜索的大多数信息(Info项)的类型。  

    automount:

    自动挂载(/etc/auto.master和/etc/auto.misc)

    bootparams:

    无盘引导选项和其他引导选项(参见bootparam的手册页)

    ethers:

    MAC地址

    group:

    用户所在组(/etc/group),getgrent()函数使用该文件

    hosts:

    主机名和主机号(/etc/hosts),gethostbyname()以及类似的函数使用该文件

    networks:

    网络名及网络号(/etc/networks),getnetent()函数使用该文件

    passwd:

    用户口令(/etc/passwd),getpwent()函数使用该文件

    protocols:

    网络协议(/etc/protocols),getprotoent()函数使用该文件

    publickey:

    NIS+及NFS所使用的secure_rpc的公开密钥

    rpc:

    远程过程调用名及调用号(/etc/rpc),getrpcbyname()及类似函数使用该文件

    services:

    网络服务(/etc/services),getservent()函数使用该文件

    shadow:

    映射口令信息(/etc/shadow),getspnam()函数使用该文件

    aiases:

    邮件别名,sendmail()函数使用该文件

    nsswitch的搜索库文件

    files:

    搜索本地文件,如/etc/passwd和/etc/hosts

    nis:

    搜索NIS数据库,nis还有一个别名,即yp

    dns:

    查询DNS(只查询主机)

    compat:

    passwd、group和shadow文件中的±语法

    compat方法:passwd、group和shadow文件中的"±"  
        可以在/etc/passwd、/etc/group和/etc/shadow文件中放入一些特殊的代码,(如果在nsswitch.conf文件中指定compat方法的话)让系统将本地文件和NIS映射表中的项进行合并和修改。  
        在这些文件中,如果在行首出现加号'+',就表示添加NIS信息;如果出现减号'-',就表示删除信息。举例来说,要想使用passwd文件中的这些代码,可以在nsswitch.conf文件中指定passwd: compat。然后系统就会按照顺序搜寻passwd文件,当它遇到以+或者 开头的行时,就会添加或者删除适当的NIS项。  
        虽然可以在passwd文件的末尾放置加号,在nsswitch.conf文件中指定passwd: compat,以搜索本地的passwd文件,然后再搜寻NIS映射表,但是更高效的一种方法是在nsswitch.conf文件中添加passwd: file nis而不修改passwd文件。

    参考 https://blog.51cto.com/only27753/1540086?source=dra

    nsswitch的查找状态和执行动作

    STATUS => success | not found | unavail | tryagain
    ACTION => return | continue
    
    NOTFOUND:方法已经执行,但是并没有找到待搜索的值。 默认的动作是continue。
    
    SUCCESS:方法已经执行,并且已经找到待搜索的值,没有返回错误。默认动作是return。
    
    UNAVAIL:方法失败,原因是永久不可用。举例来说,所需的文件不可访问或者所需的服务器可能停机。默认的动作是continue。
    
    TRYAGAIN:方法失败,原因是临时不可用。举例来说,某个文件被锁定,或者某台服务器超载。默认动作是continue。
    
    return:返回到调用例程,带有返回值,或者不带返回值。
    continue:继续执行下一个方法。任何返回值都会被下一个方法找到的值覆盖。

    getent命令

    [root@master pam.d]# getent --help
    Usage: getent [OPTION...] database [key ...]
    Get entries from administrative database.
    
      -i, --no-idn               disable IDN encoding
      -s, --service=CONFIG       Service configuration to be used
      -?, --help                 Give this help list
          --usage                Give a short usage message
      -V, --version              Print program version
    
    Mandatory or optional arguments to long options are also mandatory or optional
    for any corresponding short options.
    
    Supported databases:
    ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts initgroups
    netgroup networks passwd protocols rpc services shadow

    使用实例

    [root@master pam.d]# getent services ssh
    ssh                   22/tcp
    
    [root@master pam.d]# getent services mysql
    mysql                 3306/tcp
    
    [root@master pam.d]# getent services ldap
    ldap                  389/tcp
    
    [root@master pam.d]# getent hosts localhost
    ::1             localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    [root@master pam.d]# getent hosts master
    fe80::20c:29ff:fe3e:e431 master

     

     
  • 相关阅读:
    sgu209:Areas(计算几何)
    altium designer电气符号和包的常用元素
    wxWidgets谁刚开始学习指南(5)——使用wxSmith可视化设计
    zoj 3820 Building Fire Stations(二分法+bfs)
    iOS 注册或登录页面(UILable,UITextField,UIButton)
    [ACM] POJ 2689 Prime Distance (筛选范围大素数)
    数字签名和数字证书技术简介(两)
    [Node] Using dotenv to config env variables
    [TypeStyle] Compose CSS classes using TypeStyle
    [Node] Use babel-preset-env with Native Node Features and Also Use Babel Plugins
  • 原文地址:https://www.cnblogs.com/zh-dream/p/12735152.html
Copyright © 2011-2022 走看看