0%

Linux 用户与组管理详解:权限控制的核心机制

Linux 是多用户多任务操作系统,用户与组的管理是系统安全和权限控制的基础。本文将系统讲解用户与组的配置文件、核心管理命令及权限控制逻辑,帮助你掌握 Linux 下的身份管理体系。

用户管理:从配置文件到核心命令

Linux 通过 /etc/passwd/etc/shadow 存储用户信息,通过一系列命令实现用户的创建、修改和删除。

用户信息文件解析

(1)/etc/passwd:用户基本信息

该文件记录所有用户的公开信息,每行对应一个用户,以冒号分隔为 7 个字段:

1
2
3
4
5
6
7
8
9
root:x:0:0:root:/root:/bin/bash
# 字段含义:
# 1. 用户名(root)
# 2. 密码标志(x 表示密码存储在 /etc/shadow)
# 3. UID(用户ID,0 为超级用户,1-499 为系统用户,500+ 为普通用户)
# 4. GID(初始组ID,对应 /etc/group)
# 5. 用户说明(可选,如 root 描述)
# 6. 家目录(/root 为 root 主目录,普通用户默认 /home/用户名)
# 7. 登录Shell(/bin/bash 为可交互Shell,/sbin/nologin 为禁止登录)
(2)/etc/shadow:用户密码信息

存储用户密码的加密信息(仅 root 可读写),每行对应一个用户,以冒号分隔为 9 个字段:

1
2
3
4
5
6
7
8
9
10
11
root:$6$xxxxxxxx$xxxxxx:19500:0:99999:7:::
# 字段含义:
# 1. 用户名(root)
# 2. 加密密码($6$ 表示 SHA-512 加密,* 或 ! 表示账号锁定)
# 3. 最近修改密码时间(距离 1970-01-01 的天数)
# 4. 密码修改间隔(0 表示随时可改)
# 5. 密码有效期(99999 表示永不过期)
# 6. 密码到期前警告天数(7 天前警告)
# 7. 密码到期后宽限天数(过期后仍可登录的天数)
# 8. 账号失效时间(空表示永不过期)
# 9. 保留字段

用户管理核心命令

(1)创建用户:useradd
阅读全文 »

Nginx 变量参数详解:从基础使用到条件判断

Nginx 提供了丰富的内置变量(参数),可用于获取请求信息、服务器状态等数据,结合条件判断(if语句)能实现灵活的请求处理逻辑。本文系统梳理 Nginx 常用变量的含义、使用场景及条件判断语法,帮助开发者高效配置 Nginx。

核心内置变量:获取请求与服务器信息

Nginx 的内置变量以$开头,可在配置文件中直接引用,用于动态获取请求参数、客户端信息、服务器状态等。以下是最常用的变量分类及说明:

请求参数与 URI 相关变量

变量 含义 示例
$arg_NAME 获取 HTTP 请求中指定参数的值(NAME 为参数名) 请求/index.html?name=zhangsan中,$arg_name的值为zhangsan
$args 请求 URI 中的完整参数(与$query_string相同) 请求/list?id=1&page=2中,值为id=1&page=2
$uri / $document_uri 当前请求的 URI(不带参数,可能被内部重定向修改) 请求/article/123?lang=cn中,值为/article/123
$request_uri 客户端原始请求的完整 URI(带参数,永不改变) 请求/article/123?lang=cn中,值为/article/123?lang=cn
$is_args 若请求带参数则为?,否则为空字符串 带参数时为?,无参数时为空

客户端与连接信息变量

