抱歉,我的问题很愚蠢,但我不知道如何描述我的情况。
以下是来自詹金斯的日志:
ssh www.myserver.com '/var/lib/tomcat7/webapps/deploy_webapp.sh'
+ id
uid=1004(jenkins) gid=1004(jenkins) groups=1004(jenkins),107(tomcat7)
+ sudo su tomcat7
+ id
uid=1004(jenkins) gid=1004(jenkins) groups=1004(jenkins),107(tomcat7)
由于安全原因,我无法使用 tomcat7 用户访问 myserver。“sudo su tomcat7”不需要密码就可以工作,因为我已经使用 NOPASSWD 将此命令添加到 /etc/sudoers。
那么问题是:为什么我不能苏致我的tomcat7用户?
答案1
我认为该脚本deploy_webapp.sh
包含以下命令序列:
id
sudo su tomcat7
id
那里发生了什么事?
ssh
deploy_webapp.sh
在用户拥有的进程中启动脚本jenkins
。sudo
作为新进程启动,并将进程所有者更改为root
。sudo
su
像root
另一个进程一样启动。su
尝试以用户tomcat7
身份启动用户的登录 shelltomcat7
。tomcat7
很可能没有配置交互式 shell(请检查grep tomcat7 /etc/passwd
)。su
退出。(在此会话中不再拥有tomcat7
任何进程。)sudo
退出。(在此会话中不再拥有root
任何进程。)- 最后
id
在与整个脚本相同的用户下执行deploy_webapp.sh
-jenkins
。整个脚本在同一个用户下执行。sudo
nor都不会su
改变这一点。
你可以做什么?
- 使用你需要的 shell进行调用
su
。例如:su -s /bin/bash
id
在 拥有的进程中运行第二个tomcat7
。例如:su tomcat7 -c id
完整示例脚本:
id
sudo su tomcat7 -s /bin/bash -c id
概括
所有要在 下执行的命令都应该在由(通过选项)tomcat7
启动的进程中运行,并注意用户的登录shell。su
-c