웹사이트 파일의 권한은 어떻게 되어야 합니까?

웹사이트 파일의 권한은 어떻게 되어야 합니까?

루트가 SSH를 통해 로그인할 수 없도록 CentOS 웹 서버를 잠갔습니다. 내 웹사이트 디렉토리와 파일은 루트의 소유입니다. 따라서 파일을 업로드하는 과정은 두 단계로 이루어집니다. WinSCP를 사용하여 /home 디렉터리에 업로드합니다. 그런 다음 SSH를 통해 로그인하고 파일을 필요한 위치로 옮겼습니다.

더 좋은 방법이 있나요? 루트가 아닌 사용자가 웹 사이트 파일을 소유해야 합니까?

다른 질문을 보면,이것이는 내 사용자를 네트워크 사용자 그룹의 일부로 만들고 해당 그룹이 모든 웹 사이트 파일을 소유하도록 해야 함을 나타내는 것 같습니다. 이것이 전형적인가요? 이에 대한 보안 문제가 있습니까?

답변1

간단히 말해서: root:root rwxr-xr-x, 디렉토리에 대한 쓰기 액세스가 필요하지 않은 경우 root:www-data rwxrwxr-x웹 디렉토리의 비밀(예: 데이터베이스 비밀번호)을 보호해야 하며 이 경우 root:www-data rwxr-x---쓰기 액세스가 필요합니다.그리고이 경우 비밀을 보호해야 합니다 root:www-data rwxrwx---.

예, 이상적으로는 웹사이트 파일을 루트가 소유해야 합니다. 이는 최소 권한의 원칙 때문입니다. 권한 측면에서 루트는 어쨌든 무엇이든 할 수 있으므로 루트로 무언가를 갖는 것은 실제로 루트에게 추가 권한을 부여하지 않고 다른 계정에서 권한을 빼앗는 것뿐입니다. 그거 좋은 일이야™.

최소 권한의 원칙이 무엇인지 모르는 경우 기본적으로 프로세스에 필요한 최소 권한만 부여하고 그 이상은 부여하지 않습니다. 프로세스가 비밀번호를 얻고 공격자가 비밀번호를 사용하여 권한을 얻는 경우 피해를 제한하기를 원하기 때문입니다. 그는 방금 프로세스에서 상속받은 반짝이는 새 권한을 얻었습니다. 이것이 동기다SELinux, 데몬은 다음을 수행할 수 있습니다.특권을 포기하다,리눅스 기능,chroot 감옥1 - 이 모든 작업은 공격자가 프로세스를 장악할 경우 발생할 수 있는 피해를 제한하기 위해 수행됩니다.

일반적인 시나리오에서는 모든 사람이 읽기 액세스 권한을 갖고 루트에만 쓰기 액세스 권한을 부여하기를 원합니다. 이 경우 www-datar-x 그룹이 소유하도록 웹 디렉토리를 설정했는지 여부는 실제로 중요하지 않습니다. 왜냐하면 어느 쪽이든 권한을 얻게 되기 때문입니다.

그러나 디렉토리 트리를 조회하여 Apache가 액세스할 수 있는 것과 일반 사람이 액세스할 수 있는 것을 구별해야 하는 더 복잡한 시나리오가 있습니다. 이것이 www-data-as-group이 들어오는 곳입니다. Apache에는 쓰기 액세스 권한을 부여할 수 있지만 일반 사용자에게는 부여할 수 없습니다. 또는 데이터베이스 비밀번호를 보호해야 하는 경우 모든 사람의 읽기 액세스를 거부하면서도 Apache가 콘텐츠를 볼 수 있도록 허용할 수 있습니다.

1 : 이것은 약간의 잘못된 정보입니다. 시스템 chroot()호출은 실제로 보안 기능으로 설계된 적이 없으며 chroot Jail은 chroot()처음 등장할 때까지 발명되지 않았습니다. 따라서 몇 가지 제한 사항이 있습니다. 예를 들어, 루트 사용자인 경우chroot 감옥에서 탈출할 수 있습니다. 같은 내용이 적용됩니다.Linux 컨테이너(Docker, systemd-nspawn나는 당신을보고 있습니다). 그림BSD 감옥그리고솔라리스 영역기본적으로 chroot 감옥의 개념을 가져와 실제로 만듭니다.일하다안전하게 - 커널 보안 취약점을 배제하기 위해.할 수 없다BSD 감옥에서 탈출하세요.당신이 그 뿌리라 할지라도.

2 : 네트워크 서버의 그룹명은 배포에 따라 달라질 수 있습니다. Debian과 그 파생 제품에 있지만 www-dataRHEL 시리즈의 기능이 무엇인지 모르겠습니다.

답변2

나는 적어도 두 가지 이유를 빨리 생각할 수 있다아니요웹사이트 콘텐츠를 루트가 소유하게 만드세요:

  • 다음과 같은 일부 도구고소 실행 프로그램파일을 소유한 사용자로 스크립트 등을 실행하도록 설계되었습니다. 사용하지 않는다면 열어서는 안 되며 suexec는 루트와 같은 특수 사용자의 권한 하에서 실행하는 것을 거부한다고 생각합니다. 그러나 심층적인 방어를 위해 루트가 소유한 파일을 가져서는 안 됩니다. 첫 번째 장소.
  • 웹사이트를 유지하려면 루트 액세스가 필요합니다. 사이트를 유지 관리하는 데 필요한 권한보다 더 많은 권한을 요구할 필요는 없습니다. 사이트를 유지 관리할 때마다 루트가 되면 루트 계정의 노출이 늘어나고 사이트를 유지 관리하는 동안 실수로 인해 우발적인 피해를 입을 가능성이 높아집니다.

답변3

루트 로그인을 거부하는 것은 좋은 결정입니다. 루트는 무차별 대입 SSH 공격의 인기 있는 대상입니다.

루트는 웹 콘텐츠 소유자에게 일반적인 선택인 것 같습니다. 저는 일반 사용자 계정을 사용합니다. 그룹은 개발 작업이 공유되거나 webdeveloper, 개발자가 한 명만 있거나, 개발자 계정이 여러 개발자 간에 공유되고 특별한 그룹이 필요하지 않은 상황에서 의미가 있습니다. .

관련 정보