变量 含义 示例
$remote_addr 客户端 IP 地址 192.168.1.100
$remote_port 客户端连接使用的端口 54321
$binary_remote_addr 二进制格式的客户端 IP(节省内存) \x0A\xE0B\x0E(对应10.224.66.14
$http_HEADER 获取客户端请求头中指定字段的值(HEADER 为小写) $http_user_agent获取浏览器标识,$http_referer获取来源页

服务器与响应信息变量

阅读全文 »

DNS 服务器详解:域名解析的核心机制与配置实践

DNS(Domain Name System,域名系统)作为应用层的核心协议,承担着 “域名→IP 地址” 的映射转换工作,是互联网通信的 “基础设施”。它通过分布式服务器架构,将人类易记的域名(如baidu.com)解析为计算机可识别的 IP 地址(如192.168.1.1),极大降低了网络访问的复杂度。以下从原理、配置文件到实战操作,全面解析 DNS 服务器。

DNS 服务器的核心原理

基本功能

  • 域名与 IP 的映射:正向解析(域名→IP)和反向解析(IP→域名)。
  • 分布式架构:通过根服务器、顶级域名服务器(如.com.cn)、权威服务器的层级协作,实现全球域名的高效解析。
  • 缓存机制:本地 DNS 服务器会缓存解析结果,减少重复查询,提升响应速度。

传输层协议

DNS 主要使用UDP 协议(端口 53)进行查询,因其速度快、开销小;当查询数据量大(如超过 512 字节)时,会自动切换到 TCP 协议。

DNS 服务器的关键配置文件

Linux 系统中,DNS 服务(通常为bind)的配置文件分布如下,不同文件各司其职:

阅读全文 »

Spring 核心注解全解析:从配置到实战

Spring 框架的注解体系是简化开发、实现 “约定优于配置” 的核心。从早期的 XML 配置到现在的全注解开发,注解极大地提升了开发效率。本文将系统整理 Spring 常用注解,按功能分类详解其作用、用法及适用场景,帮助开发者快速掌握注解的使用技巧。

配置类与 Bean 定义注解

这类注解用于替代 XML 配置文件,实现 Bean 的定义与配置类的声明,是注解开发的基础。

1. @Configuration

  • 作用:标记类为 Spring 配置类,相当于 XML 配置中的 <beans> 标签。

  • 特点:配置类中可通过 @Bean 定义 Bean,容器启动时会扫描并加载这些配置。

  • 示例:

    1
    2
    3
    4
    5
    6
    7
    8
    @Configuration // 声明为配置类
    public class AppConfig {
    // 定义 Bean(方法名默认作为 Bean 的 id)
    @Bean
    public UserService userService() {
    return new UserService();
    }
    }

2. @Bean

  • 作用:在配置类中定义 Bean,相当于 XML 中的 <bean> 标签。

  • 核心属性:

    • name/value:指定 Bean 的 id(默认是方法名);
    • initMethod:Bean 初始化方法(相当于 XML 的 init-method);
    • destroyMethod:Bean 销毁方法(相当于 XML 的 destroy-method)。
  • 示例:

阅读全文 »

Redis 缓存常见问题及解决方案

Redis 作为高性能缓存中间件,在实际应用中可能面临缓存击穿、缓存穿透、缓存雪崩等问题,同时需保证缓存与数据库的数据一致性。本文详细解析这些问题的成因及针对性解决方案。

缓存击穿

问题定义

热点 key 过期瞬间,大量并发请求直接穿透缓存,直击数据库,导致数据库压力骤增(甚至宕机)。
例:某热门商品的缓存 key 过期,恰好此时有 1000 个并发请求查询该商品,全部打到数据库。

解决方案

1. 互斥锁(推荐)

原理:当缓存失效时,通过锁机制保证同一时间只有一个请求能查询数据库,其他请求等待重试,避免并发冲击。
步骤

  • 缓存未命中时,先尝试通过 SETNX 获取锁(如 SET lock:key 1 EX 5 NX)。
  • 成功获取锁:查询数据库,写入缓存,释放锁(DEL lock:key)。
  • 未获取锁:等待 50ms 后重试(循环几次后返回默认值)。

优点:简单有效,避免数据库过载。
缺点:可能增加请求延迟(等待锁),需合理设置锁超时时间(避免死锁)。

2. 热点 key 永不过期 + 定时更新

原理:不对热点 key 设置过期时间,而是通过定时任务(如 10 分钟一次)从数据库主动更新缓存,确保缓存始终有效。
适用场景:热点数据更新频率低(如商品基本信息)、可接受轻微延迟。
优点:彻底避免过期问题,性能稳定。
缺点:需维护定时任务,缓存可能存在短暂不一致(更新间隔内)。

缓存穿透

问题定义

阅读全文 »