2012-06-11 6 views
1

현재 엔지니어링 회사 용 Linux 기반 단일 보드 컴퓨터에서 작업하고 있으며 보드 내에서 호스팅되는 로컬 구성 웹 사이트를 업데이트하는 업무를 담당하고 있습니다. 이 구성 서버의 요점은 사용자가 웹 브라우저를 통해 보드에 연결하고 보드 내의 설정을 수정할 수 있도록하는 것입니다.루트 심볼릭 링크를 생성하기위한 PHP exec 권한

현재 만들려는 설정에는 보드의 하드웨어 시계의 시간대 설정이 포함됩니다. 안타깝게도 보드가 시간대를 처리하는 방법은/usr/share/zoneinfo /에있는 파일과/etc/localtime 사이에 시스템 링크를 설정하는 것입니다.

내 문제는 내가 웹 사이트에서 다음 명령을 실행해야한다는 것입니다 :

ln -s /usr/share/zoneinfo/Etc/GMT$1 /etc/localtime 

경우 $ 1은 + 또는 - 숫자 하였다. 이들은 웹 사이트의 드롭 다운으로 생성됩니다.

웹 사이트의 PHP에서이 명령을 실행하려고하면 주요 문제가 발생합니다. exec 명령의 응답을 잡아 냄으로써 symlink를 만들거나 수정할 충분한 권한이없는 것으로 나타났습니다. 나는 bash 스크립트를 만들고 PHP에서 실행하는 접근법을 시도했다. 또한 PHP 기반의 C 실행 파일을 실행 해 보았습니다.

주의 사항 : 사용자 암호는 임의로 생성되며 sudo는 포함 된 Linux 패키지에 포함되어 있지 않습니다.

내 목표는 보안 문제로 인해 Apache 서버를 루트로 실행하지 않는 것입니다. 명령을 실행하기위한 개별 스크립트 (임시) 권한을 줄 수있는 방법이 있습니까?

+2

sudo는 스크립트에 임시 권한을 부여하는 방법입니다. 임베디드 설치를 추가하십시오. – lanzz

+1

대부분의 임베디드 시스템에서 사용 된 suexec 헬퍼는 –

답변

2

있어 좋은 이유를하지 마십시오. darryn.ten의 대답은 시간 낭비입니다. 웹 서버에 모든 권한을 부여하는 권한을 부여하고 있습니다. 웹 서버를 루트로 실행하여 적은 노력으로 (그리고 안전하지 않은 것처럼) 같은 결과를 얻을 수 있습니다. 나는 떠들썩한 파티를 사용하고 bekow

  • 이 예에서 인수를
  • 링크 시간대

유효성을 검사 :

는 난 단지 루트로 실행되는 프로그램의 로직을 캡슐화 권 해드립니다 sudo가 루트로 실행해야합니다. 그러나 C로 작성한 경우 파일 소유자의 권한으로 프로그램을 실행할 setuid 비트를 활성화 할 수 있습니다 (쉘 스크립트에서는 작동하지 않습니다).setuid가 lua로 어떻게 작동하는지 확신 할 수 없다. 이것은 임베디드 시스템의 명백한 후보가 될 것이다.

#!/bin/bash 

# NB must be validated under executing user privilege 

REQUEST=`echo $1 | grep -P '/^([\+\-0-9]+)$/'`"; 
ln -s /usr/share/zoneinfo/Etc/GMT$(REQUEST} /etc/localtime 
+0

나는 이와 비슷한 방법으로 끝을 맺었다. setuid라는 C 프로그램을 작성한 다음 suid로 실행할 충분한 권한을 주었다. 나는 C 프로그램 내에서'setuid (0);'을 사용하고 다음을 실행했다 : 'chown root/usr/bin/timezone_set' 'chmod + s/usr/bin/timezone_set' 내 C 응용 프로그램을 설정한다. 적절한 사용 권한이 있어야합니다. 그런 다음 응용 프로그램을 실행하기 위해 PHP 프로그램을 설정했습니다. – jetbomber117

+0

솔리드 해답에 감사드립니다. –

0

당신은 설치는 sudo를 추가해야하고

visudo 

apache ALL=(ALL) NOPASSWD: ALL 

는 아파치 사용자를 제공하는 다음은 아파치가입니다 추가 할 수 있습니다.

그런 다음 명령

sudo ln -s /usr/share/zoneinfo/Etc/GMT$1 /etc/localtime 

에 sudo를 추가하고 명령이 실행을하셔야합니다.

편집 : 당신이 무 상태 프로토콜 상대하고 특히 실제로, 현대 오토넷 권한이

+0

입니다. 보안 문제로 인해 Apache 서버를 루트로 실행하지 않으려면 sudo를 통해 apache에 무제한 액세스 할 수있는 권한을 부여하는 것이 안전하지 않은 것으로 보입니다. –

+0

좋습니다, 이것은 기술적으로 작동 할지라도 어리석은 짓입니다. @symcbean은 훨씬 더 안전한 대답을 가지고 있습니다. –

관련 문제