![Jenkins를 통해 데몬을 배포하는 가장 안전한 방법](https://linux55.com/image/75266/Jenkins%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EB%8D%B0%EB%AA%AC%EC%9D%84%20%EB%B0%B0%ED%8F%AC%ED%95%98%EB%8A%94%20%EA%B0%80%EC%9E%A5%20%EC%95%88%EC%A0%84%ED%95%9C%20%EB%B0%A9%EB%B2%95.png)
Java로 시스템 서비스를 개발 중이며 배포를 위해 다음을 수행하고 싶습니다.
- 빌드에서 새 Initd 복사
- 배포 서비스 중지
- 새 JAR/구성 예제 덮어쓰기/복사
- 서비스를 시작합니다.
Jenkins에게 루트 액세스 권한을 부여하지 않고 이를 수행할 수 있는 방법이 있습니까? [jenkins가 아닌 사람들의 경우: Jenkins는 복제 및 명령 전송에 SCP 및 SSH를 사용합니다.] 제가 우려하는 점은 Jenkins 루트 액세스 권한을 부여하면 부여된 권한이 제한되지 않는다는 것입니다. 그 범위는 해당 서비스 하나만으로 변경을 제한하는 것입니다. (다른 서비스에 의존하지 않음)
솔루션이 더 까다로워질 수 있으므로 첫 번째 요구 사항을 완화하겠습니다.
답변1
하나 있다희귀한 질문사용자가 루트로 스크립트를 실행하도록 하는 방법(예: sudo 사용)은 이미 이 사이트에서 다루고 있습니다. 기본적으로 2~4단계(예: service foo stop; cp -f ~jenkins/service.init /etc/init.d/; service foo start
)를 수행하는 스크립트를 작성하고 jenkins 사용자에게 스크립트에 대한 NOPASSWD 권한을 부여 해야 합니다. /etc/sudoers
.
하지만 근본적으로 Jenkins가초기화 스크립트 설치재부팅할 때 init 스크립트가 루트로 실행되므로 Jenkins(및 생성 스크립트에 대한 입력을 변경하고 작업을 다시 실행할 수 있는 모든 사람)에게 전체 루트 액세스 권한을 부여하는 것과 같습니다.