Apache 웹 서버가 있습니다. PHP 스크립트가 있습니다. 스크립트는 Apache를 실행하는 사용자인 www-data 사용자로 실행됩니다. PHP 스크립트가 스크립트 소유자의 권한으로 실행되도록 Apache를 구성하고 싶습니다. 과거에는 suphp를 사용할 수 있었지만 지금은 고아가 되었고 업스트림이 작동하지 않아서 데비안은 이를 제거하기로 결정했습니다(왜 데비안 테스트에는 suphp가 없나요?). 이 경우 대신 무엇을 사용해야 합니까? 동일한 작업을 수행하는 죽지 않은 Apache 모듈이 있습니까?
답변1
나는 PHP를 사용하지 않았지만 FastCGI를 사용하여 다른 언어로 비슷한 작업을 수행한 적이 있으며 특히 PHP 5.3.3 이상에는 PHP-FPM 구현이 내장되어 있기 때문에 이것이 제가 권장하는 접근 방식입니다. PHP 공식 웹사이트에서 사용 방법에 대한 문서를 찾을 수 있습니다.FastCGI 프로세스 관리자(FPM).
많은 기능이 있지만 가장 관련성이 높은 것은 작업자가 서로 다른 사용자 및 그룹 ID(및 서로 다른 php.ini
)를 가질 수 있다는 것입니다.
답변2
당신은 할 수 없습니다. Apache는 의도적으로 낮은 권한 계정(종종 apache
또는 이라고 함) httpd
에서 실행됩니다 . 제안한 대로 Apache를 구성할 수 있는 유일한 방법은 root
Apache가 엄청난 보안 위험에 노출될 수 있는 으로 실행되는 것입니다.
운영 체제를 사용해야 합니다.조금이라도원하는 효과를 얻을 수 있는 기능입니다.
어떤 운영 체제를 사용하고 있는지는 밝히지 않았습니다.
일부 운영 체제는 스크립트를 실행하는 방법을 알고 있습니다.셰르본 라인이 경우 top)은 suid 비트를 안전하게 설정합니다. 여기에는 최신 BSD와 일부 SVR4 변형이 포함됩니다.
이 경우 해결 방법은 간단합니다. 다른 사용자로 실행해야 하는 명령을 상단에 PHP shebang 줄이 있는 별도의 스크립트로 이동하는 것부터 시작하세요.
#!/usr/bin/php
your commands here
그런 다음 다른 사용자로 실행되도록 설정합니다.
$ sudo chown otheruser myscript.php
$ sudo chmod u+s otheruser myscript.php
Linux를 실행하는 경우 suid 스크립트가 운영 체제에 의해 차단될 가능성이 높습니다. 와 같은 해결 방법에 대한 참조를 찾을 수 있지만 perl -wT
일부 운영 체제나 해당 운영 체제의 구성 모드에서도 이를 방지할 수 있습니다. 이곳은 모든 해결 방법과 이를 방지하는 모든 방법을 나열하는 곳이 아닙니다. 간단히 말해, 운영 체제가 suid 스크립트의 안전한 실행을 허용하는 핵심 기능을 구체적으로 제공하지 않으면 이 작업을 수행할 수 없습니다.
표준 솔루션은 다음과 같이 C에서 suid 래퍼를 만드는 것입니다.
int main(int argc, char* argv[])
{
execv("/full/path/to/my-script.php", argv);
}
그런 다음 다음 명령을 실행하십시오.이 순서대로래퍼를 빌드하고 다른 사용자로 실행할 수 있도록 권한을 설정합니다.
$ make my-script-wrapper
$ sudo chown otheruser my-script-wrapper
$ sudo chmod u+s my-script-wrapper
(대부분의 운영 체제에서는 suid 비트가 있는 파일이 변경될 때마다 suid 비트를 지우기 때문에 순서가 중요합니다. 원하는 작업을 수행하기 위한 이 세 가지 명령의 대체 순서는 없습니다.)
이제 실행하면 my-script-wrapper
으로 실행되므로 스크립트가 otheruser
시작되면 my-script.php
의 권한으로 스크립트가 실행됩니다 otheruser
.
래퍼는 보안 결함 발생을 방지하기 위해 의도적으로 매우 간단합니다. 더 복잡하고 유용하게 만들 수 있는 여러 가지 방법을 생각해 볼 수 있습니다.질문이 많다.
그냥 사용하고 싶을 수도 있습니다 sudo
. 지정된 사용자가 아닌 다른 사용자로 스크립트를 실행 root
하고 비밀번호가 필요하지 않도록 구성할 수 있습니다.