Wordpress를 수용하기 위해 파일 권한을 어떻게 수정해야 합니까?

Wordpress를 수용하기 위해 파일 권한을 어떻게 수정해야 합니까?

나는 여기에 설명된 방법을 성공적으로 사용해 왔습니다.단일 사용자가 유지 관리그리고 그것은 나에게 잘 작동했습니다. 이것은 내 모든 웹사이트에 대한 스크립트입니다.

sudo chown -R WebAdmin /var/www/example.com/
sudo chgrp -R www-data /var/www/example.com/
sudo chmod -R 750 /var/www/example.com/
sudo chmod g+s /var/www/example.com/
sudo chown www-data:www-data /var/www/example.com/Uploads/
sudo chmod -R 755 /var/www/example.com/Uploads/

저는 해당 서버의 모든 사이트를 관리하고 있으며 WebAdmin은 제가 FTP와 SSH에 사용하는 일반 사용자입니다.

그러나 최근 몇 개의 Wordpress 사이트를 호스팅 회사에서 내 서버로 옮겼는데 위의 내용이 작동하지 않습니다. Wordpress 또는 해당 테마/플러그인을 업데이트하면 오류가 발생했습니다.

요청된 작업을 수행하려면 WordPress가 웹 서버에 액세스해야 합니다. 계속하려면 FTP 자격 증명을 입력하세요. 자격 증명이 기억나지 않으면 웹 호스트에 문의해야 합니다.

다음과 같은 몇 가지 "수정 사항"이 있습니다.이 하나이는 해결 방법과 유사하며 아마도 안전하지 않을 수 있습니다. 그래서 가장 안전한(AFAIK) 방법을 사용하여 WordPress 사이트가 아닌 사이트는 이전과 같이 유지하면서 www-data를 WordPress 사이트의 소유자로 만들었습니다. 즉, 나는 단순히 달렸다

sudo chown -R www-data /var/www/wp_example.com/

WordPress 사이트에서. 물론 이것은 효과가 있었지만 웹 사이트를 수동으로 유지 관리하는 한 고통스럽습니다. 그렇게 하려면 루트로 로그인해야 하기 때문입니다. 또한 향후 유지 관리를 위해 웹사이트를 다른 사람에게 할당할 수도 없습니다. 내 사이트 중 일부는 하이브리드(일부는 WordPress이고 일부는 사용자 정의 페이지)입니다.

그래서 더 우아하고 더 일반적인 더 나은 솔루션이 있는지 궁금합니다. 즉, WordPress와 WordPress가 아닌 사이트 모두에서 작동할 것입니다.

한 가지 가능성은 사용자 WebAdmin을 www-data 그룹에 추가하는 것입니다. 아니면 WebAdmin 사용자 그룹에 대한 www-data일까요? 어느 것이 더 합리적이고 어느 것이 더 안전합니까?

답변1

WebAdmin직접 사용자 와 www-data그룹을 통한 사용자가 모두 www-data이러한 디렉터리에 써야 하는 경우에는 750충분하지 않습니다. 현재 디자인을 수정하는 방법은 다음과 같습니다.

sudo chmod -R 770 /var/www/example.com/

보안 고려 사항

그러나 일반적으로 이는 모든 PHP 사이트가 동일한 사용자로 실행되고 있으며 이 수정 후에는 모든 사이트가 다른 사이트의 파일을 읽고 쓸 수 있음을 의미합니다. 이는 사이트 중 하나가 손상되면 모든 사이트가 손상된다는 의미입니다.

모든 사이트에 대해 별도의 사용자 및 PHP-FPM 풀을 사용하면 사이트가 격리된 구획으로 나누어져 이러한 위험이 완화됩니다. 사이트를 실행하는 동일한 사용자로 사이트를 관리할 수 있습니다.

/var/www$ ls -l
drwxr-x--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxr-x--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxr-x--- 2 example-org www-data 4096 Aug 30 7:00 example.org

사용자가 WebAdmin모든 것을 관리해야 하는 경우 사용자를 그룹에 추가 www-data하고 그룹에 쓰기 권한을 부여할 수 있지만 권장하지는 않습니다.

/var/www$ ls -l
drwxrwx--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxrwx--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxrwx--- 2 example-org www-data 4096 Aug 30 7:00 example.org

PHP-FPM 풀

PHP FPM 풀에 대해 언급했듯이 여기에 간단한 구성 예가 있습니다. 이러한 단계를 자세히 설명하는 여러 자습서가 있습니다.

  1. PHP-FPM을 설치합니다.

  2. /etc/php/8.2/fpm/pool.d/example-com.conf:

    [example-com]
    user = example-com
    group = example-com
    
    listen = /run/php/example-com.sock
    chdir = /var/www/example.com
    
    listen.owner = www-data
    listen.group = www-data
    
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    php_admin_value[disable_functions] = exec,passthru,shell_exec
    php_admin_flag[allow_url_fopen] = off
    php_admin_value[cgi.fix_pathinfo] = 1
    
    security.limit_extensions =
    

    마지막 줄은 WordPress가 SEO URL을 처리할 수 있도록 보안을 낮추는 것이고, 다른 줄은 보안을 강화하기 위한 것입니다. 매개 pm변수는 필요에 맞게 조정되어야 합니다.

  3. Apache 모듈 활성화 mpm_event& proxy.proxy_fcgi

  4. <VirtualHost>사이트의 Apache2 블록에 핸들러를 추가합니다 .

    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/example-com.sock|fcgi://localhost"
    </FilesMatch>
    <Proxy "fcgi://localhost/">
    </Proxy>
    
  5. Apache2 및 PHP-FPM 서비스를 다시 로드하거나 다시 시작하세요.

관련 정보