利用/etc/passwd提权

利用/etc/passwd提权

/etc/passwd存储系统中每个用户的基本信息。

# 每一行配置的含义 7个
username:password placeholder:uid:gid:gecos:home directory:default shell
gecos:用户全名或其它描述信息

利用方式,前提可以修改/etc/passwd:

  • suid程序,将某个用户的默认shell修改为suid权限的shell
  • 修改用户id,用户组id,比如变更为0
  • 如果用户密码存储在/etc/passwd中,可以获取到用户的明文密码进行破解。一般默认用户密码存储在/etc/shadow
<think> 我们面对的核心问题是:由于/etc/sudoers文件的限配置不当(如被设置为全局可写),导致sudo命令被系统安全机制锁定而无法使用。此时,我们无法通过常规的sudo或su命令来切换root用户(因为忘记root密码),形成双重困境。 ### 解决思路 我们需要绕过sudo机制,直接以root限修复/etc/sudoers文件限。根据服务器访问限的不同,有两种解决方案: #### 方案A:物理访问/带外控制台(推荐) 通过服务器本地控制台或云服务商的VNC控制台重启进入单用户模式(无需密码获取root shell): 1. 重启服务器,在GRUB菜单选择恢复模式 2. 挂载文件系统为可写:`mount -o remount,rw /` 3. 修复限: ```bash chmod 440 /etc/sudoers # 恢复正确限 chmod 750 /etc/sudoers.d/ # 修复目录限(如果存在) ``` 4. 重启服务器:`reboot -f` #### 方案B:SSH可用但sudo不可用(需有普通用户SSH登录限) 若普通用户能SSH登录但无法使用sudo,可通过以下步骤修复: ```bash # 1. 检查当前用户是否在sudoers中(已知sudo不可用则跳过) $ groups # 查看用户所属组 # 2. 利用程序SUID(需预先存在可利用的程序) # 查找具有SUID限的可写程序 $ find / -perm -4000 -user root 2>/dev/null | grep -v '^/proc' # 3. 若找到如passwd、chmod等可写SUID程序(非常规情况),可尝试: $ cp /bin/chmod . $ ./chmod 440 /etc/sudoers # 使用本地复制的chmod修改限 # 4. 若无可用SUID程序,尝试用语言解释器(需安装对应语言环境) # Python示例(需普通用户有python执行限): $ python -c 'import os; os.chmod("/etc/sudoers", 0o440)' # 5. 限修复后验证 $ ls -l /etc/sudoers -r--r----- 1 root root 1234 Jun 15 10:00 /etc/sudoers # 正确限应为440 ``` ### 详细操作步骤(以方案A为例) #### 📌 步骤1:进入恢复模式 1. 重启服务器,在GRUB启动菜单出现时按`Shift`(Ubuntu)或任意键(CentOS) 2. 选择`Advanced options for Ubuntu` → `*recovery mode` 3. 在恢复菜单选择`root`进入root shell ![GRUB恢复模式示意图](https://via.placeholder.com/600x300?text=GRUB+Recovery+Menu) #### 步骤2:修复文件系统 ```bash # 重新挂载根目录为可写 mount -o remount,rw / # 检查文件系统错误(可选) fsck -y / ``` #### 🔐 步骤3:修复sudoers限 ```bash # 修复主配置文件限 chmod 440 /etc/sudoers # 修复包含目录限(如果存在) chmod 750 /etc/sudoers.d/ # 验证限 ls -ld /etc/sudoers /etc/sudoers.d/ ``` 预期输出: ``` -r--r----- 1 root root 1234 Jun 15 10:00 /etc/sudoers drwxr-x--- 2 root root 4096 Jun 15 09:30 /etc/sudoers.d/ ``` #### 🔄 步骤4:重启系统 ```bash sync # 确保数据写入磁盘 reboot -f ``` ### 验证修复结果 ```bash # SSH登录普通用户 $ ssh user@server # 测试sudo命令 $ sudo -v [sudo] password for user: # 输入用户密码 $ # 无错误示表示成功 ``` ### 安全加固建议 1. **禁用配置文件全局写限** ```bash chmod 440 /etc/sudoers chmod 750 /etc/sudoers.d ``` 2. **使用visudo编辑配置** ```bash sudo visudo # 自动语法检查 ``` 3. **启用sudo日志审计** 在`/etc/sudoers`中添加: ``` Defaults logfile="/var/log/sudo.log" ``` --- §§ 相关问题 §§ 1. 如何通过GRUB加密防止未授进入恢复模式? 2. 云服务器无法物理访问时,有哪些替代的sudo限修复方法? 3. 单用户模式下还能修复哪些关键系统配置? 4. 如何配置sudoers文件实现精细化的限控制? 5. 企业环境中如何批量管理sudoers配置的一致性? </think> ### 解决 /etc/sudoers 配置文件限问题的完整方案 当 `/etc/sudoers` 文件限配置错误导致无法打开时,核心解决思路是通过 **恢复模式** 或 **单用户模式** 直接获取 root 限修复限配置。以下是详细步骤: --- ### 🔧 解决方案步骤 #### 📌 步骤 1:进入恢复模式(物理服务器或云控制台) 1. **重启服务器**,在 GRUB 启动界面长按 `Shift`(Ubuntu)或 `ESC`(CentOS) 2. 选择 `Advanced options` → `Recovery mode` → `root`(进入 root shell) ```bash ### GRUB 菜单示例 Ubuntu GNU/Linux Advanced options for Ubuntu *Ubuntu, with Linux 5.4.0-xx-generic (recovery mode) ``` #### ⚙ 步骤 2:挂载文件系统为可写 ```bash mount -o remount,rw / # 关键操作:解除只读锁定 ``` #### 🔐 步骤 3:修复 sudoers 限 ```bash # 修复文件限(关键限值) chmod 440 /etc/sudoers # 主配置文件 chmod 750 /etc/sudoers.d/ # 配置目录 # 修复所有(防止用户篡改) chown root:root /etc/sudoers chown root:root /etc/sudoers.d/ ``` #### 🔄 步骤 4:验证限配置 ```bash ls -l /etc/sudoers /etc/sudoers.d/ ``` 预期输出: ``` -r--r----- 1 root root 1234 Jan 1 12:34 /etc/sudoers drwxr-x--- 2 root root 4096 Jan 1 12:34 /etc/sudoers.d/ ``` #### 步骤 5:重启系统 ```bash sync # 确保数据写入磁盘 reboot -f ``` --- ### ⚠ 限配置规范(预防措施) 1. **禁止直接编辑 sudoers** 始终使用 `visudo` 命令(自动语法检查): ```bash sudo visudo # 安全编辑方式[^2][^4] ``` 2. **正确限值** | 文件/目录 | 限 | 所有者 | |-----------|------|--------| | `/etc/sudoers` | 440 (r--r-----) | root:root | | `/etc/sudoers.d/` | 750 (rwxr-x---) | root:root | 3. **配置语法验证** ```bash visudo -c # 检查配置文件语法[^2] ``` --- ### 🌩 特殊情况处理 #### 场景 1:云服务器无物理访问限 1. 通过云平台控制台使用 **VNC 连接** 2. 利用云厂商的 **紧急救援模式**(如 AWS EC2 Rescue) #### 场景 2:sudoers 文件被误删 ```bash # 在恢复模式下恢复默认配置 cp /usr/share/doc/sudo/examples/sudoers /etc/sudoers chmod 440 /etc/sudoers ``` --- ### 🔍 验证修复结果 ```bash # 尝试使用 sudo 命令 $ sudo -v [sudo] password for user: # 输入密码后无错误示即修复成功 ``` --- ### 📚 最佳实践建议 1. **配置备份** ```bash cp /etc/sudoers /etc/sudoers.bak # 定期备份 ``` 2. **使用 sudoers.d 目录** ```bash # 添加自定义配置(避免修改主文件) echo "user ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/user-config ``` 3. **启用 sudo 日志** 在 `/etc/sudoers` 中添加: ``` Defaults logfile="/var/log/sudo.log" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值