기능을 설정하고 싶다면(capabilities(7)
), 예를 들어 CAP_NET_BIND_SERVICE
실행 파일에서 파일은 다음과 같습니다.대본, 기능을 설정해야 합니까(setcap(8)
) 스크립트를 시작하는 인터프리터에서, 아니면 스크립트 파일 자체에 설정하는 것으로 충분합니까?
참고: 이 질문은 특히 Scientific Linux 6.1과 관련이 있지만 일반적으로 대답할 수 있다고 생각합니다.
답변1
스크립트에서 설정한 기능은 적용되지 않습니다. 이는 스크립트를 처리하지 않는 것과 유사합니다 setuid
. 후자의 경우와 유사하게 shebang의 구현이 처리되는 방식 execve
과 그에 따른 보안 이유가 있습니다(자세한 내용은 다음을 참조하세요.)쉘 스크립트에 setuid 설정 허용).
내 생각엔 이런 옵션이 있는 것 같아
인터프리터 자체(실제로는 복사본)를 설정하는 함수
- 여기서 중요한 점은 이를 실행할 수 있는 사람은 누구나 이러한 향상된 기능(임의의 스크립트를 실행하거나 대화식으로 시작할 수 있음)을 사용하여 실행된다는 것입니다.
스크립트를 실행하고 이 실행 파일에 필요한 기능을 설정하기 위해 논리가 하드코딩된 래퍼 실행 파일을 작성합니다.
- 누구도 스크립트를 수정하거나 삭제/교체할 수 없도록 하세요.
- 여전히 이렇게 하면
chroot
이와 같은 래퍼를 남용할 수 있습니다.
두 경우 모두 플래그를 execve
설정하여 inheritable
기능 세트가 유지되도록 해야 합니다. 선택한 사용자에 대해 실제로 활성화되는 데 필요한 기능만 구성하여 일반적으로 pam_cap
분산을 사용할 수도 있습니다 .libcap
일반적으로 말하면, 예를 들어 누구도 환경을 변경하여 통역사의 동작을 수정할 수 없도록 하고 싶습니다. PYTHON_PATH
또는 그런 것.
답변2
이제 2022년에 시스템이 systemd를 사용하는 경우 CapabilityBoundingSet=
지시문에 나열된 필수 기능을 사용하여 systemd 장치 구성을 생성하고 거기에서 스크립트를 실행할 수도 있습니다.