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

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

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

apache인덱스 파일이 포함된 폴더는 그룹 apachme및 권한을 통해 소유됩니다.rwxrwxr-x(0775)

0770 파일에 대한 권한

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

테스트

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

답변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 기본 사용자라고 부르겠습니다.

가상 호스트에서 어떤 지시어도 정의하지 않으면 전통적인 방식으로 동작합니다. 그렇지 않으면 동작이 변경됩니다.

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

가상 호스트의 Virtualhost 또는 Directory 지시문에서 해당 디렉토리에 대해 활성화될 사용자와 그룹을 정의합니다. user:usergroup은 Apache가 가상 호스트/디렉토리에 액세스할 때 사용하는 유효 권한이 되며, 따라서 해당 그룹에 속한 모든 사용자는 디렉토리를 쓰거나 볼 수 있습니다.

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

    ....

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

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

  • 가상 호스팅 환경에서 사용자는 다른 사용자의 파일을 읽을 수 없습니다.
  • 단일 사용자에서는 다른 사용자처럼 파일을 생성할 수 있으며 Apache 기본 사용자나 ruid2 사용자 모두 해당 파일을 덮어쓸 수 없습니다.
  • 더 중요한 것은 이제 작성된 파일이 ruid2 사용자로 수행되고 더 이상 Apache 기본 사용자로 전역적으로 수행되지 않는다는 것입니다.

Github 페이지에서:

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

- Linux 커널만이 필요한 프로세스 기능을 구현했기 때문에 Linux에서만 실행됩니다. -한 번의 요청 후에 httpd 하위 항목을 종료할 필요가 없기 때문에 mod_suid2보다 성능이 더 좋습니다. 커널 기능을 사용하고 새로운 요청을 받은 후 다시 실행됩니다. - 몇 가지 보안 문제가 있습니다. 예를 들어 공격자가 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가 최소 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>

관련 정보