Linux 系统/etc目录下配置文件分类
etc/hostname 中是什么主机名称 则系统就会配置成什么!除了上述介绍的配置文件,/etc/目录下还有哪些重要的系统配置文件?1.可以实现通过主机名称互相通信。2.统一化命名标准(自动化)启动操作系统时候 系统会根据配置文件进行配置主机名称!详细介绍一下Linux系统中与网络相关的配置文件。第三种方式: 永久+临时配置主机名称 重点。如何修改Linux系统中的配置文件?第一种方式: 临时修
目录
/etc/sysconfig/network-scripts/ifcfg-ens33
一、网络相关配置文件
-
主机名与 IP 映射类
-
/etc/hosts
-
本地 DNS 解析文件,将主机名映射到 IP 地址,用于本地快速解析主机名,避免频繁查询外部 DNS 服务器。
-
基本格式
- 在
/etc/hosts文件中,每一行代表一条记录,基本格式为 “IP 地址 主机名(或域名) [别名]”。 - 例如:
127.0.0.1 localhost- 其中 “127.0.0.1” 是 IP 地址,“localhost” 是主机名。这是最常见的本地回环地址与主机名的对应记录,用于本地主机自身的通信。
- 在
-
多个主机名或别名的格式
- 可以为一个 IP 地址指定多个主机名或别名,它们之间用空格分隔。
- 例如:
192.168.1.100 webserver.example.com web1 alias1- 这表示 IP 地址为 “192.168.1.100” 的主机有主机名 “webserver.example.com”,还有别名 “web1” 和 “alias1”。当在本地网络中访问这些名称时,都会解析到 “192.168.1.100” 这个 IP 地址。
-
IPv6 格式
- 如果要添加 IPv6 地址的记录,格式与 IPv4 类似,只是 IPv6 地址的写法较长且有特定的格式。
- 例如:
fe80::1%eth0 localipv6host- 其中 “fe80::1% eth0” 是一个基于链路本地的 IPv6 地址(“% eth0” 部分可能因网络接口不同而变化),“localipv6host” 是对应的主机名。IPv6 地址在
/etc/hosts文件中的记录方式同样可以添加别名等内容。
-
注释格式
- 可以在
/etc/hosts文件中添加注释,注释行以 “#” 开头。 - 例如:
# This is a comment line to describe the following host record192.168.1.110 devserver.example.com dev1- 这样可以方便地对记录进行说明,提高文件的可读性,尤其是在记录较多或者需要记录特殊用途的主机时。
- 可以在
-
[root@study01 ~]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.51 db01 在企业中使用windows的hosts文件较多 #windows的hosts文件路径: C:\Windows\System32\drivers\etc
-
-
/etc/hostname
-
作用: 存放主机名称的配置文件
主机名称的作用:
1.可以实现通过主机名称互相通信
2.统一化命名标准(自动化)[root@study01 ~]# cat /etc/hostname study01启动操作系统时候 系统会根据配置文件进行配置主机名称!
/etc/hostname 中是什么主机名称 则系统就会配置成什么!
修改主机名称方式:第一种方式: 临时修改重启系统失效
[root@study01 ~]# hostname test第二种方式: 永久修改主机名称
修改配置文件,完成后重启操作系统生效[root@study01 ~]# cat /etc/hostname study01第三种方式: 永久+临时配置主机名称 重点
[root@study01 ~]# hostnamectl set-hostname Linux
-
-
-
网络接口配置类
- /etc/network/interfaces:在某些系统中用于配置网络接口参数,如 IP 地址、网关、DNS 等,可详细设置网络接口的网络连接属性。
-
/etc/sysconfig/network-scripts/ifcfg-ens33
存储于 /etc/sysconfig/network-scripts/ifcfg-[网卡名],针对 CentOS 系统专门的网卡参数设置文件,可设置网卡的 IP 获取方式(静态或动态)、IP 地址、子网掩码等信息。 手工配置ip地址 1.查看系统的版本 [root@slave-mysql ~]# cat /etc/centos-release CentOS Linux release 8.4.2105 [root@slave-mysql ~]# 2.进入网卡配置文件目录 [root@slave-mysql ~]# cd /etc/sysconfig/network-scripts/ [root@slave-mysql network-scripts]# ls ifcfg-ens33 [root@slave-mysql network-scripts]# ifcfg-ens33 是ens33网卡的配置文件 interface config 接口配置 ens33是系统里的第一个网卡的名字 [root@slave-mysql network-scripts]# yum install vim -y 3.修改配置文件 [root@slave-mysql network-scripts]# vim ifcfg-ens33 BOOTPROTO=none 静态配置ip地址 none 静态配置(手工配置) dhcp 就是动态获得,别的dhcp服务器给我们的机器分配ip地址 NAME=ens33 网络连接的名字 DEVICE=ens33 网卡的设备名 ONBOOT=yes 开机是否启动(激活) yes 启动 no 不启动 IPADDR=192.168.0.27 ip地址 NETMASK=255.255.255.0 子网掩码 GATEWAY=192.168.0.1 默认网关 DNS1=114.114.114.114 首选DNS服务器地址 DNS2=192.168.0.1 备用DNS服务器地址 4.重启网络服务,获得新配置的ip centos7 重启网络服务 service network restart 重启网络服务 service NetworkManager stop -->NetworkManager 是一个网络连接管理服务,经常会导致我们的网络配置的ip地址出现服务启动不了,没有获得ip地址 centos8 重启网络服务 ifup ens33 --》interface up ens33 [root@slave-mysql network-scripts]# ifup ens33 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/23) [root@slave-mysql network-scripts]# NetworkManager 在centos8里是不能关闭,必须要开启的
-
DNS 相关类
-
/etc/resolv.conf
- DNS 客户机配置文件,用于设置 DNS 服务器的 IP 地址及 DNS 域,使系统能够通过指定的 DNS 服务器进行域名解析。系统在进行域名解析时,会按照
nameserver行出现的顺序依次向这些 DNS 服务器发送请求,直到获得有效的解析结果或者全部服务器查询完毕。[root@slave-mysql ~]# vim /etc/resolv.conf -->存放dns服务器ip地址的,真正我们进行域名查询的时候,就到这个文件里找dns服务器地址 # Generated by NetworkManager nameserver 114.114.114.114 nameserver 192.168.0.1 nameserver 8.8.8.8
- DNS 客户机配置文件,用于设置 DNS 服务器的 IP 地址及 DNS 域,使系统能够通过指定的 DNS 服务器进行域名解析。系统在进行域名解析时,会按照
-
/etc/host.conf
-
文件概述
/etc/host.conf是 Linux 系统中的一个配置文件,主要用于指定主机名查找的方法和顺序。它决定了系统在进行主机名解析时,是先查找本地的/etc/hosts文件,还是直接向 DNS 服务器请求,或者是采用其他的解析策略。
-
主要配置选项及含义
- order:
- 含义:这是
/etc/host.conf文件中最核心的配置选项,用于指定主机名查找的顺序。它的值是一个用空格分隔的列表,常见的选项包括hosts、bind(或dns)等。 - 示例:
order hosts,bind,这个配置表示系统在进行主机名解析时,首先会查找/etc/hosts文件,如果在/etc/hosts文件中没有找到对应的主机名解析记录,就会向 DNS 服务器(通过bind或dns服务)发送请求进行解析。
- 含义:这是
- multi:
- 含义:用于指定是否允许一个主机名对应多个 IP 地址。当
multi的值为on时,表示允许一个主机名有多个 IP 地址;当multi的值为off时,表示一个主机名只能对应一个 IP 地址。 - 示例:
multi on,如果在/etc/hosts文件中有这样的记录192.168.1.100 webserver.example.com和192.168.1.101 webserver.example.com,并且multi设置为on,那么在解析webserver.example.com这个主机名时,系统会返回两个 IP 地址192.168.1.100和192.168.1.101。
- 含义:用于指定是否允许一个主机名对应多个 IP 地址。当
- nospoof:
- 含义:主要用于防止 IP 地址欺骗。当
nospoof的值为on时,系统会对主机名解析进行额外的检查,以确保返回的 IP 地址与预期的相符,避免恶意用户通过伪造 IP 地址来欺骗系统。不过这个选项的具体实现和效果可能因系统和网络环境而异。 - 示例:
nospoof on,在这种设置下,系统会更加谨慎地处理主机名解析,对于一些可疑的解析结果可能会进行拒绝或者进一步验证。
- 含义:主要用于防止 IP 地址欺骗。当
- order:
-
文件的重要性和应用场景
- 本地优先解析:通过合理设置
order选项,可以实现本地主机名的快速解析。例如,在一个小型的本地网络中,如果经常需要访问本地的服务器,将order设置为优先查找/etc/hosts文件,可以减少对外部 DNS 服务器的依赖,提高解析速度。 - 安全性和稳定性:
multi和nospoof选项可以在一定程度上增强系统的安全性和稳定性。例如,在高安全性要求的网络环境中,开启nospoof选项可以防止一些基于 IP 地址欺骗的攻击;而根据实际需求合理设置multi选项,可以避免因主机名对应多个 IP 地址而可能导致的混乱。 - 自定义解析策略:
/etc/host.conf文件允许系统管理员根据网络环境和应用需求,灵活地定制主机名解析的策略,使其更好地适应不同的网络架构和服务部署。
- 本地优先解析:通过合理设置
- 默认order
-
不同系统的默认顺序可能不同
- 在许多 Linux 系统中,如果
/etc/host.conf文件没有设置order选项,其默认行为通常是先查找本地的/etc/hosts文件进行主机名解析,然后再向 DNS 服务器请求解析。 - 这种默认设置的主要原因是为了提高解析效率和安全性。优先使用本地
/etc/hosts文件可以快速解析本地网络中经常访问的主机,减少对外部 DNS 服务器的依赖,并且可以避免一些潜在的 DNS 安全问题,如 DNS 劫持。
- 在许多 Linux 系统中,如果
-
具体示例说明默认顺序的工作方式
- 假设在本地
/etc/hosts文件中有一条记录192.168.1.100 local-server,当系统需要解析local - server这个主机名时,它会首先在/etc/hosts文件中查找,找到对应的 IP 地址192.168.1.100,然后返回这个解析结果。 - 如果要解析一个不在
/etc/hosts文件中的外部域名,如www.example.com,系统在/etc/hosts文件中找不到对应的记录后,就会按照系统默认的 DNS 配置(通常由/etc/resolv.conf文件指定 DNS 服务器)向 DNS 服务器发送请求进行解析。
- 假设在本地
-
如何确认默认顺序(在不确定的情况下)
- 可以通过简单的测试来确认默认顺序。例如,在本地
/etc/hosts文件中添加一个虚构的主机名和 IP 地址记录,然后尝试在终端中使用ping或nslookup命令来解析这个主机名。如果能够成功解析并且解析结果与/etc/hosts文件中的记录一致,就可以初步判断系统是先查找/etc/hosts文件的。 - 另外,也可以查看系统的文档或者相关的网络配置文件(如
/etc/nsswitch.conf文件,在某些系统中它也会影响主机名解析顺序)来确定默认的主机名解析顺序。不过在大多数常见的 Linux 系统中,上述的先本地/etc/hosts后 DNS 服务器的顺序是比较通用的默认行为。
- 可以通过简单的测试来确认默认顺序。例如,在本地
-
-
-
-
网络服务相关类
-
/etc/hosts.allow 和 /etc/hosts.deny
-
文件概述
/etc/hosts.allow和/etc/hosts.deny是Linux系统中用于基于主机的访问控制(TCP Wrappers)的配置文件。它们主要用于控制哪些远程主机可以或不可以访问本机运行的特定网络服务。这种访问控制机制提供了一种简单而有效的方式来增强系统的安全性,特别是对于一些基于xinetd超级守护进程启动的网络服务。
-
/etc/hosts.allow文件
- 基本格式:
- 这个文件的每一行用于定义允许访问的规则。格式通常为“服务列表:主机列表”。其中,“服务列表”是指本机上运行的网络服务名称(如
sshd、httpd等),可以使用通配符ALL来表示所有服务;“主机列表”是指允许访问的远程主机,可以是具体的IP地址、主机名或者网络地址范围,也可以使用通配符。 - 例如:
sshd: 192.168.1.0/24,这表示允许来自192.168.1.0/24这个网络段的主机访问本机的sshd(SSH服务)。
- 这个文件的每一行用于定义允许访问的规则。格式通常为“服务列表:主机列表”。其中,“服务列表”是指本机上运行的网络服务名称(如
- 通配符的使用:
ALL:在服务列表中表示所有服务,在主机列表中表示所有主机。例如,ALL: 192.168.1.100允许192.168.1.100这台主机访问所有服务;ALL: ALL允许所有主机访问所有服务。- 点号(
.):可以用于匹配主机名中的部分内容。例如,.example.com匹配所有以example.com为后缀的主机名。 - 网络掩码:如
/24用于表示子网掩码为255.255.255.0的网络段,/16表示子网掩码为255.255.0.0的网络段等。
- 示例规则解释:
httpd: 10.0.0.1, 10.0.0.2:允许IP地址为10.0.0.1和10.0.0.2的主机访问本机的httpd(Web服务)。ALL: LOCAL:允许本地网络中的主机(通常是通过127.0.0.1或本地网络接口访问的主机)访问所有服务。
- 基本格式:
-
/etc/hosts.deny文件
- 基本格式:
- 与
/etc/hosts.allow类似,格式为“服务列表:主机列表”,用于定义禁止访问的规则。 - 例如:
vsftpd: ALL,这表示禁止所有主机访问本机的vsftpd(FTP服务)。
- 与
- 规则优先级和匹配顺序:
- 当有主机请求访问某个服务时,系统会先检查
/etc/hosts.allow文件,如果在该文件中有匹配的允许规则,就允许访问;如果在/etc/hosts.allow文件中没有找到允许规则,系统会接着检查/etc/hosts.deny文件,如果在该文件中有匹配的禁止规则,就禁止访问;如果在两个文件中都没有匹配的规则,默认情况下是允许访问(不过这可能因系统配置和具体的安全策略而有所不同)。
- 当有主机请求访问某个服务时,系统会先检查
- 基本格式:
-
应用场景和注意事项
- 应用场景:
- 增强服务安全性:可以针对特定的敏感服务(如SSH、数据库服务等)限制访问的主机范围,防止未经授权的访问。例如,只允许公司内部网络的特定IP段访问SSH服务,以保护服务器的远程登录安全。
- 临时封锁访问:如果发现有可疑的主机频繁尝试访问某个服务,可以将其添加到
/etc/hosts.deny文件中,暂时禁止其访问,直到问题得到解决。
- 注意事项:
- 配置错误可能导致服务不可访问:在修改这些文件时,需要谨慎检查规则,因为错误的规则可能会导致合法的用户或服务无法正常访问。例如,如果不小心在
/etc/hosts.deny文件中添加了禁止所有主机访问所有服务的规则(ALL: ALL),并且没有正确的/etc/hosts.allow规则来允许必要的访问,可能会导致系统对外服务全部中断。 - 并非适用于所有服务:TCP Wrappers机制主要适用于基于xinetd启动的服务和一些经过包装可以使用TCP Wrappers的服务。对于一些不支持TCP Wrappers的服务,这些文件中的规则可能不会生效。不过,许多常见的网络服务(如SSH、FTP、HTTP等)通常可以与TCP Wrappers配合使用来实现访问控制。
- 配置错误可能导致服务不可访问:在修改这些文件时,需要谨慎检查规则,因为错误的规则可能会导致合法的用户或服务无法正常访问。例如,如果不小心在
- 应用场景:
-
-
/etc/netconfig
-
概述
/etc/netconfig文件用于描述主机上的所有传输协议,其配置信息对网络连接和通信的正常运行起着重要作用. -
格式与字段说明
该文件中每一行代表一个传输协议的配置信息,格式为:
<netid> <semantics> <flags> <protofamily> <proto> <device> <name_to_addr_libs>.- network id:表示传输协议的本地名称,不一定是常见的如 “tcp”“udp” 等,由系统管理员定义,需保证本地唯一性.
- semantics:协议的语义,有效的语义值包括 “tpi_clts”(无连接)、“tpi_cots”(面向连接)、“tpi_cots_ord”(面向连接且有序释放)等.
- flags:只能取值 “v” 或 “-”,目前仅定义了 “visible” 标志 “v”,表示该协议可见或可用.
- protocol family:传输协议的协议族名称,如 “inet” 表示 Internet 协议族,“loopback” 表示回环协议族.
- protocol name:具体的协议名称,若协议族是 “inet”,则可能是 “tcp”“udp”“icmp” 等;否则为 “-”.
- network device:访问该传输协议时要打开的设备文件的完整路径名.
- name-to-address translation libraries:名称到地址转换库的共享对象文件名,以逗号分隔;若为 “-”,则表示重定向到主机和服务的名称服务切换策略.
-
示例
以下是一个
/etc/netconfig文件的示例 :udp tpi_clts v inet udp /dev/udp - tcp tpi_cots_ord v inet tcp /dev/tcp - icmp tpi_raw - inet icmp /dev/icmp - raw_ip tpi_raw - inet - /dev/raw_ip - ticlts tpi_clts v loopback - /dev/ticlts_straddr.so ticots tpi_cots v loopback - /dev/ticots_straddr.so ticotso_rd tpi_cots_ord v loopback - /dev/ticotso_rd_straddr.so -
注意事项
- 顺序问题:系统管理员设置的
/etc/netconfig文件中条目的顺序很重要,查找/etc/netconfig条目的例程会按照文件中的顺序返回,该顺序也是例程的默认传输搜索顺序,通常回环条目应放在文件末尾. - 配置影响:对该文件的修改可能会影响系统的网络连接和通信,若修改不当可能导致网络功能异常,因此在修改前需充分了解其作用和影响,并做好备份.
- 顺序问题:系统管理员设置的
-
-
/etc/service
-
文件概述
- 在 Linux 系统中,准确的文件是
/etc/services。它是一个文本文件,主要用于将服务名称和端口号(以及协议类型)进行关联映射。这个文件对于系统的网络服务运行非常重要,因为许多网络服务需要使用特定的端口号来接收和发送数据,而/etc/services文件提供了一种标准化的方式来确定这些端口号的分配。
- 在 Linux 系统中,准确的文件是
-
文件格式和内容
- 格式:文件中的每一行代表一个服务的端口号映射信息。格式通常为 “服务名称 端口号 / 协议 [别名]”。其中,“服务名称” 是网络服务的名字,如
http、ssh、ftp等;“端口号” 是服务使用的 TCP 或 UDP 端口;“协议” 是指使用的传输协议,通常是tcp或者udp;“别名” 是服务名称的其他叫法,是可选的。 - 示例内容:
http 80/tcp www www - httpd,这表示http服务(通常是 Web 服务)使用 TCP 协议的 80 端口,它还有www、www - httpd等别名。这意味着当系统收到一个目标端口为 80 的 TCP 数据包,并且目的是访问http相关服务时,就可以正确地将数据包路由到对应的 Web 服务程序。ssh 22/tcp # The Secure Shell (SSH) Protocol,这里明确了ssh服务使用 TCP 协议的 22 端口,并且后面的注释说明了这是安全外壳(SSH)协议。
- 格式:文件中的每一行代表一个服务的端口号映射信息。格式通常为 “服务名称 端口号 / 协议 [别名]”。其中,“服务名称” 是网络服务的名字,如
-
用途和重要性
- 服务识别和端口分配:对于系统管理员和网络应用开发者来说,
/etc/services文件提供了一个清晰的服务端口号参考。当配置新的网络服务或者开发网络应用程序时,可以通过这个文件来确定一个合适的、未被占用的端口号,并且遵循标准化的命名约定。例如,如果你要开发一个新的自定义网络服务,你可以在这个文件中查找一个未被使用的端口号,并为你的服务分配一个有意义的名称。 - 网络安全和防火墙配置:在配置防火墙规则时,
/etc/services文件也非常有用。防火墙通常需要根据端口号来允许或者禁止特定的网络流量。通过参考/etc/services文件,管理员可以很容易地确定要开放或者关闭哪些端口来允许或阻止特定服务的网络访问。例如,如果你想要允许外部网络访问本地的 Web 服务,你可以通过防火墙规则开放 TCP 的 80 端口,因为你知道http服务使用这个端口。 - 网络监控和故障排除:在进行网络监控或者故障排除时,
/etc/services文件可以帮助管理员快速确定端口号对应的服务。例如,如果在网络监控工具中发现某个端口有异常的流量,通过查看/etc/services文件可以了解这个端口对应的服务,从而更好地判断是否存在安全风险或者服务故障。
- 服务识别和端口分配:对于系统管理员和网络应用开发者来说,
-
-
-
网络文件系统类
- /etc/exports:NFS (Network File System) Server 输出文件系统表,定义 NFS 服务器要共享的文件系统及相关权限设置,以便其他客户端能够挂载和访问。
二、用户与权限相关配置文件
-
用户账户信息类
-
/etc/passwd

-
文件概述
/etc/passwd是Linux系统中一个至关重要的文件,它存储了系统用户账户的基本信息。这个文件对系统的用户管理、权限分配和安全控制等方面都起着关键作用,并且在用户登录、文件访问权限判定等操作中都会被用到。
-
文件格式与字段含义

- 文件中的每一行代表一个用户账户的信息,格式为:“用户名:密码:用户标识号(UID):组标识号(GID):用户个人信息描述:用户主目录:默认的shell”。
- 用户名(Username):
- 含义:这是用户在系统中用于登录和身份识别的名称,长度通常有一定限制,并且在系统中是唯一的。例如,“root”是系统管理员账户的常见用户名,“user1”可以是普通用户的用户名。
- 密码(Password):
- 含义:在早期的Linux系统或者一些特殊配置下,这个字段会直接存储用户密码的加密字符串。但在现代系统中,为了安全起见,通常只存储一个特殊的标记(如“x”),真正的密码信息存储在
/etc/shadow文件中,该文件具有更严格的访问权限。
- 含义:在早期的Linux系统或者一些特殊配置下,这个字段会直接存储用户密码的加密字符串。但在现代系统中,为了安全起见,通常只存储一个特殊的标记(如“x”),真正的密码信息存储在
- 用户标识号(UID):
- 含义:这是一个整数,用于唯一标识系统中的每个用户。UID为0的用户通常是系统管理员(如“root”用户),具有最高权限。系统会根据UID来判断用户的权限等级,不同范围的UID可能对应不同类型的用户(如普通用户、系统用户等)。例如,UID在1000及以上可能是普通用户账户。
- 组标识号(GID):
- 含义:用于指定用户所属的主要用户组的标识号。用户组可以用于对多个用户进行统一的权限管理。例如,一个开发团队的成员可以属于同一个用户组,方便对项目文件等资源进行共享访问权限的设置。
- 用户个人信息描述(GECOS):
- 含义:这个字段可以存储用户的一些个人信息,如用户的全名、办公室电话、家庭电话等。不过在实际应用中,这个字段的使用比较灵活,有些系统可能只是简单地填写用户的全名,有些可能不使用这个字段。
- 用户主目录(Home Directory):
- 含义:这是用户登录系统后默认的工作目录,用户在该目录下有相对完整的操作权限。例如,普通用户“user1”的主目录可能是“/home/user1”,用户在这里可以存放自己的文件、配置等。
- 默认的shell(Default Shell):
- 含义:指定用户登录系统后默认使用的命令行解释器。常见的shell有“bash”(Bourne - Again Shell)、“csh”(C - Shell)等。例如,“/bin/bash”是许多Linux系统中默认的shell,它决定了用户在终端中输入命令时的语法规则和环境。
-
示例内容
- 以下是一个
/etc/passwd文件中可能的示例行:“user1:x:1000:1000:John Doe:/home/user1:/bin/bash”。这表示用户名为“user1”,密码标记为“x”,UID是1000,GID是1000,个人信息描述为“John Doe”,主目录是“/home/user1”,默认的shell是“/bin/bash”。
- 以下是一个
-
安全注意事项与应用场景
- 安全注意事项:
- 由于
/etc/passwd文件包含了系统用户的基本信息,所以必须严格控制其访问权限。虽然密码信息现在通常不在这个文件中存储,但攻击者仍可能通过分析这个文件获取用户账户的相关线索,如用户名、UID等,从而为进一步的攻击(如密码猜测、权限提升等)提供帮助。
- 由于
- 应用场景:
- 用户管理:系统管理员可以通过编辑
/etc/passwd文件来创建新用户(虽然通常会使用更安全的工具如useradd)、修改用户的基本信息(如主目录、默认shell等)或者删除用户(同时需要清理相关的文件和权限设置)。 - 权限判定:在用户访问文件或者执行命令时,系统会根据
/etc/passwd文件中的UID和GID信息来判定用户是否具有相应的权限。例如,只有具有特定UID或者属于特定用户组(通过GID判断)的用户才能访问某些敏感文件或者执行某些特权操作
- 用户管理:系统管理员可以通过编辑
- 安全注意事项:
-
-
/etc/shadow

-
文件概述
/etc/shadow是Linux系统中一个非常重要的安全相关文件。它用于存储用户账号的密码信息以及与密码相关的各种安全设置,如密码有效期、账户锁定策略等。这个文件的访问权限受到严格限制,只有具有超级用户(root)权限的用户才能读取和修改其中的内容,这是为了保护用户密码等敏感信息的安全。
-
文件格式与字段含义
- 文件中的每一行代表一个用户账户的密码及相关安全设置信息,格式大致为:“用户名:加密后的密码:最后一次修改密码日期:最小密码使用天数:最大密码使用天数:密码过期前警告天数:密码过期后账户不活动天数:账户失效日期:保留字段”。
- 用户名(Username):
- 含义:与
/etc/passwd文件中的用户名相对应,用于标识用户账户,是整个记录的索引,方便系统查找和匹配用户相关的密码及安全设置。例如,“user1”这个用户名表示下面的密码和安全设置信息是针对用户user1的。
- 含义:与
- 加密后的密码(Encrypted Password):
- 含义:存储用户密码经过加密后的字符串。常见的加密算法有MD5、SHA - 256等(具体取决于系统配置和加密方式)。当用户登录时,系统会将用户输入的密码进行相同的加密运算,然后与这个字段中的加密密码进行比较,以验证密码的正确性。例如,如果用户
user1的密码是“mypassword”,这个字段会存储经过加密后的“mypassword”的结果,如“salt$encrypted_string”(其中“”表示使用SHA - 512加密算法,“salt”是加密盐值,“encrypted_string”是实际加密后的密码部分)。
- 含义:存储用户密码经过加密后的字符串。常见的加密算法有MD5、SHA - 256等(具体取决于系统配置和加密方式)。当用户登录时,系统会将用户输入的密码进行相同的加密运算,然后与这个字段中的加密密码进行比较,以验证密码的正确性。例如,如果用户
- 最后一次修改密码日期(Last Password Change):
- 含义:记录从1970年1月1日起,到最后一次修改密码的天数。这个日期信息用于计算密码的有效期等相关设置。例如,如果这个字段的值是“18000”,表示从1970年1月1日开始计算,在第18000天的时候用户修改了密码。
- 最小密码使用天数(Minimum Password Age):
- 含义:规定用户在修改密码之后,必须经过多少天才能再次修改密码。这是为了防止用户频繁修改密码而设置的限制。例如,如果这个字段的值是“3”,那么用户在修改密码后的3天内不能再次修改密码。
- 最大密码使用天数(Maximum Password Age):
- 含义:设定用户密码的最长有效期限,超过这个期限用户必须修改密码。这有助于提高系统的安全性,防止用户长期使用相同的密码而导致密码泄露风险增加。例如,如果这个字段的值是“90”,表示用户的密码在90天后就会过期,需要重新设置密码。
- 密码过期前警告天数(Password Warning Period):
- 含义:在密码快要过期时,提前多少天开始向用户发出警告。这可以提醒用户及时修改密码,避免密码过期后无法登录。例如,如果这个字段的值是“7”,那么在密码过期前7天,系统会在用户登录时或者通过其他方式(如邮件,若系统配置了相关功能)提醒用户密码即将过期。
- 密码过期后账户不活动天数(Password Inactivity Period):
- 含义:密码过期后,用户账户可以处于不活动状态的天数。如果在这个期限内用户没有修改密码并重新激活账户,账户将会被锁定。例如,如果这个字段的值是“30”,那么在密码过期后,用户有30天的时间来修改密码并重新激活账户,否则账户将被锁定,无法登录。
- 账户失效日期(Account Expiration Date):
- 含义:指定账户的失效日期,从1970年1月1日起计算的天数。到达这个日期后,账户将被永久禁用,无论密码是否有效。例如,如果这个字段的值是“36500”,表示在从1970年1月1日开始计算的第36500天,用户账户将失效。
- 保留字段(Reserved Field):
- 含义:目前这个字段暂未使用,用于将来可能的功能扩展。
-
安全机制与应用场景
- 密码安全增强:通过设置密码有效期、过期警告等机制,强制用户定期更换密码,降低密码被破解后长期有效的风险。例如,对于一些高安全级别的系统,如金融机构的服务器,可以将最大密码使用天数设置为较短的时间(如30天),并合理设置密码过期前警告天数(如7天),以确保用户密码的安全性。
- 账户安全管理:账户锁定策略(密码过期后账户不活动天数和账户失效日期)可以防止未经授权的用户长时间尝试猜测密码或者利用过期账户进行非法活动。例如,如果发现有可疑的登录尝试,管理员可以通过修改
/etc/shadow文件中的账户失效日期来立即禁用相关账户。 - 系统审计与合规性:
/etc/shadow文件中的记录可以作为系统审计的重要依据,用于检查用户密码管理是否符合安全策略和法规要求。例如,在一些行业标准和法规中,要求企业对用户账户密码进行定期更换和安全管理,/etc/shadow文件中的密码有效期等设置可以作为满足这些要求的证明。
-
-
-
组账户信息类
- /etc/group:包含组账户信息,如组名、组 ID 等,用于管理用户组,方便对一组用户进行统一的权限设置和资源分配。
- /etc/gshadow:存储组用户的密码信息,与 /etc/group 文件配合,管理组密码相关事务,如设置组管理员密码等。
-
权限提升类
- /etc/sudoers:定义了哪些用户和用户组可以使用 sudo 命令以管理员权限执行命令,严格控制用户的权限提升操作,保障系统安全。
-
文件概述
/etc/sudoers是 Linux 系统中一个用于配置 sudo(Superuser DO)权限的关键文件。sudo 命令允许系统管理员授权特定用户或用户组以其他用户(通常是超级用户 root)的权限来执行特定的命令,这个文件就是定义这些授权规则的地方。它对于系统安全和权限管理起着至关重要的作用。
-
文件格式与基本规则
- 格式:
/etc/sudoers文件的语法较为严格,基本格式是 “用户或用户组 主机名 =(以谁的身份执行) 命令列表”。其中,用户或用户组可以是具体的用户名或者用户组名;主机名用于指定这些规则适用的主机,如果是本地主机可以使用ALL表示所有主机;“以谁的身份执行” 通常是root,表示以超级用户的权限执行;命令列表可以是具体的命令或者命令组,也可以使用通配符来表示一系列命令。 - 注释:以 “#” 开头的行是注释行,用于对规则或者规则组进行解释说明。例如,
# This line allows the user 'admin' to run all commands as root可以用来解释下面一行关于用户admin的 sudo 权限规则。 - 别名(Aliases):为了方便管理和组织 sudo 规则,文件中可以定义别名。别名有四种类型:用户别名(User_Alias)、主机别名(Host_Alias)、命令别名(Cmnd_Alias)和运行身份别名(Runas_Alias)。例如,
User_Alias ADMINS = user1, user2定义了一个名为ADMINS的用户别名,包含user1和user2两个用户。
- 格式:
-
常见配置示例及含义
- 允许单个用户执行所有命令:
- 配置:
user1 ALL=(root) ALL。 - 含义:允许用户
user1在所有主机(ALL)上以超级用户root的身份执行所有命令(ALL)。这是一种比较宽松的权限设置,使用时需要谨慎,因为用户user1基本上拥有了和root一样的权限。
- 配置:
- 允许用户组执行特定命令:
- 配置:
User_Alias WEB_ADMINS = user3, user4 Cmnd_Alias WEB_COMMANDS = /usr/sbin/apachectl start, /usr/sbin/apachectl stop WEB_ADMINS ALL=(root) WEB_COMMANDS - 含义:首先定义了一个名为
WEB_ADMINS的用户别名,包含user3和user4两个用户。然后定义了一个名为WEB_COMMANDS的命令别名,包含启动和停止 Apache 服务的两个命令。最后一行规则表示允许WEB_ADMINS用户组中的用户在所有主机上以root的身份执行WEB_COMMANDS命令别名中的命令。这样,user3和user4就可以在需要的时候启动和停止 Apache 服务,而不会拥有过多不必要的权限。
- 配置:
- 限制用户以特定用户身份执行命令:
- 配置:
user5 ALL=(user6) /bin/ls, /bin/cat。 - 含义:允许用户
user5在所有主机上以用户user6的身份执行/bin/ls和/bin/cat这两个命令。这种设置可以用于一些特殊的权限分配场景,比如在共享文件环境中,用户user5可以以用户user6的身份查看和读取某些文件。
- 配置:
- 允许单个用户执行所有命令:
- 安全注意事项与应用场景
- 安全注意事项:
- 由于
/etc/sudoers文件控制着用户权限的提升,如果配置不当,可能会导致严重的安全问题。例如,错误地授予普通用户过多的 sudo 权限,可能会使这些用户能够执行具有破坏性的操作,如删除系统文件、修改关键配置等。因此,在编辑/etc/sudoers文件时,需要非常谨慎,并且最好使用visudo工具来编辑,visudo会在保存文件之前检查语法错误,避免因语法问题导致权限失控。
- 由于
- 应用场景:
- 系统管理权限委派:在一个多人管理的系统环境中,系统管理员可以通过
/etc/sudoers文件将部分管理权限(如软件安装、服务管理等)分配给其他值得信任的用户,而不必将root密码告知他们。这样既方便了系统管理工作的开展,又能保证系统的安全性。 - 安全审计与合规性:正确配置的
/etc/sudoers文件可以作为系统安全审计的重要依据,证明系统的权限管理是按照安全策略和合规要求进行的。例如,在一些企业和组织的信息安全标准中,要求对系统权限进行严格的控制和审计,/etc/sudoers文件的配置情况可以很好地满足这一要求。
- 系统管理权限委派:在一个多人管理的系统环境中,系统管理员可以通过
- 安全注意事项:
-
- /etc/securetty:在某些系统(如使用 PAM 机制的系统)中,设定那些终端可以让 root 登录,一般情况下设定为只有 console 上的用户可能用 root,限制 root 用户的登录终端。
- /etc/sudoers:定义了哪些用户和用户组可以使用 sudo 命令以管理员权限执行命令,严格控制用户的权限提升操作,保障系统安全。
-
用户环境类
-
/etc/profile
- 文件用途
/etc/profile是一个系统级别的配置文件,主要用于为所有用户设置全局环境变量和执行一些初始化的命令。它的目的是在用户登录系统时,为用户创建一个统一的、基础的操作环境。这个文件对于系统的配置和管理非常重要,因为它可以确保所有用户在登录后都能获得相同的基本环境设置。
-
文件格式与语法规则
- Shell 脚本格式:
/etc/profile是一个 Shell 脚本文件,这意味着它包含一系列可以在 Shell 环境中执行的命令。它的语法遵循 Shell 脚本的语法规则,例如变量赋值、函数定义、条件判断和循环等。 - 变量赋值:变量赋值是
/etc/profile文件中常见的操作。例如,export命令用于将变量导出到子进程,使得这些变量在整个用户会话中都可用。如export PATH="$PATH:/new/bin",这个语句将/new/bin目录添加到PATH环境变量中。在变量赋值中,可以使用已有的变量(如$PATH)并通过字符串拼接的方式修改其值。# 设置全局 JAVA_HOME 路径 JAVA_HOME="/usr/local/java/jdk1.8.0_251" export JAVA_HOME PATH="$JAVA_HOME/bin:$PATH" export PATH # 为所有用户定义别名 alias cls='clear' alias vi='vim' #设置别名 alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' -
函数定义:可以在文件中定义函数。函数定义的格式为
function函数名() { 函数体 }。例如:引用/etc/profile.d/目录profile.d目录通常用于存放多个独立的 shell 脚本,这些脚本可以为特定的应用或环境单独配置。/etc/profile文件会自动加载这些脚本。 -
function meminfo() { free -m } for i in /etc/profile.d/*.sh; do if [ -r "$i" ]; then . "$i" fi done unset i这里定义了一个名为
meminfo的函数,它的功能是通过执行free -m命令来显示系统内存使用情况(以 MB 为单位)。
- Shell 脚本格式:
-
执行过程和时机
- 登录时执行:当用户登录到 Linux 系统时,无论是通过本地控制台登录还是通过 SSH 等远程登录方式,系统首先会读取并执行
/etc/profile文件。这个过程是自动的,用户无需手动触发。 - 顺序执行:文件中的命令会按照它们在文件中的顺序依次执行。这意味着如果有多个变量赋值或函数定义,它们会按照出现的先后顺序被处理。例如,如果有两个变量赋值操作,先出现的赋值操作会先执行,后出现的可能会依赖于前面赋值后的变量状态。
当用户登录系统时,以下文件按顺序执行:
/etc/profile:系统级别的配置文件,首先执行。
因此,
~/.bash_profile、~/.bash_login 或 ~/.profile:用户级别的配置文件,执行其中一个(优先级递减)。
/etc/profile.d/:如果在 /etc/profile 中有引用,会加载这个目录下的所有 .sh 脚本。/etc/profile通常会在用户个人的配置文件(如~/.bash_profile或~/.profile)之前执行。
- 登录时执行:当用户登录到 Linux 系统时,无论是通过本地控制台登录还是通过 SSH 等远程登录方式,系统首先会读取并执行
-
常见配置内容及其作用
- 环境变量配置
- PATH 变量:这是最重要的环境变量之一。
PATH变量决定了系统在哪些目录中查找可执行文件。当用户在终端输入一个命令时,系统会根据PATH变量中列出的目录顺序查找对应的可执行文件。通过修改PATH变量,如export PATH="$PATH:/usr/local/bin",可以将新的目录(如/usr/local/bin)添加到系统的可执行文件查找路径中。这对于安装新的软件后希望能够在全局范围内方便地使用其命令非常有用。例如,当安装了一个新的开发工具,将其安装目录添加到PATH变量后,用户就可以在任何位置的终端中直接输入该工具的命令来使用它。 - 语言环境变量(LANG 等):
LANG变量用于指定系统的语言环境,例如export LANG="en_US.UTF - 8"设置系统语言环境为美式英语、UTF - 8 编码。这个变量会影响系统的字符显示、消息输出等诸多方面。比如,系统的错误提示信息、软件的菜单选项等都会以指定的语言和编码格式显示。
- PATH 变量:这是最重要的环境变量之一。
- 系统范围的函数定义:定义的函数可以被所有用户在登录后使用。例如前面提到的
meminfo函数,用户可以在终端直接输入meminfo来查看内存使用情况,这对于系统管理和日常操作非常方便。可以根据需要定义各种用于系统监控、文件管理等功能的函数。 - 加载其他配置文件或脚本:
/etc/profile文件通常会加载其他系统范围的配置文件或脚本,以进一步完善系统环境的设置。例如,在许多 Linux 系统中,/etc/profile文件会加载/etc/profile.d目录下的所有.sh文件(如果存在)。这些文件可以按照功能或者软件包进行分类,用于设置特定软件的环境变量或者执行一些初始化操作。例如,对于 Java 开发环境,可能会有一个/etc/profile.d/java.sh文件,用于设置JAVA_HOME等相关环境变量。这种方式使得系统的配置更加模块化,便于管理和维护不同软件的环境设置。
- 环境变量配置
-
与其他配置文件的关系和区别
- 与用户个人配置文件(如
~/.bashrc)的关系- 全局与个人的区别:
/etc/profile是系统全局的配置文件,它的设置会影响所有用户。而用户个人配置文件(如~/.bashrc)是针对每个用户个体的。用户可以在自己的个人配置文件中覆盖或者添加/etc/profile中设置的内容。例如,用户可以在~/.bashrc文件中重新设置PATH变量,只添加自己需要的目录路径,这样在用户自己的 Shell 会话中就会优先使用个人设置的PATH变量。这使得用户可以根据自己的需求在全局设置的基础上进行个性化的环境配置。
- 全局与个人的区别:
- 与系统初始化文件(如
/etc/inittab)的区别- 功能侧重点不同:
/etc/inittab主要用于控制系统的启动级别和启动过程中的一些基本服务,它侧重于系统的启动流程。而/etc/profile重点在于为用户登录后的操作环境进行设置,主要涉及环境变量和一些用户可直接使用的函数等内容。/etc/inittab决定了系统启动时运行哪些服务和程序,而/etc/profile则是在用户登录后为用户提供一个合适的操作环境来使用系统。
- 功能侧重点不同:
- 与用户个人配置文件(如
-
修改后的生效
修改
/etc/profile后,你可以通过以下方式使更改立即生效:- 重新登录:用户重新登录系统后更改会自动生效。
- 手动加载:也可以使用
source命令手动加载文件,使更改立即生效:source /etc/profile
- 文件用途
- /etc/environment:设置系统环境变量,特别适用于在图形界面下运行的程序,为图形界面应用提供特定的环境配置。
- /etc/bashrc 和 /etc/csh.cshrc:
- /etc/bashrc:[全称为 BASH (Bourne Again Shell) RunTime Command Shell Script],用于设置 BASH shell 的运行时环境,如设置别名、函数等,丰富 BASH 用户的操作环境。
- /etc/csh.cshrc:[CSH Runtime Command],针对 CSH shell 的运行时环境设置文件,为使用 CSH shell 的用户提供个性化环境配置。
- /etc/shells:用户可以使用的 shell 列表,如果强行修改 /etc/passwd 文件,也可以使用不在列表中的 shell 程序,但对于 shell 不在此列表中的用户将无法使用 FTP 连接本系统,规范了系统允许使用的 shell 种类。
-
三、服务相关配置文件
-
SSH 服务类
- /etc/ssh/sshd_config:SSH 服务的配置文件,用于定义 SSH 服务的参数,如允许的登录方式、端口号、密钥设置等,保障 SSH 服务的安全与功能定制。
-
数据库服务类
- /etc/mysql/my.cnf:MySQL 数据库的配置文件,用于设置数据库服务器的参数,如数据库存储路径、缓存大小、字符集等,优化 MySQL 数据库的运行性能。
-
定时任务类
- /etc/crontab:这个文件负责调度各种管理任务,可设置定时执行的脚本或命令,按照预定的时间周期自动执行系统维护、数据备份等任务。
四、系统信息与控制相关配置文件
-
系统运行信息类
- /etc/issue:系统进站提示信息 (主控台用),在用户登录控制台时显示的欢迎或提示信息,可自定义系统的登录前提示内容。
- /etc/issue.net:telnet 时显示信息,当用户通过 telnet 连接到系统时展示的特定信息,通常用于告知用户相关连接注意事项或系统信息。
- /etc/motd:用户进入系统后的提示信息 (可以为空),在用户成功登录系统后显示的消息,可用于发布系统通知或公告。
- /etc/ld.so.conf:动态链接库文件目录列表,指定系统查找动态链接库的路径,确保程序能够正确加载所需的动态链接库。
-
系统启动类
- /etc/rc.d/rc.local:用于添加开机启动命令,可在系统启动过程中自动执行特定的脚本或命令,方便设置开机自启的服务或任务。
- /etc/rc.local:是 /etc/rc.d/rc.local 的软链接,提供了一种便捷的方式来管理开机启动项。
- /etc/inittab:系统的运行级别文件,定义系统启动时进入的运行级别以及各运行级别下启动的服务和进程,控制系统的启动流程和运行模式。
-
系统访问限制类
- /etc/nologin:系统在要关机时不希望用户登录进来,就产生此文件,此文件内容为显示给用户的有关拒绝连接的信息,用户此时就不能进入系统。当系统重新启动时如果有此文件,则机器启动后任何用户不能使用系统,此时可考虑从软盘或光盘引导删除此文件,然后再重新启动系统,可在特定情况下限制用户登录系统。
-
内核参数
-
/etc/sysctl.conf
-
文件概述
/etc/sysctl.conf是 Linux 系统中的一个重要配置文件,用于在内核运行时动态地配置内核参数。这些参数可以影响系统的各个方面,如网络、内存、虚拟内存、文件系统等。通过修改这个文件中的参数,可以优化系统性能、增强系统安全性或者调整系统的某些行为。
-
参数格式和基本规则
- 格式:在
/etc/sysctl.conf文件中,参数的设置格式通常为 “参数名 = 参数值”。例如,net.ipv4.ip_forward = 1,其中 “net.ipv4.ip_forward” 是内核参数名,“1” 是参数值。 - 注释:以 “#” 开头的行是注释行,用于对参数或者参数组进行说明。例如,
# Enable IP forwarding可以用于解释下面的net.ipv4.ip_forward参数的作用。 - 生效方式:修改
/etc/sysctl.conf文件后,一般需要使用sysctl -p命令来使新的参数设置生效。这个命令会读取/etc/sysctl.conf文件中的参数,并将其应用到当前运行的内核中。
- 格式:在
-
常见参数及作用
- 网络相关参数
- net.ipv4.ip_forward:
- 含义:用于控制 IP 转发功能。当设置为 “1” 时,允许系统将接收到的 IP 数据包转发到其他网络接口,这对于充当路由器或者在具有多个网络接口的服务器上实现网络共享等功能非常重要。例如,在一个具有内外网接口的服务器上,开启 IP 转发可以使内网用户通过服务器访问外网。
- 示例应用场景:在一个小型办公网络中,有一个 Linux 服务器连接到内部局域网和外部互联网。通过设置
net.ipv4.ip_forward = 1,并配置适当的网络地址转换(NAT)规则,就可以让内部局域网的计算机通过这个服务器访问互联网。
- net.ipv4.tcp_syncookies:
- 含义:用于防范 TCP SYN Flood 攻击。当设置为 “1” 时,系统会在收到 TCP SYN 请求时,发送带有特殊标记(syncookie)的响应,而不是直接为每个请求分配资源。这样可以有效地减少恶意攻击者通过发送大量 SYN 请求来耗尽系统资源的风险。
- 示例应用场景:在面向互联网的服务器(如 Web 服务器、邮件服务器等)上,开启
net.ipv4.tcp_syncookies = 1可以增强服务器对网络攻击的抵抗能力,保障服务器的正常运行。
- net.ipv4.ip_forward:
- 内存管理相关参数
- vm.swappiness:
- 含义:表示系统将内存数据交换到磁盘交换空间(swap)的倾向程度。取值范围是 0 - 100,数值越高,表示系统越倾向于使用交换空间。例如,
vm.swappiness = 10表示系统只有在内存非常紧张(剩余内存低于某个阈值)的情况下,才会将 10% 的内存数据交换到磁盘。 - 示例应用场景:对于内存资源相对充足,但磁盘 I/O 性能较差的服务器,可以将
vm.swappiness设置为较低的值(如 5 - 10),以减少因频繁交换数据到磁盘而导致的性能下降。
- 含义:表示系统将内存数据交换到磁盘交换空间(swap)的倾向程度。取值范围是 0 - 100,数值越高,表示系统越倾向于使用交换空间。例如,
- vm.swappiness:
- 虚拟内存相关参数
- vm.min_free_kbytes:
- 含义:用于设置系统保留的最小空闲物理内存量(以 KB 为单位)。当系统的空闲内存低于这个值时,内核会开始采取措施回收内存,如清理缓存、减少进程内存占用等。
- 示例应用场景:在内存紧张的系统中,合理设置
vm.min_free_kbytes可以确保系统有一定的内存余量来应对突发的内存需求,避免系统因内存耗尽而出现故障。
- vm.min_free_kbytes:
- 网络相关参数
-
修改和优化建议
- 备份文件:在修改
/etc/sysctl.conf文件之前,建议先备份文件,例如使用cp /etc/sysctl.conf /etc/sysctl.conf.bak,以防止修改错误导致系统出现问题时可以恢复。 - 谨慎修改参数:每个参数的修改都可能对系统产生影响,因此在修改参数之前,需要充分了解参数的作用和可能产生的后果。对于一些关键参数(如网络和内存相关参数),可以先在测试环境中进行测试,观察系统的反应,然后再应用到生产环境中。
- 结合系统需求优化:根据系统的具体用途(如服务器、桌面系统等)和硬件资源情况来优化参数。例如,对于高性能计算服务器,可以优化内存和网络参数以提高计算效率;对于 Web 服务器,可以重点关注网络参数和安全相关参数。
- 备份文件:在修改
-
-
更多推荐



所有评论(0)