一、什么是nsswithch.conf(服务搜索顺序)文件呢?

nsswitch.conf(name service switch configuration,名字服务切换配置)文件位于/etc目录下,由它规定通过哪些途径以及按照什么顺序以及通过这些途径来查找特定类型的信息,还可以指定某个方法奏效或失效时系统将采取什么动作。

Nsswitch.conf中的每一行配置都指明了如何搜索信息,每行配置的格式如下: 
Info: method[[action]] [method[[action]]...] 
    其中,info指定该行所描述的信息的类型,method为用来查找该信息的方法,action是对前面的method返回状态的响应。action要放在方括号里。

二、nsswitch.conf的工作原理

 当需要提供nsswitch.conf文件所描述的信息的时候,系统将检查含有适当info字段的配置行。它按照从左向右的顺序开始执行配置行中指定的方法。在默认情况下,如果找到期望的信息,系统将停止搜索。如果没有指定action,那么当某个方法未能返回结果时,系统就会尝试下一个动作。有可能搜索结束都没有找到想要的信息。

1、信息(Info)

Nsswitch.conf文件通常控制着用户(在passwd中)、口令(在shadow中)、主机IP和组信息(在group中)的搜索。下面的列表描述了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()函数使用该文件

2、方法(method)
    下面列出了nsswich.conf文件控制搜索信息类型的方法,对于每一种信息类型,都可以指定下面的一种或多种方法:

files:

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

nis:

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

dns:

查询DNS(只查询主机)

compat:

passwd、group和shadow文件中的±语法(参见本节后面的相关内容)

3、搜索顺序(从左至右)
       两个或者更多方法所提供的信息可能会重叠。举例来说,files和nis可能都提供同一个用户的口令信息。如果出现信息重叠现象,就需要考虑将哪一种方法作为权威方法(优先考虑),并将该方法放在方法列表中靠左的位置上。
    默认nsswitch.conf文件列出的方法并没有动作项,并假设没有信息重叠(正常情况)。在这种情况下,搜索顺序无关紧要:当一种方法失败之后,系统就会尝试下一种方法,只是时间上受到一点损失。如果在方法之间设置了动作,或者重叠的项的内容不同,那么搜索顺序就变得重要起来。
例如下面两行nsswitch.conf文件配置行:
passwd files nis
host nis files dns
       第一行让系统在/etc/passwd文件中搜索口令信息,如果失败的话,就使用NIS来查找信息。如果正在查找的用户同时出现在这两个地方,就会使用本地文件中的信息,因此它就是权威信息。第二行先使用NIS搜索;如果失败的话,就搜索/etc/hosts文件;如果再次失败的话,核对DNS以找出主机信息。
4、动作项([action])
      在每个方法后面都可以选择跟一个动作项,用来指定如果由于某种原因该方法成功抑或失败需要做些什么。动作项的格式如下:
[[!]STATUS =action]
    其中,开头和末尾的方括号属于格式的一部分,并不是用来指出括号中的内容是可选的。STATUS(按照约定使用大写字母,但本身并不区分大小写)是待测试的状态,action是如果STATUS匹配前面的方法所返回的状态将要执行的动作。开头的感叹号(!)是可选的,其作用是将状态取反。

STATUS:

STATUS的取值如下:

NOTFOUND:方法已经执行,但是并没有找到待搜索的值。 默认的动作是continue。

SUCCESS:方法已经执行,并且已经找到待搜索的值,没有返回错误。默认动作是return。

UNAVAIL:方法失败,原因是永久不可用。举例来说,所需的文件不可访问或者所需的服务器可能停机。默认的动作是continue。

TRYAGAIN:方法失败,原因是临时不可用。举例来说,某个文件被锁定,或者某台服务器超载。默认动作是continue。

action:

action的取值如下:

return:返回到调用例程,带有返回值,或者不带返回值。

continue:继续执行下一个方法。任何返回值都会被下一个方法找到的值覆盖。

示例:

举例来说,下面这行取自nsswitch.conf文件,它的作用是让系统首先使用DNS来搜索给定主机的IP地址。DNS方法后面的动作项是测试该方法所返回的状态是否为“非(!)UNAVAIL”。

hosts    dns [!UNAVAIL=return] files

