2011-01-17 2 views
14

exec()을 다른 사용자로 실행할 수 있습니까? (내 상자에서는 www- 데이터로 실행 됨). www-data 소유가 아닌 파일에 대한 액세스가 필요한 스크립트를 실행하고 싶습니다.exec를 다른 사용자로 실행

답변

4

필자는 몇 년 전에 직렬 포트와 통신하기 위해 몇 가지 PHP 스크립트가 필요한 비슷한 요구 사항을 가졌습니다. 첫 번째 직렬 포트는 일반적으로/dev/ttyS0이며 루트 및 그룹 다이얼 아웃에 있습니다.

제 초기 설정을 위해 아파치 사용자를 그룹 다이얼 아웃에 추가했습니다. PHP 스크립트는 문제없이 시리얼 포트와 직접 대화 할 수있었습니다. 그러나 한 번에 하나의 스크립트 인스턴스 만 직렬 포트를 열 수 있으므로이 솔루션은 작동하지 않습니다.

그런 다음 직렬 포트와 PHP 스크립트 사이에 레이어를 제공하는 데몬을 만들었습니다. PHP 스크립트는 명명 된 파이프를 통해 데몬과 대화를하고, 데몬은 요청을 포맷하고 직렬 포트로 전달합니다. 따라서 약간의 캐싱이 필요합니다.

그래서 www-data 또는 아파치 사용자가 무엇이든 그 파일을 소유 한 그룹에 그룹 실행 권한을 부여하거나 내가 가진 것처럼 프록시를 사용하십시오. 보안 문제가 있다면, 나는 후자와 함께 갈 것입니다.

0

서버를 실행하는 사용자를 변경할 수 있습니다. 이것은 Windows 버전의 apache (서비스로 실행되는 apache와 apache가 실행되는 사용자를 쉽게 구성 할 수 있음)를 사용하여 쉽게 수행 할 수 있습니다.

어떤 서버 플랫폼을 사용하십니까?

+0

우분투 루시드를 사용하고 있습니다. 보안 위험이 있기 때문에 아파치가 실행되는 사용자를 변경하고 싶지 않지만 www-data가 소유하지 않은 파일에 대한 액세스가 필요한 백엔드 앱을 만들었습니다. www 데이터와 파일의 소유자를 포함하는 그룹을 만드는 과정을 밟아가는 것은 어떨까요? – mrwooster

+0

이 옵션은 작동 할 수있는 다른 옵션입니다. 아파치 사용자를 변경하는 것은 yozu가 루트와 같은 높은 수준의 권한을 가진 사용자를 지정하면 보안 상 위험 할 수 있습니다. – Thariama

1

아니오, 직접적으로. 당신이 리눅스 머신에 있고 권한을 가지고 있다면, 파일에 setuid 비트를 설정할 수 있습니다.

웹 서버는 이유로 다른 사용자로 실행됩니다. 매우 중요한 보안 메커니즘이며이를 해결하기 위해 보안 취약점이 발생할 수 있습니다.

6

서버 구성에 액세스 할 수있는 경우 (Apache라고 가정) suPHP을 사용해보십시오. 에서 가상 호스트의 configuration 명시 적으로 PHP 스크립트가 실행되는 사용자 및 그룹을 설정할 수 있습니다

<VirtualHost 192.168.1.1:80> 
... 
suPHP_UserGroup user group 
... 
</VirtualHost> 

이 설정은 --with-setid-mode=paranoid 옵션으로 내장 suPHP 구성에 사용할 수 있습니다.

사용자 ID를 변경하는 또 다른 방법은 적절한 특권이 요구되는 posix_setuid()입니다. 즉, PHP 스크립트를 루트으로 실행하는 것입니다. 이것은 serios 보안 문제입니다.

관련 문제