2011-09-04 5 views
0

CENTOS에서 "useradd"명령을 실행하려고하지만 루트 권한이 필요해서 실행할 수 없습니다.아파치 (centOS)에서 루트로 cmd를 실행하는 방법은 무엇입니까?

php_info();에는 '--disable-posix'가 있습니다. PHP를 다시 설치하려고 시도했지만 yum과 더 많은 옵션을 사용하여 posix를 활성화하려했지만 운이 없었습니다.

누군가 나를 posix 사용 가능 또는 다른 해결책으로 만들 수 있습니까? posix_getuid();이 작동하지만, posix_setuid();은 작동하지 않습니다.

모든 솔루션?

모두 "사용자 클릭"에 의해 passwd (root) 명령에 useradd을 삽입해야합니다. 가장 좋은 방법은 무엇입니까?

고마워요!

코렌 또는

+12

아파치에 루트 권한이 허용되면 가장 작은 오류/버그로 인해 공격자가 서버를 완벽하게 제어 할 수 있다면 정말 그렇게해서는 안됩니다. 확실하지는 않지만, 만약 당신이 절대적으로 이것을 원한다면 아마도 파일에 글쓰기를 권유하고 루트 접근권을 가지고 실행중인 또 다른 PHP 데몬을 가지고 그 파일을 읽고 그것을 passwd로 업데이트 할 것을 권한다. 그러나 정말로, 당신은해서는 안됩니다. – Andreas

+0

그래도 파일 권한을 부여하면됩니다. 공격자는 서버에있는 모든 디렉토리에 대한 권한을 파일에 쓸 수 있습니다. 감옥이나 chroot 아닙니다. – user692601

+0

정확히, passwd/etc를 Apache 요청과 별도로 PHP로 업데이트한다고 가정하면 합리적인 보안 수단을 구현하는 것은 여러분에게 달려 있습니다. 루트 액세스 허용, 변경 사항 기록, 변경 승인 등? 그러나 실제로, 그것은 단순히 덜 나 빠졌지 만, 여전히 매우 나쁩니다. – Andreas

답변

0

당신은 suEXEC를 문서를 읽을 수 : http://httpd.apache.org/docs/2.2/suexec.html 은 그럼 어떻게 응용 프로그램 작업을 재고하고 더 나은/더 안전한 방법을 알아낼.

+0

suEXEC만으로는 그에게 * root * 같은 것을 실행할 수 없습니다. suEXEC은 루트가 아닌 사용자가 서로 분리하여 웹 응용 프로그램을 실행하는 데 적합합니다. –

0

이렇게하려면 sudo을 사용할 수 있습니다. 당신이 SELINUX가 작동하지 않습니다 시행 한 경우 실행 visudo 및 사실

apache ALL = (ALL) NOPASSWD: /usr/sbin/useradd 

같은 것을 넣어 대신은 useradd 사용하는 나는 제대로 환경을 설정하고

을 useradd와 실행하기 전에 정신 검사를 수행하는 래퍼 스크립트를 작성 운영자 추천 것
+2

이것은 끔찍한 충고입니다. 웹 서버에 대한 루트 액세스를 허용해서는 안됩니다. –

+0

진지하게이 작업을 수행하고 싶지는 않습니다. – 0xAli

+3

예, 질문은 : "나는 CENTOS에서"useradd "명령을 실행하려고합니다." 내 대답은 해결책을 제공합니다. 질문은 "웹 인터페이스를 통해 루트 암호를 올바르게 업데이트하는 방법"이나 "적절한 웹 마스터가되는 법을 어떻게 배울 수 있습니까?"라는 질문은 매우 정확하고 대답은 매우 정확합니다. – OlivierS

0

sudo를 통해 useradd를 호출하는 쉘 스크립트를 작성 하시길 권합니다.

Cmnd_Alias USERADD = /bin/sbin/useradd *

apache ALL=(USERADD) NOPASSWD:USERADD

은 useradd와 전화 :

당신은 특정 사용자 (visudo를 명령에 의해 편집)을/etc /의 sudoers에

이 같은이어야한다 특정 명령을 추가 할 수 있습니다 :

sudo /usr/sbin/useradd USERNAME

PHP 스크립트와 쉘 스크립트 모두에서 입력 내용을 확인하는 것을 잊지 마십시오.

+0

주 useradd 명령 다음에 '*'를 사용하면 매개 변수를 전달할 수 있습니다. –

+0

Sudo는 대화식으로 실행해야합니다. (패스워드를 요구한다) –

+0

노트 'NOPASSWD :'이것은 sudo가 특정 명령어 그룹에 대해 패스워드를 요구하지 않도록 지시한다. –

-3

도우가 (이 암호를 예상)

당신은 웹 서버에 어떤 식 으로든 루트 액세스 권한을 부여하지 않아야 대화 형으로 실행해야합니다.

의 Suexec 대안이지만, 당신은 또한 단지 파일에 웹 스크립트 쓰기 및 파일을 구문 분석하고 명령

를 처리하는 cron 작업을 할 수
+0

반드시 그렇지는 않습니다. –

+0

암호를 일반 텍스트로 저장하고 stdin을 통해 전달할 수 있지만 웹 서버 사용자에게 sudo 액세스 권한을 부여해야합니다. –

+0

아니요, 특정 사용자의 암호가 필요하지 않도록 sudo를 구성 할 수 있습니다. 그래도 여전히 나쁜 생각입니다. – IanNorton

0

도우 빨리이를 구현하는 빠른 해킹 될 수있다, 그러나 유능한 유닉스 전문가를위한조차조차 안전한 및 함정이있다 단단하다.

다른 방법은 자신의 서버 데몬을 작성하거나, 루트로 실행하거나, 로컬 유닉스 도메인 소켓이나 명명 된 파이프를 수신하거나 특정 보호 된 디렉토리에서 파일을 찾는 것입니다. 그런 다음 추가 할 사용자 이름으로 PHP 스크립트에서이 데몬에게 메시지를 보냅니다. 이 데몬에서는 최소한의 응용 프로그램 기능 만 구현하고 PHP에서는 다른 모든 기능을 구현하십시오. 하지만 데몬에서 강력한 입력 검사를 수행하고 환경을 위생 처리하여 다른 사람이 아니라 PHP 응용 프로그램이라고 확신하게하십시오.