웹 서버에 루트로 업로드된 파일은 웹 응용 프로그램에서 덮어쓸 수 없습니다.

웹 서버에 루트로 업로드된 파일은 웹 응용 프로그램에서 덮어쓸 수 없습니다.

이것이 내 문제입니다. PHP/MySQL을 사용하여 웹 애플리케이션을 개발 중인데 사용해야 하는 계정을 설정하는 데 몇 가지 문제가 있습니다.

개발 워크스테이션: WinXP SP3, Eclipse PDT

개발 서버: Debian 6.0, Apache2, MySQL 5, XDebug

LAN을 통해 연결합니다.

개발하면서 테스트에 필요한 코드를 서버에 업로드합니다. 저는 GIT와 ssh:root@myserver를 사용합니다.

예상대로 이러한 파일은 서버의 루트가 소유하게 됩니다.

내 웹 애플리케이션이 일부 파일을 업데이트해야 합니다. 서버에서 chmod를 실행할 수 있도록 하려면 파일 소유권을 www-data로 변경하세요. 이것은 훌륭하게 작동합니다.

문제는 파일을 변경하고 다시 업로드할 때마다 루트 소유권으로 돌아가서 수동으로 www-data로 다시 변경해야 한다는 것입니다.

파일이 라이브로 전환될 때 파일의 소유권이 올바른지 확인할 수 있으므로 프로덕션 환경에서는 이것이 문제가 되지 않을 것이라고 생각합니다. 하지만 개발 과정은 고통스럽습니다.

나는 무엇을 생각하고 있습니까?

1 - 루트 계정을 사용하여 업로드하면 안 될 것 같습니다. 사용자 www-data를 사용하여 ssh를 통해 서버에 연결을 시도합니다. 그러나 비밀번호를 묻는 메시지가 표시되고, 좀 읽은 후에 www-data 사용자를 건드리는 것은 좋지 않은 생각이라는 것을 알게 되었습니다.

2 - 개발 목적으로 다른 계정을 만들고 해당 계정을 사용하여 파일을 업로드할 수도 있습니다. 문제는 서버와 데이터베이스에 연결할 때 이 계정을 사용하도록 웹 애플리케이션을 구성하는 방법을 모른다는 것입니다.

3 - 개발 환경에서 루트로 실행되도록 애플리케이션과 데이터베이스를 구성할 수 있습니다. 이렇게 하면 문제가 해결됩니다. 하지만 위 2번에서 언급했듯이 어떻게 해야 할지 모르겠고, 좋은 생각이 아니라는 것도 알고 있습니다.

그래서 내 문제를 해결하는 방법에 대한 조언을 찾고 있습니다. 위의 세 가지 옵션 중 하나를 선택할 수도 있었습니다(또는 고려하지 않은 네 번째 옵션도 선택할 수 있었습니다). 감사해요.

업데이트 - 2011-09-13

아래 응답(cdp1337에게 감사)의 한 가지 해결책은 개발 서버에 파일을 업로드할 때 파일 권한을 업데이트하는 스크립트를 실행하는 것입니다. 제 경우에는 달릴 수 있어요

chown -R www-data:www-data *

내 웹사이트의 루트 디렉토리에 있습니다.참고: 이는 프로덕션 환경이 아니며 개발 웹 서버는 회사 외부에서 액세스할 수 없습니다. 이는 프로덕션 배포를 위한 솔루션이 아닙니다.

다른 아이디어가 있나요? 감사해요.

답변1

1/2 - 네, 권한이 없는 사용자로 데이터를 업로드하면 좋겠지만, 게을러지면 똑같은 일을 하고 있는 자신을 발견합니다.

3 - IMO는 결코 좋은 생각이 아닙니다. 특별히 필요하지 않은 경우 응용 프로그램을 루트로 실행하고 싶지 않습니다.

그렇지 않은 경우, 귀하의 질문에 답하기 위해 애플리케이션을 구성하는 데 필요한 프로세스를 수행할 실행 가능한 빌드 스크립트를 생성하는 것이 좋습니다. 많은 사람들이 이 작업을 위해 ant를 사용하지만, 일부 "chown" 명령이 포함된 간단한 bash 스크립트만으로도 충분합니다. 이렇게 하면 데이터를 업로드할 때 스크립트를 실행하기만 하면 스크립트가 올바르게 빌드되었음을 알 수 있습니다.

대안으로, 업데이트 스크립트가 자동으로 git에서 애플리케이션의 최신 버전을 가져오고 권한을 실행하도록 할 수 있습니다. 이는 두 단계를 하나로 압축합니다.

답변2

파일을 루트로 업로드해서는 안 될 뿐만 아니라,가능한루트로 파일을 업로드합니다. 이 시스템의 관리자이신가요?

사용자 www-data를 사용하여 ssh를 통해 서버에 연결을 시도합니다. 그런데 비밀번호를 물어보네요

관리자에게 책임을 묻지 않기를 바랍니다. 서버 담당자에게 가서 합리적인 보안 모델을 마련해 보세요. 이 모든 것들이 어떻게 작동하는지에 대해 알아야 할 것이 많습니다. 여기서 제공할 수 있는 답변을 훨씬 넘어서는 것입니다.

그러나 파일을 업로드하는 데 사용할 일반 사용자 계정과 http 서버 사용자를 포함하는 그룹을 생성할 수 있습니다. 이 그룹은 두 사용자 모두에 대한 기본 그룹이 되어서는 안 됩니다. 그런 다음 apache uid가 쓰기 액세스 권한을 가져야 하는 모든 디렉터리(문서 루트 외부의 매우 짧은 목록이어야 함)에 대해 그룹을 공개로 변경하고 공개 그룹이 콘텐츠를 읽을 수 있도록 설정한 다음 해당 디렉터리에 있습니다.

웹서버 UID로 읽을 수 있어야 하는 업로드하는 파일/디렉터리의 경우 "기타" 권한을 통해 읽기 액세스를 활성화하고 디렉터리에 대한 액세스를 실행합니다.

이 상자를 관리한다면, 귀하의 책임이 무엇인지 이해하기 시작하는 데 시간이 좀 걸릴 것입니다. 좋은 책이 많아요——뿌리좋은 시작이다.

관련 정보