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
相关产品推荐
相关产品推荐

