linux中/etc/passwd文件与/etc/shadow文件解析
封面图
•
2025-11-22
•
Linux
214
0
0
0
在 Linux 系统中,`/etc/passwd` 和 `/etc/shadow` 是两个非常重要的用户账户管理文件。它们分别存储了用户的基本信息和密码信息,但两者在安全性、权限控制等方面有显著区别。 --- ## 一、`/etc/passwd` 文件解析 ### 1. **作用** `/etc/passwd` 存储了系统中所有用户的基本信息,包括用户的 UID、GID、家目录、默认 shell 等。 ### 2. **文件结构** 每行代表一个用户,格式如下: ``` username:x:UID:GID:GECOS:home_directory:shell ``` #### 各字段说明: | 字段 | 说明 | |------|------| | `username` | 用户名 | | `x` | 表示密码存储在 `/etc/shadow` 中(早期系统可能直接在此处存储加密密码) | | `UID` | 用户 ID,0 是 root,1-999 通常是系统用户 | | `GID` | 用户的主组 ID | | `GECOS` | 用户的注释信息(如全名、电话等),可为空 | | `home_directory` | 用户的家目录路径 | | `shell` | 用户登录时使用的 shell(如 `/bin/bash`) | ### 3. **示例** ```bash root:x:0:0:root:/root:/bin/bash alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash ``` ### 4. **权限** 通常权限为 `644`,即所有用户可读,但只有 root 可写。 ### 5. **安全问题** 由于该文件是**全局可读**的,因此不能存放加密密码。因此,密码信息被移到了 `/etc/shadow`。 --- ## 二、`/etc/shadow` 文件解析 ### 1. **作用** `/etc/shadow` 存储了用户的加密密码信息,是更安全的密码存储方式。 ### 2. **文件结构** 每行对应一个用户,格式如下: ``` username:password:last_change:min_age:max_age:warn:inactivity:expire:date_format ``` #### 各字段说明: | 字段 | 说明 | |------|------| | `username` | 用户名 | | `password` | 加密后的密码(或 `!` 或 `*` 表示无密码) | | `last_change` | 密码最后修改的天数(从 1970-01-01 开始计算) | | `min_age` | 密码最短使用天数 | | `max_age` | 密码最长使用天数 | | `warn` | 密码过期前多少天提醒用户 | | `inactivity` | 密码过期后,用户不活动的天数 | | `expire` | 账户过期日期(从 1970-01-01 开始计算) | | `date_format` | 保留字段(一般为 0) | ### 3. **示例** ```bash root:$6$abc123...:18000:0:99999:7::: alice:!$6$def456...:18000:0:99999:7::: ``` > 注意:`$6$` 表示使用 SHA-512 哈希算法。 ### 4. **权限** 通常权限为 `600`,即只有 root 可读写,其他用户无法访问。 ### 5. **安全优势** - 密码加密存储,防止普通用户查看。 - 可以设置密码策略(如最短/最长使用时间、过期提醒等)。 --- ## 三、两者的对比总结 | 特性 | `/etc/passwd` | `/etc/shadow` | |------|---------------|----------------| | 用途 | 存储用户基本信息 | 存储加密密码和其他安全策略 | | 权限 | 644(可读) | 600(仅 root 可读) | | 是否包含密码 | 不包含(`x` 表示密码在 shadow 中) | 包含加密密码 | | 安全性 | 低 | 高 | | 普通用户能否访问 | 可以 | 不可以 | --- ## 四、常见命令 ### 查看 `/etc/passwd` 内容: ```bash cat /etc/passwd ``` ### 查看 `/etc/shadow` 内容(需要 root 权限): ```bash sudo cat /etc/shadow ``` ### 修改密码(会自动更新这两个文件): ```bash sudo passwd username ``` --- ## 五、补充说明 - 在某些系统中(如旧版 Linux),密码可能直接存储在 `/etc/passwd` 中,但这已不推荐。 - 使用 `chpasswd` 或 `usermod` 等命令时,也会自动更新这两个文件。 - `/etc/shadow` 的加密密码格式通常由 `/etc/login.defs` 中的 `ENCRYPT_METHOD` 决定(如 MD5、SHA-512 等)。 --- 如果你有具体问题,比如如何查看某个用户的密码哈希、如何修改密码策略等,也可以告诉我,我可以进一步解释。
上一篇:
常用的ftp文件传输命令
下一篇:
DHCP实现动态 IP 地址分配
标题录入,一次不能超过6条
留言
评论