2010-03-10 2 views
0

누구도 웹 브라우저를 통해 디렉토리를 CHMOD하기 위해 PHP (검증되고 성공적으로)를 사용 했습니까?CHMOD 아파치 서버에서 PHP를 사용하는 리눅스 디렉토리

내 장애물은 다음과 같습니다 (가) PHP 스크립트 내가 FTP 사용자가 소유하고 "아무도"에 쓰기 권한이하지 않습니다 chmod를하고 싶은 위의 브라우저 (b)의 디렉토리에서 "아무도"로 실행 그것은

그래서 chmod를하려고 할 때 0666은/usr/www /에서 dirOwnedbyFTPuser/dirIamTryingToCHMOD 난 당신이 snipit를 공유 할 수있는 권한이 혹시 작성 성공적으로이 작업을 수행하는 스크립트를 실행 한 경우

를 거부 얻을/ 나와 함께하는 코드? 고마워요 ... 몇 달 동안 이랬어.

+0

거기에 해결책이 있지만 PHP가 시스템 권한을 관리하게하는 것은 좋지 않습니다. 그런 일을하기 위해 무엇이 필요합니까? – Benoit

+0

PHP를 사용하여 dymanically 디렉토리를 생성해야합니다. –

답변

1

예 PHP로 가능합니다. 그러나 일반적인 리눅스 권한 규칙은 아파치 사용자 (nobody)가 소유하지 않은 chmod 스크립트를 찾고 아파치 사용자에게 쓰기 권한이 없다면 sudo를 사용할 수있는 권한을 아파치에게 줄 수 있습니다.

경고 - 이것은 잠재적으로 방대한 보안 구멍입니다 !!!

sudoers 파일을 편집하여 sudo 사용 권한을 apache에 부여 할 수 있습니다. 당신이 당신의 "아무도"사용자에 대한 행을 추가 할 필요가 그런

sudo visudo 

을 입력 오류가 완전히 내 (우분투) 시스템에 너무 나사 남길 수 있습니다 당신이이 파일을 직접 편집하지 않는 것이 좋습니다. sudo 사용 권한을 특정 스크립트 나 폴더로 제한하여 사용 권한을 변경하기위한 쉘 스크립트를 작성한 다음 다른 스크립트와 다른 폴더에이 스크립트를 배치하는 것이 좋습니다. 그렇게하면 아파치는 시스템에 대한 완전한 루트 권한을 갖지 못한다 (이것은 꽤 무서운 생각이다). 또한 셸 스크립트에 코드를 추가하여 변경할 수있는 파일을 제한 할 수 있습니다.

또한 PHP를 통해 비밀번호를 입력 할 수있는 방법이 없기 때문에 비밀번호없이 sudo에 아파치를 허용해야합니다. 그래서 당신은 추가 할 줄은 그냥 sudo를 사용하여 명령을 앞에 PHP에서 다음

nobody ALL=(ALL)NOPASSWD:/path/to/my/script 

같은

passthru ("sudo /path/to/my/script ..."); 

(당신이) (대신 경유의 사용할 수있는 몇 가지 다른 기능이 있습니다이었다 그냥 첫 번째로 떠오른 것)

앞서 말했듯이 이것은 잠재적으로 매우 위험 할 수 있으며 위의 작업은 효과가 있지만 그 전에는 공공 프로덕션 서버에서 사용하지 않은 채 자신의 개인 시스템에서만 사용했습니다. 많은 사람들이이 보안에 대한 의견을 갖게 될 것이므로이 방법으로 발생할 수있는 잠재적 인 함정과 보안 구멍이 무엇인지 들어보고 싶습니다. SuExec을 사용하여 비슷한 일을 할 수는 있지만 익숙하지는 않습니다. 따라서이 방법에 대한 SuExec의 장단점이 있다면 누구나 듣고 싶을 것입니다.

최종 메모 : 아무도 'apache'또는 'www'와 같은 것으로 변경했을 것입니다. 아마도 바보 같지만 nobody라는 사용자에게 루트 권한을 부여하는 아이디어가 마음에 들지 않습니다 !!!

희망이 도움이됩니다.

+0

감사합니다. 나는 sudoers 파일을 업데이트하는 것이 내가 취하고 자하는 경로가 아니기 때문에 서버 측 조정을하고 싶지 않다. (http://stackoverflow.com/questions/2230391/php-shell-exec-and-sudo-must -be-setuid-root). –

1

예, 웹 브라우저를 통해 PHP에서 chmod 할 수 있습니다. (예, 우리 모두는 그것이 나쁜 생각 일 수 있다는 것을 알고 있습니다.)

그러나 PHP 스크립트가 사용할 권한이있는 파일 만 chmod 할 수 있습니다! 웹 서버가 PHP를 아무도 실행하지 않으면 "아무도"소유하지 않은 파일을 chmod 할 수 있습니다 ...

0

http://www.php.net/ftp ftp 사용자로 로그인하여 할 수 있습니다.

+0

예 크리스 ... 고마워요! 나는 이미 그 길을 갔다가 성공적으로 작동하도록 스크립트를 작성했다. 이제 내 딜레마는 디렉토리의 그룹 이름을 변경합니다. ftp_site ($ ftpStream, 'chgrp nobody'. $ directory)를 시도했지만 작동하지 않습니다. ftp_connect()를 통해 디렉토리 그룹을 변경해도 성공한 사람이 있습니까? 감사합니다. –