"사용자"가 루트로 실행되지 않아도 루트로 내 시스템에서 특정 Perl 스크립트를 실행할 수 있기를 원합니다.Perl 스크립트가 루트 (일반화)로 실행됩니다.
각 스크립트에 대해 해당 래퍼에 대해 setuid root를 설정하여 C 래퍼를 작성할 수 있습니다. 래퍼는 UID를 0으로 변경 한 다음 setuid 비트가 설정되지 않은 Perl 스크립트를 호출합니다. 이렇게하면 setuid 루트 스크립트를 실행하는 동안 불행한 장애물을 피할 수 있습니다.
하지만 각 스크립트에 C 래퍼를 쓰고 싶지는 않습니다. 한 시스템에서 전체 C 래퍼 하나만 수행하면됩니다. 나는 또한 모든 스크립트가이 C 래퍼를 사용할 수 없도록하고 싶다. C 랩퍼 자체가 Perl 스크립트의 특정 특성을 점검하여 UID를 루트로 변경하는 것이 허용 가능한지 여부를 확인할 수 있어야합니다.
이 문제를 해결하는 다른 스택 오버플로 질문은 아직 표시되지 않습니다.
나는 위험을 안다. 나는 시스템을 소유하고 있으며, 내 방식대로 서서 나를 무언가를 보살 피는 것을 원치 않는다.
제안 된 솔루션은 훌륭합니다. 제안 된 스크립트를 축복하기 위해 루트에서 수행해야하는 것을 C 래퍼가 루트로 실행하도록 알고 있어야합니다. 하지만 축복 (여전히 루트 만 가능)을 Perl 스크립트 자체의 일부로 만들고 싶습니다. 따라서 스크립트가 추가, 제거 또는 수정 될 때마다 별도의 해시 목록을 유지할 필요가 없습니다. –
그런 다음 펄 스크립트가 뒤돌아서 래퍼를 호출하여 이미 루트가 아닌 경우 자체를 호출합니다. 하지만 펄 스크립트는 그렇게 할 수 있으며, 본질적으로 전혀 보안이 없습니다. – ysth
커맨드 라인 사용자는 모든 종류의 C 래퍼가 관련되어 있다는 것을 알 필요가 없습니다. 그는 단지 Perl 스크립트를 실행할 것이고 예, 래퍼를 호출 할 것입니다. 그 트릭은 (루트 만 할 수있는 방식으로) Perl 스크립트에 태그를 달아 C wrapper가 Perl 스크립트에 UID0으로 실행될 자격이 있음을 알 수 있도록하는 것입니다. –