如果DNS方法没有返回UNAVAIL(!UNAVAIL),也就是说DNS返回SUCCESS、NOTFOUND或者TRYAGAIN,那么系统就会执行与该STATUS相关的动作(return)。其结果就是,只有在DNS服务器不可用的情况下才会使用后面的方法(files)。

如果DNS服务器并不是不可用(两次否定之后就是“可用”),那么搜索返回域名或者报告未找到域名。只有当服务器不可用的时候,搜索才会使用files方法(检查本地的/etc/hosts文件)。

5、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文件。

 

Linux系统下的/etc/nsswitch.conf文件的更多相关文章

  1. Linux系统下不同机器之间拷贝文件的方法

    在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...

  2. ***Linux系统下如何查看及修改文件读写权限

    查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是 ...

  3. [转]Linux系统下如何查看及修改文件读写权限

    转自 :http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html 查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx ...

  4. Linux系统下统计目录及其子目录文件个数

    (1)查看某目录下文件的个数: ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l (2)查看某目录下文件的个数,包括子 ...

  5. linux系统下c程序分多文件实现

    对于一个整数数组排序,按从小到大排序,数组元素个数不定.要求多文件实现 1,排序的函数作为一个文件 输出结果作为一个程序 主函数作为一个文件 运行程序 gcc -o main main.c paixu ...

  6. Linux系统下curl命令上传文件,文件名包含逗号无法上传

    使用curl命令,将备份好的图片全部重新导入到seaweedfs,图片全部以存储在seaweedfs中的fid命令, fid中间有一个逗号,使用curl命令时报错: curl: (26) couldn ...

  7. linux系统下修改文件夹目录权限

    linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

  8. linux系统下nginx安装目录和nginx.conf配置文件目录

    linux系统下nginx安装目录和nginx.conf配置文件目录 1.查看nginx安装目录 输入命令 # ps  -ef | grep nginx 返回结果包含安装目录 root      26 ...

  9. nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下)

    nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下),安装Nginx和HttpAccessKeyModule模块(参考LNMP环境 ...

随机推荐

  1. 使用Thymeleaf时,ajax的url如何设置?

    使用Thymeleaf时,ajax的url如何设置? 最近在做一个论坛项目使用到了Thymeleaf,在使用ajax请求的时候发现无法获取BasePath.在经过一番查阅资料后终于得知如下俩种方法,在 ...

  2. thymeleaf 在 html和js 中拼接字符串

    一.th:text字符串和事件拼接 <span th:text="'Welcome,'+${user.name}">  <span th:text="| ...

  3. 五子棋C#源码,网络对战版---转载--待学习

    五子棋C#源码,网络对战版 支持网络对战的C#五子棋源码下载,VS2010环境编译后可运行,需要先输入ip地址才行,不是单机版的.部分代码摘录如下://将接收的消息转换成自定义集合MessClass ...

  4. Linux系统使用ss命令查看端口状态

    Linux系统使用ss命令查看端口状态 目录 1.可用工具 2.ss帮助 2.1 选项分类说明 2.2 过滤选项family 2.3 过滤选项state 2.4 状态之间的关系 3.ss的使用 3.1 ...

  5. SICOM SOP

    SOPs A Service-Object Pair (SOP) Class is defined by the union of an Information Object Definition ( ...

  6. c/c++ struct的大小以及sizeof用法

    直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则:(在没有#pragma pack宏的情况下) 1:数据成员对齐规则:结构(struct)(或联合(union))的数据成 ...

  7. Unity初识项目结构与面板

    一.Unity的项目结构 Unity中的一个项目是有若干个场景组成的,每一个场景又是由若干个游戏对象组成的,每一个游戏对象身上有若干个组件,每一个组件有若干个属性. 项目——>场景——>游 ...

  8. Redis 一些基本的概念和基础

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  9. 记录下spingboot连接阿里云服务器上的MySQL数据库报错

    错误大概如下: create connection SQLException, url: jdbc:mysql://'IP地址':3306/code007?useUnicode=true&ch ...

  10. 十 Servlet

    5 web资源: 在http协议当中,规定了请求和响应双方,客户端和服务器.与web相关的资源. 静态资源:       html.css.css动态资源:           Servlet/jsp ...