Linux에서 스크립트가 수행하는 작업

Linux에서 스크립트가 수행하는 작업

기능을 설정하고 싶다면(capabilities(7)), 예를 들어 CAP_NET_BIND_SERVICE실행 파일에서 파일은 다음과 같습니다.대본, 기능을 설정해야 합니까(setcap(8)) 스크립트를 시작하는 인터프리터에서, 아니면 스크립트 파일 자체에 설정하는 것으로 충분합니까?

참고: 이 질문은 특히 Scientific Linux 6.1과 관련이 있지만 일반적으로 대답할 수 있다고 생각합니다.

답변1

스크립트에서 설정한 기능은 적용되지 않습니다. 이는 스크립트를 처리하지 않는 것과 유사합니다 setuid. 후자의 경우와 유사하게 shebang의 구현이 처리되는 방식 execve과 그에 따른 보안 이유가 있습니다(자세한 내용은 다음을 참조하세요.)쉘 스크립트에 setuid 설정 허용).

내 생각엔 이런 옵션이 있는 것 같아

  1. 인터프리터 자체(실제로는 복사본)를 설정하는 함수

    • 여기서 중요한 점은 이를 실행할 수 있는 사람은 누구나 이러한 향상된 기능(임의의 스크립트를 실행하거나 대화식으로 시작할 수 있음)을 사용하여 실행된다는 것입니다.
  2. 스크립트를 실행하고 이 실행 파일에 필요한 기능을 설정하기 위해 논리가 하드코딩된 래퍼 실행 파일을 작성합니다.

    • 누구도 스크립트를 수정하거나 삭제/교체할 수 없도록 하세요.
    • 여전히 이렇게 하면 chroot이와 같은 래퍼를 남용할 수 있습니다.

두 경우 모두 플래그를 execve설정하여 inheritable기능 세트가 유지되도록 해야 합니다. 선택한 사용자에 대해 실제로 활성화되는 데 필요한 기능만 구성하여 일반적으로 pam_cap분산을 사용할 수도 있습니다 .libcap

일반적으로 말하면, 예를 들어 누구도 환경을 변경하여 통역사의 동작을 수정할 수 없도록 하고 싶습니다. PYTHON_PATH또는 그런 것.

답변2

이제 2022년에 시스템이 systemd를 사용하는 경우 CapabilityBoundingSet=지시문에 나열된 필수 기능을 사용하여 systemd 장치 구성을 생성하고 거기에서 스크립트를 실행할 수도 있습니다.

관련 정보