'웹 애플리케이션'이 아파치, nginx 등과 같은 서버에서 실행되고 PHP, Ruby 등의 동적 스크립팅 언어로 작성되었다고 가정하면 '사용자'가 누구인지 오해하고 있습니다.
사용자는 응용 프로그램에 로그인 한 사람이 아니며 응용 프로그램에서의 역할 (관리자 등)은 시나리오와 전혀 관련이 없습니다. 사용자는 프로세스가 실행되는 Linux 시스템 사용자입니다. 웹 사이트의 코드는 한 명의 사용자로만 실행됩니다. 웹 서버의 사용자 일 수도 있고 (실제로는 좋지 않은) 사용자의 사이트에 특정한 사용자 일 수도 있습니다 (훨씬 더 좋습니다).
Linux에서 사용자는 그룹에 속합니다. 다른 그룹에 사용자를 추가하고 해당 그룹에 권한을 할당 할 수 있습니다.
설정이 양호하면 서버를 한 명의 사용자로 실행하고 (이 사용자를 'webserver'라고 함) 동적 스크립팅 언어를 자체 사용자 (예 : 사이트 당 한 명의 사용자-첫 번째 사용자 인 'site1'이라고 함)로 실행합니다 (예 : FastCGI를 통해). .
파일을 제공하려면 웹 서버가 파일에 액세스해야하며 스크립팅 언어가 파일에 액세스해야합니다. 즉, 'site1'과 'webserver'는 파일을 읽을 수 있어야합니다. 그러나 그중 하나만 파일을 '소유'할 수 있습니다. 소유자는 '사용자'(사용자, 그룹, 기타)입니다. 또한 디렉토리에 쓸 수 있고 작성한 파일을 읽을 수 있도록 스크립트 언어가 필요합니다. 따라서 사용자 'site1'은 읽기 및 쓰기 권한이 필요합니다. 그룹 및 기타 권한이 가능한 한 제한적이기를 원하므로 '소유자'는 'site1'이되고 해당 사용자 권한은 읽고 쓸 수 있습니다.
웹 서버에 대한 권한을 다른 '사용자'로 지정할 수 없으므로 'site1'그룹에 'webserver'를 추가합니다 (물론 'site1'과 'webserver'를 모두 사용하여 다른 그룹을 만들 수도 있습니다. 이 그룹의 멤버에게는 동일한 권한이 부여됩니다 (사용자, 그룹, 기타 세트의 대부분의 여유 권한은 권한을 결정하기 위해 지정된 사용자에게 적용됩니다.
좋은 설정을 위해서는 파일에 동적 언어에 대한 실행 권한이 필요하지 않아야합니다. 파일은 직접 실행되지 않고 인터프리터로 읽습니다. 일반적인 스크립트 (아무 것도 쓰지 않는 스크립트)를 실행하려면 읽기 권한 만 필요합니다.
디렉토리에 대한 '실행'권한은 다른 의미를 갖습니다. 내용을 읽지 않고도 순회를 허용합니다. 디렉토리에서 파일을 읽으려면 사용자는 그 위의 모든 디렉토리에 대해 '실행'권한이 있어야합니다.
웹 응용 프로그램의 경우 모든 파일은 소유자의 읽기 권한이 있어야합니다. 그렇지 않으면 상당히 의미가없는 파일입니다. 사용자 또는 관리자가 웹 애플리케이션을 통해 파일을 업로드하는지 여부에 관계없이 '소유자'(즉, 동적 언어)에는 쓰기 권한이 필요합니다. 동적 언어는 큰 파일을 읽고 내용을 반향하는 속도가 느리기 때문에 효율적인 설정은 웹 서버를 통해 직접 정적 파일을 제공하려고 시도합니다. 따라서 웹 서버는 정적 파일에 대한 읽기 액세스 권한이 필요합니다.
따라서 최소 파일 권한은 다음과 같습니다.
- 사용자가 업로드 한 정적 파일 (images / swf / js 파일)이있는 디렉토리의 파일 : 640
- 관리자가 업로드 한 정적 파일 (images / swf / js 파일)이있는 디렉토리의 파일 : 640
- 응용 프로그램에 사용 된 라이브러리가있는 디렉토리의 파일 : 400 (또는 440)
- 실행 가능 / 탐색 가능한 서버 측 스크립트가있는 디렉토리의 파일 : 400 (또는 440)
- 이미 존재하는 파일 (txt 또는 xml)이 서버 측 코드에 의해 편집 될 디렉토리의 파일 : 640 또는 600
- (웹 서버가 때때로 수정하지 않고이를 표시할지 여부에 따라 다름)
최소 디렉토리 권한은 다음과 같습니다.
- 사용자가 정적 파일 (images / swf / js 파일)을 업로드 한 디렉토리는 다음과 같습니다. 750
- 관리자가 정적 파일 (images / swf / js 파일)을 업로드 한 디렉토리 : 750
- 응용 프로그램에 사용 된 라이브러리가있는 디렉토리 : 500 (또는 550) [최소 510 이상이어야 함]
- 실행 가능 / 탐색 가능한 서버 측 스크립트가 상주 할 디렉토리 : 500 (또는 550) [최소 510 이상이어야 함]
- 서버 측의 코드로 기존 파일 (txt 또는 xml)을 편집 할 디렉토리 : 750 또는 700
- (웹 서버가 여기에서 파일을 제공할지 여부에 따라 때때로 수정되지 않음)
다시 한번-웹 서버는 액세스해야하는 디렉토리 위에있는 모든 디렉토리에 대해 '실행'권한을 가져야합니다. 따라서 웹 서버가 지정된 디렉토리에서 파일을 제공하지 않더라도 실행 권한을 부여해야합니다.
웹 서버에 대부분의 파일에 대한 읽기 액세스 권한을 부여하는 것이 일반적입니다 (그래서 500에서 550으로 변경). 기본 '안전한'권한은 일반적으로 디렉토리의 경우 755, 파일의 경우 644입니다. 실행 권한은없고 모든 사람이 읽을 수 있으며 사용자 만 쓸 수 있습니다. Linux 시스템의 파일 대부분에는 이러한 권한이 있습니다.
'기타'권한은 소유자 또는 그룹이 아닌 시스템 사용자 (즉, 나머지 모든 시스템 사용자)를 나타냅니다. '기타'권한을 제한적으로 유지하는 것이 좋습니다. 이러한 사용자는 알 수 없으므로 명시 적으로 권한을 부여하지 않은 것입니다. 다른 권한은 손상된 시스템에서 가장 쉽게 활용할 수있는 경우가 많습니다 (예 : / tmp가 일반적인 대상인 이유 중 하나).
위의 맥락에서, 나는 당신의 마지막 두 가지 질문이 그와 관련이 있다고 생각하지 않습니다. 디렉토리 권한을 550으로 설정하고 파일 권한을 440으로 설정 한 다음 응용 프로그램에서 쓸 디렉토리에 대해 사용자에게 쓰기 권한을 부여하십시오 (예 : 디렉토리 : 750; 파일 : 640).
(파일을 업로드하려면 쓰기 권한이 있어야합니다. 그러나 원하는 경우 나중에 소유자 만 쓸 수있는 디렉토리에 누군가가 글을 쓰고있는 경우 계정을 손상시킬 수 있습니다. 제한적인 권한을 유지하는 이유).