CentOS配置指定组用户仅可免密sudo执行dnf命令的方法
CentOS 特定用户组免密运行dnf的sudo配置方案
配置步骤
- 前置准备:确认你要授权的目标用户组存在,如果还没创建可以直接新建,把示例里的
dnf_ops换成你自己实际使用的组名即可:# 新建用户组 groupadd dnf_ops # 把需要授权的用户加入该组,替换testuser为实际的业务用户名 usermod -aG dnf_ops testuser重要提示:组权限变更后,对应用户必须重新登录服务器才会加载新的组身份,不重登直接测试会报权限错误。
- 编写sudo规则:不要直接手动修改/etc/sudoers主文件,优先用安全方式配置,避免语法错误导致全量sudo权限崩溃:
推荐方式:在/etc/sudoers.d/目录下新建独立配置文件,后续维护、回滚都方便,不会影响sudo主配置逻辑:
执行visudo -f /etc/sudoers.d/dnf_nopasswd新建配置文件,写入如下内容(注意把dnf_ops替换成你实际的用户组名,组名前的%符号不能丢):
备选方式:直接执行%dnf_ops ALL=(root) NOPASSWD: /usr/bin/dnfvisudo编辑主sudoers文件,在文件末尾追加上面同一段规则即可。
规则字段说明:%dnf_ops:匹配dnf_ops用户组下的所有用户,去掉前缀%就是匹配单个用户- 第一个
ALL:规则对所有主机名生效,单机部署场景直接写ALL即可 (root):仅允许以root用户身份执行后续授权的命令NOPASSWD::执行授权命令时不需要输入当前用户的登录密码/usr/bin/dnf:允许执行的命令的绝对路径,必须写全路径,不能只写dnf,可以提前用which dnf确认你系统上dnf的实际安装路径,CentOS 8/Stream系列默认路径都是/usr/bin/dnf
- 效果验证
切换到授权组下的普通用户,执行sudo dnf list updates测试,正常不会弹出密码提示,能直接返回执行结果;如果尝试执行其他sudo命令比如sudo cat /etc/shadow,会直接提示无对应sudo权限,符合最小权限要求。
避坑提示
- 不要图省事给命令路径加不必要的通配符,比如写成
/usr/bin/dnf *,配置写错很容易出现权限越界漏洞,直接写命令绝对路径即可,dnf后面跟的正常参数(install/remove/update/search等)不会被拦截,完全满足日常使用需求。 - 如果同用户、同组之前配置过其他sudo规则,要注意sudo的规则匹配顺序是后加载的规则优先级更高,自定义规则尽量放在配置文件末尾,或者用sudoers.d目录下独立文件的方式加载,避免被前面的规则覆盖。
- 用visudo编辑配置时,保存退出阶段工具会自动做语法校验,如果提示语法错误一定要立刻修正,不要强行保存,否则会导致所有sudo权限失效。
内容的提问来源于stack exchange,提问作者Aniket Pawar
相关产品推荐
相关产品推荐

