
Ubuntu 15.04 서버에서 HomeSeer라는 홈 자동화 패키지를 실행하고 있습니다. 서비스 계정("_homeseer"라고 함)으로 실행되도록 구성했으며 앱 디렉터리를 _homeseer:_homeseer에 지정했습니다.
이 패키지에 대한 업데이트를 설치하기 위해 tar.gz 파일을 다운로드한 다음 공급업체에서 제공한 "update.sh" 스크립트를 실행합니다. 이 스크립트는 압축 파일을 추출하는데, 압축 파일 자체도 덮어쓰게 됩니다(update.sh). 그래서 어딘가에 별도의 폴더에 복사하지 않는 한 해당 스크립트를 변경할 수 없다고 생각합니다.
update.sh의 일부로 "sudo update_extra.sh"를 호출하는 줄이 있습니다. 서비스 계정으로 update.sh를 실행 중이므로 이 sudo 줄은 서비스 계정의 비밀번호를 묻는 메시지를 표시합니다... 기억나지 않습니다(기억하고 싶지도 않습니다).
비밀번호 없이 해당 계정에 전체 sudo 권한을 부여하고 싶지 않습니다. 이는 심각한 보안 위험이 될 수 있기 때문입니다(예: 앱이 웹 서버를 실행함). 또한 update_extra.sh 파일을 루트로 실행할 수 있는 전체 sudo 권한을 부여하는 데 약간 주의를 기울이고 있습니다. 해당 파일은 동일한 서비스 계정으로 업데이트될 수 있기 때문입니다.
내 질문:
_homeseer 계정이 sudo를 사용하려고 하면 대신 내 개인 계정의 비밀번호를 묻는 메시지를 표시하고 내가 가지고 있는 sudo 권한으로 실행되도록 sudo(예: visudo)를 구성할 수 있습니까? 피할 수 있다면 루트 비밀번호를 설정하지 않는 편이 나을 것입니다. 하지만 미리 살펴보니 이 길을 가고 싶다면 선택의 여지가 많지 않을 것 같습니다.
아니면 update.sh 스크립트를 수정하고, 업데이트를 직접 적용할 수 있도록 그룹 권한을 구성하고, 나중에 서비스 계정에 권한을 부여해야 합니까?
답변1
이 문제를 sudo로 처리할 수 있습니다.
이것을 sudoers 파일에 추가하면:
_homeseer hostname = (_homeseer) NOPASSWD: /path/to/update.sh
- 호스트 이름=
hostname
귀하의 컴퓨터에서 출력됩니다.
주목해야 할 한 가지는 update.sh를 처리하는 100% 안전한 방법은 없다는 것입니다. 왜냐하면 update.sh에는 모든 명령이 포함될 수 있기 때문입니다. 그리고 시간이 지남에 따라 변경될 것이라고 가정하고 있습니다. 즉, HASH 함수를 사용하여 스크립트가 이전과 동일한지 확인하세요.