Apache는 권한이 있어도 파일에 액세스할 수 없습니다.

Apache는 권한이 있어도 파일에 액세스할 수 없습니다.

다른 사람에게 읽기 액세스를 허용하고 싶지 않기 때문에 내 사용자와 사용자를 apache라는 그룹에 추가한 다음 해당 그룹을 apachme웹 페이지의 루트를 포함하여 액세스하려는 모든 파일과 폴더로 설정했습니다. apache그런 다음 그룹과 소유자에게 모든 권한을 부여합니다. 그 후에도 Apache는 all( )을 허용하도록 읽기 권한을 설정하지 않으면 여전히 파일에 액세스할 수 없습니다 rwxrwxr--(0774).

apache인덱스 파일, 해당 그룹 apachme및 권한이 포함된 폴더rwxrwxr-x(0775)

0770 파일 권한

이렇게 하면 500 오류가 발생합니다. 이를 변경하면 0774정상적으로 실행됩니다.

시험

이는 단지 어떤 사용자 Apache가 실행 중이고 해당 사용자가 그룹에 추가되었는지 확인하기 위한 것입니다.

답변1

보안 관점에서 볼 때 동일한 Apache 사용자를 사용하여 웹 페이지를 설정하는 것은 좋은 생각이 아닙니다. Apache 사용자는 웹 페이지를 읽을 수는 있지만 쓸 수는 없어야 합니다.

따라서 표준 구성에서 웹 구조는 일반적으로 모든 사람이 읽을 수 있으며 쓰기가 필요한 경우 일반적으로 Apache 사용자가 쓸 수 있습니다. 이는 보안상 악몽입니다.

이를 방지하는 한 가지 전략은 mod_ruid2를 설치/사용하는 것입니다.https://github.com/mind04/mod-ruid2

데비안의 경우 이것으로 충분합니다:

apt-get install libapache2-mod-ruid2

Apache 기본 사용자는 배포판마다 다릅니다. Debian에서는 www-data이고, RH/CentOS에서는 apache이며, SuSE에서는 wwwrun입니다. 앞으로는 이것을 Apache 기본 사용자라고 부르겠습니다.

가상 호스트에서 지시문을 정의하지 않으면 기존 방식으로 동작합니다. 그렇지 않으면 동작이 변경됩니다.

아이디어는 가상 호스트에서 실행되는 프로세스와 해당 가상 호스트에 액세스할 수 있는 권한이 있는 사용자를 갖는 것입니다. 따라서 파일은 해당 소유권을 갖게 되며 원하는 대로 다른 사용자는 해당 파일을 읽을 수 없게 됩니다. 일반적으로 가상 호스트당 한 명의 사용자를 정의합니다.

가상 호스트 또는 가상 호스트의 디렉토리 지시문에서 디렉토리에 유효한 사용자 및 그룹을 정의할 수 있습니다. user:usergroup은 Apache가 가상 호스트/디렉토리에 액세스할 때 사용하는 유효 권한이므로 이 그룹에 속한 모든 사용자는 디렉토리를 쓰거나 볼 수 있습니다.

    <Directory "/vhostdir/">
            RMode config
            RUidGid user usergroup

    ....

따라서 디렉토리에 쓸 때 파일이 사용자 그룹에 의해 관리되는 경우 이제 파일은 user:usergroup의 소유권을 사용하여 660으로 생성될 수 있습니다. 마찬가지로 이러한 파일은 전역 읽기 권한이 있는 다른 사용자가 만들 수 있지만 쓰기의 경우 Apache 기본 사용자가 아니라 다른 사용자가 됩니다.

그러면 mod_ruid2의 장점은 다음과 같습니다.

  • 가상 호스팅 환경에서 사용자는 다른 사용자의 파일을 읽을 수 없습니다.
  • 단일 사용자 내에서 다른 사용자로 파일을 생성할 수 있으며 Apache 기본 사용자나 ruid2 사용자는 해당 파일을 덮어쓸 수 없습니다.
  • 더 중요한 것은 이제 파일 쓰기가 Apache 기본 사용자가 전역적으로 수행하는 것이 아니라 ruid2 사용자가 수행한다는 것입니다.

Github 페이지에서:

mod_ruid2 정보는 mod_ruid 및 mod_suid2를 기반으로 하는 Apache 2.0, 2.2 및 2.4용 suexec 모듈입니다.

-Linux 커널만이 필요한 프로세스 기능을 구현하므로 Linux에서만 실행됩니다. - 요청 후 httpd 하위를 종료할 필요가 없기 때문에 mod_suid2보다 성능이 더 좋습니다. 커널 기능을 활용하고 새 요청을 받은 후 다시 suid를 사용합니다. - 몇 가지 보안 문제가 있습니다. 예를 들어 공격자가 httpd 프로세스를 성공적으로 악용하는 경우 유효한 기능과 setuid를 루트로 설정할 수 있습니다. 커널(grsec) 등의 보안 패치를 사용하는 것이 좋습니다.

- 두 가지 주요 작동 모드가 있습니다: stat 및 config 1.config가 기본값이며 uid 및 gid를 정의해야 합니다. [ug]id가 정의되지 않은 경우 기본 사용자 및 그룹이 사용됩니다.

  1. stat httpd setuid 및 setgid를 요청된 파일 이름(스크립트)/디렉토리의 uid 및 gid로 설정합니다. 가상 호스팅에 mod_vhost_alias를 사용하는 경우에 좋습니다.

설치 1. 여기에서 최신 libcap을 다운로드하여 설치합니다. 2. /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c를 실행합니다. 3. httpd.conf 구성 4. Apache를 다시 시작합니다.

구성 옵션: RMode config|stat (기본값은 config) RUidGid user|#uid group|#gid - RMode가 config인 경우 이 uid 및 gid를 설정합니다.

RMinUidGid user|#uid group|#gid - uid/gid < min uid/gid보다 작을 때 기본 uid/gid로 설정 RDefaultUidGid user|#uid group|#gid

RGroups group1 group2 - setgroups @none을 통해 설정된 추가 그룹 - 이전에 정의된 모든 그룹을 지웁니다.

RDocumentChrRoot - chroot 디렉터리와 그 안에 있는 문서 루트 디렉터리를 설정합니다.

예:

<VirtualHost example.com>    
ServerAdmin [email protected]    
RDocumentChRoot /home /example.com/public_html    
ServerName     example.com    
ServerAlias    www.example.com    
RMode          config     # unnecessary since config is the default    
RUidGid        user1 group1    
RGroups        apachetmp

<Directory /home/example.com/public_html/dir>
   RMode stat    </Directory>

<Directory /home/example.com/public_html/dir/test>
   RMode config
   RUidGid user2 group2
   RGroups groups1    </Directory>

<Directory /home/example.com/public_html/dir/test/123>
   RUidGid user3 group3    </Directory>

<Location /yustadir>
   RMode config
   RUidGid user4 user4
   RGroups groups4    </Location>

관련 정보