当前位置: 首页 > news >正文

用户权限管控:三种免密切换方案对比

用户权限管控:三种免密切换方案对比

1. 需求说明(2分钟)

  • 安全基线要求:
    • ✅ 禁止root直接登录
    • ✅ 创建专用管理用户test
    • ✅ test用户免密切换root
    • ❌ 禁止test用户直接执行特权命令

2. 三种方案对比(表格演示)

方案实现原理安全级别审计能力配置复杂度
sudoers白名单sudo权限控制★★★★★☆简单
PAM认证优化认证规则修改★★★★★★★中等
SSH密钥+sudo联动密钥认证组合技★★★★☆★★★★复杂

3. 多方案实施步骤

方案一:sudoers配置法

Bash# 创建test用户
sudo useradd -m -s /bin/bash test
echo "test:MySecurePass123!" | sudo chpasswd

# 配置sudoers(方法1)
sudo visudo -f /etc/sudoers.d/test_admin
# 添加内容:
test ALL=(root) NOPASSWD: /bin/su -

# 禁止root登录
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

方案二:PAM认证修改法

Bash# 修改su配置文件
sudo vim /etc/pam.d/su

# 在auth段添加:

# 允许test用户免密切换
auth       sufficient  pam_succeed_if.so user = test use_uid
use_uid 参数:强制PAM检查 源用户的实际UID

# 允许root用户免密切换
auth       sufficient  pam_rootok.so
# 检查用户是否在wheel组
auth       required    pam_wheel.so use_uid

方案三:SSH密钥+sudo联动

Bash# 生成密钥对
ssh-keygen -t ed25519 -f test_key -N ""

# 部署公钥
sudo mkdir /root/.ssh
sudo cp test_key.pub /root/.ssh/authorized_keys
sudo chmod 700 /root/.ssh

# 配置sudoers
echo "test ALL=(root) NOPASSWD: /usr/bin/ssh root@localhost" | sudo tee /etc/sudoers.d/ssh_sudo

4. 自动化部署脚本

Bash#!/bin/bash
# Filename: setup_sudo_su.sh
# 功能:一键部署三种切换方案

CONFIG_BACKUP_DIR="/etc/backup_$(date +%s)"
mkdir -p $CONFIG_BACKUP_DIR

# 创建test用户
if ! id test &>/dev/null; then
    useradd -m -s /bin/bash test
    echo "test:MySecurePass123!" | chpasswd
fi

# 备份原始配置
cp -a /etc/ssh/sshd_config $CONFIG_BACKUP_DIR/
cp -a /etc/sudoers $CONFIG_BACKUP_DIR/
cp -a /etc/pam.d/su $CONFIG_BACKUP_DIR/

# 方案1: sudoers配置
echo "test ALL=(root) NOPASSWD: /bin/su -" > /etc/sudoers.d/test_su

# 方案2: PAM优化
sed -i '/auth.*pam_rootok.so/aauth sufficient pam_succeed_if.so user = test' /etc/pam.d/su
chmod 4750 /bin/su
chgrp test /bin/su

# 方案3: SSH密钥
mkdir -p /home/test/.ssh
ssh-keygen -t ed25519 -f /home/test/.ssh/id_ed25519 -N "" -q
cat /home/test/.ssh/id_ed25519.pub >> /root/.ssh/authorized_keys
echo "test ALL=(root) NOPASSWD: /usr/bin/ssh root@localhost" > /etc/sudoers.d/ssh_sudo

# 统一安全设置
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

echo "部署完成!可用以下方式验证:"
echo "1. sudo su - root"
echo "2. su - root"
echo "3. sudo ssh root@localhost"

5. 验证与测试

Bash# 测试方法1
sudo su - root
# 预期结果:直接获得root权限

# 测试方法2(需先exit返回test用户)
su - root
# 预期结果:无需密码切换

# 测试方法3
sudo ssh root@localhost
# 预期结果:密钥自动认证登录

# 审计验证
tail -n 10 /var/log/auth.log

6. 安全防护措施

  1. 操作审计

    # 监控su使用情况
    auditctl -w /bin/su -p x -k privileged_su
    
  2. 会话锁定

    # 设置10分钟超时
    echo "export TMOUT=600" >> /etc/profile
    
  3. 风险命令拦截

    # 禁止直接rm
    alias rm='rm -i'
    

核心配置文件说明

文件/命令作用关键参数说明
/etc/sudoers.d/自定义sudo权限配置NOPASSWD: 免密码执行
/etc/pam.d/su用户切换认证模块pam_succeed_if条件判断
/bin/su用户切换命令权限4750实现受控访问
~/.ssh/authorized_keysSSH公钥认证文件限制命令执行权限

故障恢复方案

场景1:所有方案失效

# 单用户模式恢复步骤:
1. 重启系统,在GRUB菜单按'e'编辑
2. 在linux行尾添加 init=/bin/bash
3. 按Ctrl+X启动后执行:
   mount -o remount,rw /
   passwd root
   systemctl default

场景2:误锁权限

# 使用已登录会话恢复:
pkexec chmod 4755 /bin/su
visudo -c # 检查sudoers配置

方案对比总结

评估维度方案一方案二方案三
维护成本低(单文件配置)中(多文件修改)高(密钥管理)
安全风险sudo提权风险组权限控制风险密钥泄露风险
适用场景临时测试环境内部管理系统跨服务器管理
审计粒度命令级别用户级别会话级别

相关文章:

  • [mybatis]resultMap详解
  • SpringBoot 核心原理深度解析
  • Python学习第八天
  • 如何在Android中实现自定义视图
  • Vue 监听器的魔法之旅:@Watch(‘form.productId’) vs @Watch(‘value’) 大揭秘!✨
  • 大白话面试前的准备工作
  • Python +Anaconda,DeepSeeK API入门小例子
  • 智能决策新时代:大模型驱动的数据洞察与自动化报告生成
  • Spring Boot 常用注解全解析:从核心到进阶的实践指南
  • 10x Research:Secured Finance 基于 FIL 的美元稳定币如何推动 Filecoin 生态系统发展
  • elk的相关的基础
  • 真实项目中使用到的ES自定义评分脚本
  • GaussDB性能诊断核心武器:EXPLAIN ANALYZE 与执行计划
  • Git 使用教程
  • 敏捷开发之分支管理策略
  • Docker 学习(二)——基于Registry、Harbor搭建私有仓库
  • go数组的声明和初始化
  • Mysql命令大全(创建数据库显示数据库删除数据库)
  • PHP配置虚拟主机
  • 我们来学nginx -- 优化下游响应速度
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 前4个月我国货物贸易进出口同比增长2.4%,增速较一季度加快1.1个百分点
  • 视频丨习近平主席出席俄方在机场举行的迎宾仪式
  • 上海:5月8日起5年以上首套个人住房公积金贷款利率下调至2.6%
  • 预告:央行等部门将发声,介绍“一揽子金融政策支持稳市场稳预期”有关情况
  • 新闻分析:电影关税能“让好莱坞再次伟大”?