멍청한 질문으로 미안하지만 내 상황을 설명하는 방법을 모르겠습니다.
Jenkins의 로그가 있습니다.
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 사용자 에게 su 를 할 수 없습니까?
스크립트 deploy_webapp.sh
에 다음 명령 시퀀스가 포함되어 있다고 가정 합니다.
id
sudo su tomcat7
id
ssh
deploy_webapp.sh
사용자가 소유 한 프로세스 에서 스크립트 를 시작합니다 jenkins
.sudo
가 새 프로세스로 시작되고 프로세스 소유자가로 변경됩니다 root
.sudo
다른 프로세스 su
에서처럼 시작 됩니다 root
.su
user tomcat7
로 사용자 의 로그인 쉘을 시작하려고합니다 tomcat7
.tomcat7
대부분의 경우 대화 형 셸이 구성되어 있지 않습니다 (확인 grep tomcat7 /etc/passwd
).su
출구. (이 세션에서는 tomcat7
더 이상 소유 한 프로세스가 없습니다 .)sudo
출구. (이 세션에서는 root
더 이상 소유 한 프로세스가 없습니다 .)id
전체 스크립트와 같은 사용자로 실행 deploy_webapp.sh
- jenkins
. 전체 스크립트가 동일한 사용자로 실행되고 있습니다. 어느 쪽 sudo
도 su
그것을 변경 하지 않습니다 .su
필요한 쉘로 전화 하십시오. 예를 들면 :su -s /bin/bash
id
에서 소유 한 프로세스 에서 두 번째 를 실행합니다 tomcat7
. 예를 들면 :su tomcat7 -c id
완전한 예제 스크립트 :
id
sudo su tomcat7 -s /bin/bash -c id
실행될 모든 명령 tomcat7
은 su
(옵션으로 -c
) 시작된 프로세스에서 실행되어야하며 사용자의 로그인 쉘에주의를 기울여야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다