Ansible配置sudoers实现跨用户执行Tomcat shutdown脚本问题求助
解决方案
路径修正说明
你需要在shutdown.sh、startup.sh前添加你的CATALINA_HOME下bin目录的完整绝对路径。举个例子,如果你的CATALINA_HOME为/home/user2/services/tomcat,那么完整的脚本路径就是/home/user2/services/tomcat/bin/shutdown.sh和/home/user2/services/tomcat/bin/startup.sh,直接替换你现有sudoers配置中的相对路径即可。
完整sudoers配置参考
针对你遇到的4个问题,补充环境变量放行规则后,完整配置如下(替换为你实际的脚本路径):
# 免密执行启停脚本规则 user1 ALL=(user2) NOPASSWD: /home/user2/services/tomcat/bin/shutdown.sh, /home/user2/services/tomcat/bin/startup.sh # 允许user1执行sudo时保留JAVA相关环境变量 Defaults:user1 env_keep += "JAVA_HOME JRE_HOME CATALINA_HOME" # 可选配置:如果需要使用sudo -i方式加载user2全环境执行,补充以下规则 user1 ALL=(user2) NOPASSWD: /bin/bash -c /home/user2/services/tomcat/bin/shutdown.sh, /bin/bash -c /home/user2/services/tomcat/bin/startup.sh
可用执行命令
配置生效后,以下命令均可正常执行:
- 手动指定变量执行(最稳定,不依赖环境配置):
sudo -u user2 JAVA_HOME=/path/to/your/java_home /home/user2/services/tomcat/bin/shutdown.sh - 继承当前user1的JAVA环境变量执行:
sudo -E -u user2 /home/user2/services/tomcat/bin/shutdown.sh - 加载user2的完整用户环境执行(配置了可选规则时可用):
sudo -i -u user2 /home/user2/services/tomcat/bin/shutdown.sh
注意事项
- 修改sudoers必须使用
visudo命令操作,避免语法错误导致sudo功能完全失效 - 如果在sudoers.d目录下新增单独配置文件,需确保文件权限为
0440,所有者为root
内容的提问来源于stack exchange,提问作者Earnest Chan
相关产品推荐
相关产品推荐

