2014-04-28 3 views
1

기본 (모범 사례) 및/또는 Linux 서버의 파일 또는 다른 유형의 파일에 PHP가 액세스 할 수 있도록 보안 방법을 제공하지 못했습니다. 공개 웹 디렉토리 또는 아파치 사용자가 소유하고 있으므로 여기에서 몇 가지 답변을 찾으시기 바랍니다.안전하게 시스템 파일에 대한 PHP 읽기 및 쓰기 액세스 허용

필자는 유능한 PHP 프로그래머이지만 일부 서비스 또는 응용 프로그램에서 생성 된 구성 파일이나 파일을 업데이트, 변경 또는 추가해야하는 웹 응용 프로그램 (대부분 웹을 통해 공개적으로 액세스 할 수 없음)을 작성하는 일이 점점 더 늘어나고 있습니다. 서버에.

예를 들어 root가 소유 한 /etc/mail/spamassassin/white-list.cf 파일에서 항목을 보거나 추가하거나 제거 할 웹 인터페이스를 만들어야합니다.

또 다른 시나리오는 사용자 vmail이 소유 한/var/vmail의 MIME 메시지를 구문 분석하기 위해 PHP가 필요하다는 것입니다.

이들은 몇 가지 예이며 다른 프로세스/사용자가 소유 한 위치에 다른 파일이 있습니다. 보안 위험없이 이러한 파일에 안전하게 액세스하고 조작하는 PHP 응용 프로그램을 작성하려면 어떻게해야합니까?

+1

루트가 소유 한 파일에 대한 인증되지 않은 쓰기 액세스를 권장하지 않습니다. 당신이 사용자 입력을 검증하는 데 매우 엄격하고 개별 파일의 소유권을 공유하는 방법에 대해 매우 신중하게 생각한다면 ........ 나는 여전히 이것을하지 않을 것입니다. 'cpanel','webmin' 또는 이미이 기능들과 보안 기능이 내장 된 다른 웹 기반 관리 도구를 사용하십시오. –

+1

감사합니다. 그러나 웹을 통해 서버를 관리하는 유틸리티 나 응용 프로그램을 요구하지는 않습니다. 웹 디렉토리 외부의 파일에 액세스하고 다른 사용자가 소유 한 PHP 코드에 대한 모범 사례를 찾고 있습니다. 다른 말로하면 cpanel, webmin 등과 같은 접근 방식을 사용하고 싶습니다. – Avedis777

+0

내 일반적인 전략은 www-data로 변경 한 내용을 임시 파일이나 DB로 옮기고 루트가 소유하고 실행하는 별도의 PHP 스크립트를 사용하는 것입니다 (cronjob과 같이) 입력을 분석하면 실제로 config 덮어 쓰기가 수행됩니다. –

답변

-1

이와 비슷한 것을 구현해야한다면, 아마도 sudo과 같은 것을 사용하여 권한을 세부적으로 조정할 것입니다. 저는 리눅스 CLI 전문가가 아니므로, 타이핑 할 때 고려하지 않은 문제가 있다고 확신합니다.

필자는 어떤 작업을 수행해야하는지 결정하고 완료해야하는 각 작업마다 별도의 스크립트를 작성합니다. sudo을 사용하면 해당 스크립트에 대해서만 필요한 수준의 사용 권한을 할당합니다.

분명히, 작업 수가 증가하면 복잡성과 작업량도 증가합니다. 나는 이것이 당신에게 지금 어떻게 영향을 미칠지 모르겠다.

+0

감사합니다, 나는 이것이 올바른 방향으로 가고 있다고 생각합니다. 현재 나는 PHP 웹 인터페이스를 통해 데이터베이스에 정보를 채워 이러한 문제를 해결 한 다음 새로운 데이터베이스 항목을 확인하고 이에 따라 필요한 파일을 업데이트하여 "중간자"역할을하는 cronjob을 보유하고 있습니다. 이 작업을 수행하는 것이 안전한 방법이라고 생각하지만 다소 복잡 할 수도 있습니다. – Avedis777

+0

명확한 설명을 위해 관련 스크립트 및 파일에 영구적으로 권한을 할당하거나 shell_exec()를 사용하여 임시로 필요한 권한을 할당하고 스크립트가 끝나면 되돌릴 것을 제안합니다. – Avedis777

+0

'sudo' 설정 파일을 사용하여 권한을 영구적으로 할당 할 수 있습니다. 그래서,'/ usr/bin/updatesomefile' 스크립트가 주어지면'sudo'를 사용하여 PHP 사용자가'shell_exec' (또는 이와 유사한 것)을 사용하여'sudo/usr/bin/updatesomefile'을 실행할 수 있도록합니다. '/ usr/bin/updatesomefile' 내에 모든 업데이트 로직이 있습니다. – garbetjie

관련 문제