You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何配置sudo让用户仅能以其他用户执行指定有限命令

解决方案

根因说明

你最初配置的规则无法生效,核心问题是嵌套了su命令导致sudo参数匹配逻辑异常:sudo需要对su命令后所有参数(包括-c后的引号内内容)做精确匹配,通配符在多段带引号的参数场景下匹配规则非常严格,极易匹配失败,因此触发密码输入要求。而后续追加的允许直接su到tc_前缀用户的规则,相当于开放了所有tc_用户的全量操作权限,不符合安全规范。

可行配置方案

我们直接利用sudo原生的「指定运行用户」能力,完全去掉su嵌套,既解决匹配问题,也严格限制权限范围:

步骤1:调整命令别名定义

直接定义允许执行的操作命令,无需嵌套su:

# 按你实际需要的操作补全所有命令别名,以下为示例
Cmnd_Alias      TOMCAT_APPLCHMOD = /usr/bin/chmod -R 755 /appl/*,/bin/chmod -R 755 /appl/*
Cmnd_Alias      TOMCAT_KILLTOMCAT= /bin/kill -9 [0-9]*
Cmnd_Alias      TOMCAT_RM_LOGWEBAPP = /usr/bin/rm -rf /web/tomcat.*/logs/* /web/tomcat.*/logs /web/tomcat.*/webapps/* /web/tomcat.*/webapps,/bin/rm -rf /web/tomcat.*/logs/* /web/tomcat.*/logs /web/tomcat.*/webapps/* /web/tomcat.*/webapps
# 剩余的TOMCAT_WEBCHMOD、TOMCAT_JBCSCHMOD等其他需要的命令别名,都按以上格式补充完整

步骤2:配置严格的授权规则

在授权规则的(runas)位置限定只能以tc_前缀的用户执行指定命令:

# 如果是给MW_TOMCAT_USERS用户组授权,就写%MW_TOMCAT_USERS,给单个puser授权直接写puser
%MW_TOMCAT_USERS ALL=(tc_[a-zA-Z0-9_.]*) NOPASSWD: TOMCAT_APPLCHMOD,TOMCAT_KILLTOMCAT,TOMCAT_RM_LOGWEBAPP,其他你需要开放的命令别名

步骤3:调整自动化脚本的执行写法

原来嵌套su的执行逻辑改为直接用sudo指定运行用户:

  • 原错误写法:sudo su tc_xxx -c "chmod -R 755 /appl/test"
  • 新正确写法:sudo -u tc_xxx chmod -R 755 /appl/test

验证方法

切换到puser执行以下命令,确认权限符合预期:

  • 查看当前用户允许的sudo权限:sudo -l
  • 测试执行允许的操作,确认无需输入密码且执行成功
  • 测试执行未授权的操作(比如sudo -u tc_xxx bash),确认会被拒绝

内容的提问来源于stack exchange,提问作者anandan ramar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:09:00