웹 페이지에서 루트 권한이 필요한 Linux 셸 스크립트를 실행하는 방법

웹 페이지에서 루트 권한이 필요한 Linux 셸 스크립트를 실행하는 방법

Apache를 통해 루트 권한이 필요한 Linux 쉘 스크립트를 실행하려고 하는데, Apache에 대한 suid 및 sudo 권한을 설정하지 않고 루트 권한이 필요한 스크립트를 실행할 수 있는 방법이 있습니까?

제어판과 같은 파일을 편집하려고 합니다. 예를 들어 Plesk에서 "sw-cp-server"는 루트 파일을 편집할 수 있습니다.

답변1

문제는 어떻게 분할하든 권한이 없는 사용자가 할 수 있다면쓰다스크립트 파일을 사용하면 해당 사용자가 스크립트를 수정할 수 있기 때문에 무엇이든 할 수 있는 문이 열립니다. 그러나 원하는 경우 루팅하고 0700으로 설정할 수 있으므로 이 작업을 수행할 필요가 없습니다.

Apache에 대한 suid 및 sudo 권한을 설정하는 대신

아무것도 suid를 설정할 필요가 없으며, Apache가 스크립트만 실행할 수 있도록 sudo를 사용할 수 있습니다. Apache가 사용자로 실행 중인 경우 httpd다음을 추가하십시오 /etc/sudoers.

httpd ALL = NOPASSWD: /foo/bar/scripts/foobar.sh

거기에서 스크립트의 실제 경로를 바꾸십시오. 그런 다음 .을 사용하여 호출해야 하지만 이것이 사용자에게 허용된 sudo /foo/bar/scripts/foobar.sh유일한 작업입니다 .httpd

man 5 sudoers자세한 내용은 여기를 참조하세요 .

답변2

Apache를 통해 루트 권한이 필요한 스크립트를 실행하는 유일한 방법은 필요한 수정을 수행하는 데 필요한 권한 세트를 Apache에 제공하는 것입니다.

또 다른 옵션(그리고 이것은 더러운 해결 방법)은 Apache가 파일에 쓰도록 하고, Apache가 쓴 파일을 확인하고 Apache가 파일에 쓴 내용에 따라 조치를 취하는 데몬을 서버에서 실행하는 것입니다.

답변3

루트 권한으로 Apache를 실행하고 싶지 않다면(그러면 안 됩니다), SUID 권한( chmod 4755)을 부여하고 소유자 역할을 하는 root스크립트용 작은 래퍼를 작성할 수 있습니다. 그런 다음 래퍼는 올바른 권한으로 실행되는 스크립트를 호출할 수 있습니다. 결과적으로 다른 스크립트는 "승격"되지 않지만 물론 스크립트의 내용은 어쨌든 변경할 수 없다는 점에 유의해야 합니다.

관련 정보