Linux 시스템에서의 Joomla 파일 / 디렉토리 권한 및 소유권에 관한 권장 사례?


26

과거에는 종종 Linux 시스템에서 Joomla 파일 / 디렉토리의 권한 및 소유권에 문제가있었습니다.

포함 된 문제

  • WinSCP와 같은 프로그램을 사용하여 파일을 서버로 전송할 수 없습니다.
  • Joomla 확장 프로그램, 플러그인 등을 설치할 수 없습니다.
  • 위험한 권한 및 소유권 설정으로 인해 안전하지 않은 파일 및 폴더

Linux 시스템의 Joomla에서 권한 및 소유권을 설정하기 위해 권장되는 모범 사례는 무엇입니까?

답변:


22

Linux 호스팅에서 파일 및 폴더 권한 문제에 대한 몇 가지 잠재적 원인이 있습니다.

1. 파일 및 폴더 권한

폴더 권한 확인이 0755로 설정되고 파일 권한이 0644로 설정됩니다. 무료 또는 유료 버전의 Akeeba Admin Tools를 사용하여 파일 및 폴더 권한을 사이트에서 이러한 표준 보안 설정으로 재설정 할 수 있습니다.

2. PHP 매개 변수

시스템 정보의 PHP 정보 탭에서 upload_max_filesize 매개 변수가 충분한 지 확인하십시오. cPanel의 PHP 설정 또는 사용자 정의 php.ini파일을 통해 공유 호스팅 환경에서 기본 설정을 대체 할 수 있습니다 .

3. configuration.php의 잘못된 경로

tmp 및 logs 폴더에 대해 잘못된 경로가 지정되었을 수 있습니다. 이들은 시스템 구성에서 지정되거나 시스템 파일을 직접 편집하는 것이 편한 경우 configuration.php 파일에서 직접 업데이트 할 수 있습니다. 경로가 무엇인지 확실하지 않은 경우 whereami.php다음 컨텐츠를 사용하여 웹 사이트의 루트 폴더에 파일 (또는 유사한 파일 )을 작성하여 업로드 하십시오.

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

[mywebsite].com/whereami.php루트 폴더의 경로를 보려면 로 이동하십시오.

올바른 경로가 whereami.php있으면 파일 을 삭제해야 합니다.

4. 부적절한 PHP 파일 핸들러

웹 호스팅은 기본 PHP 파일 핸들러로 구성 될 수 있지만 Joomla가 보안 파일 권한을 사용하여 파일을 업로드하고 실행할 수 있도록 suPHP 또는 FastCGI 또는 이와 유사한 것을 사용하는 것이 이상적입니다.

에서 사용중인 PHP 핸들러를 확인할 수 있습니다 System -> System Information -> WebServer to PHP Interface.

http://boomshadow.net/tech/php-handlers 에서 PHP 파일 핸들러의 상대적인 장점에 대한 좋은 기사가 있습니다.

공유 호스팅 환경에서는 일반적으로 활성화 된 PHP 파일 핸들러를 변경할 수있는 권한이 없지만 웹 호스팅 회사가이를 변경할 수 있습니다.

때로는 임시 해결책으로 파일 및 폴더 권한이 0777로 변경되었지만 웹 사이트가 취약한 상태가되므로 0777 파일 권한은 일반적으로 피해야합니다.

웹 호스팅 회사에서 suPHP 또는 FastCGI를 활성화 할 수없는 경우 유일한 다른 옵션은 새로운 웹 호스팅 회사를 찾는 것입니다.

5. 디스크 공간

디스크 공간 할당량을 초과하지 않았는지 확인하십시오.

문제 해결 점검표

Linux 시스템의 Joomla에서 권한 및 소유권을 설정하기 위해 권장되는 모범 사례는 무엇입니까?

1과 4를 참조하십시오.

WinSCP와 같은 프로그램을 사용하여 파일을 서버로 전송할 수 없습니다.

1, 2, 4 및 5를 참조하십시오.

Joomla 확장 프로그램, 플러그인 등을 설치할 수 없습니다.

1, 2, 3, 4 및 5를 참조하십시오.

위험한 권한 및 소유권 설정으로 인해 안전하지 않은 파일 및 폴더

1과 4를 참조하십시오.


1
필자의 경우 PHP 처리기가 문제의 큰 부분이라고 생각합니다.
TryHarder

1
+1 귀하의 답변으로 실제로 문제가 해결되지는 않았지만 서버의 PHP 설정-안전 모드를 확인하고 켜짐-활성화되어 있음을 확인하도록 영감을 받았습니다. 따라서 그것을 끄는 것이 해결책이었습니다. 따라서 미래의 독자들을 위해 위의 어느 것도 해결되지 않으면 안전 모드도 확인하십시오. :)
Mohammed Joraid

12

파일 및 폴더에 대한 권한 수준 은 각각 644 및 755 여야합니다.

몇 가지 문제에 직면하더라도 권한 수준은 여러 번 괜찮습니다. 즉 , 특정 파일과 폴더의 소유권과 그룹확인해야합니다 . 일반적으로 아파치의 경우 그룹 및 소유권을 www-data로 변경할 수 있습니다 (우분투 기반 웹 서버에서 사용).

파일 권한확인 하여이 흥미로운 Joomla 문서를 확인하십시오.


Joomla는 보통 www-data 그룹에 속합니까?
TryHarder

1
Shyam의 답변과 함께 SuPHP Apache 모듈을 사용합니다 . 확장 기능이 설치되면 FTP를 통해 해당 파일을 수정할 수 없으며 그 반대의 경우도 마찬가지입니다 (파일 소유권 문제). SuPHP는 PHP 스크립트가 소유자의 권한으로 실행되도록하여이 문제를 해결했습니다.
Zachary Draper

1
아파치 프로세스는 유닉스 그룹 'www-data'에서 실행됩니다. 모든 아파치 기반 애플리케이션 인 Joomla뿐만 아니라
Shyam

모든 파일 권한을 자동으로 수정하기 위해 쉘 스크립트를 개발하고 실행할 수 있습니까?
NivF007

1
예. gist.github.com/ssv445/11204300 cron에서 스크립트를 실행할 수 있습니다.
Shyam

8

가장 쉬운 해결책은 PHP가 (Fast-) CGI 모드에서 실행되도록하고 Joomla 디렉토리의 소유권을 FTP 사용자로 설정하는 것입니다. 따라서 FTP를 통해 파일을 업로드하고 덮어 쓸 수 있으며 Joomla는 파일을 쓸 수도 있습니다.

공유 호스팅 환경에서 (허용되는 경우)이를 수행하는 방법은 .htaccess 파일에 다음과 같은 것을 추가하는 것입니다.

AddHandler php53-cgi .php

다른 모드 에 대한 개요도 참조하십시오 .


7

Shyam에서 설명한대로 권한은 644 및 755 여야합니다.

Joomla에서는 다음과 같은 방법으로 언급 한 모든 문제를 피할 수 있습니다.

WinSCP와 같은 프로그램을 사용하여 파일을 서버로 전송할 수 없습니다.

  • 이것은 Joomla configuration.php가 (보안을 위해) 기본적으로 허용하지 않는이 권한을 갖는 것처럼 (444)의 권한으로 인해 발생할 수 있습니다 .
  • 이 같은 오류의 다른 상황은 한 서버에서 다른 서버로 사이트 나 폴더를 전송할 때입니다.

Joomla 확장 프로그램, 플러그인 등을 설치할 수 없습니다.

  • temp/log폴더 권한 이 잘못되어 발생 합니다 (755 필요).

  • 아니면 또 다른 이유는 temp/log경로가 잘못되었다는 것입니다.configuration.php

위험한 권한 및 소유권 설정으로 인해 안전하지 않은 파일 및 폴더

  • 이것은 가장 중요합니다. Joomla는 이를 모르는 경우 파일 및 폴더에 777을 사용하지 않는 것이 좋습니다 .

도움이 되길 바랍니다 ..


7

Shyam에서 설명한대로 권한은 644 및 755 여야합니다.

직면 한 문제는 서버 설정 방법과 관련이있을 수 있습니다. 대부분의 경우 Apache가 FTP 계정과 다른 사용자로 실행되는 공유 호스트에서 발생합니다. 일반적으로 FTP를 사용하여 Joomla를 업로드하므로 Apache는 파일 소유자가 아니므로 파일을 변경하는 데 필요한 권한이 없습니다.

Joomla에는이 문제를 무시할 수있는 FTP 모드가 있습니다. Joomla 글로벌 구성에서 활성화 할 수 있습니다. 그런 다음 일반 Apache 사용자 대신 FTP 사용자를 사용하여 모든 파일 액세스를 수행합니다.

그러나 더 좋은 방법은 호스트에게 문제를 해결하도록 요청하는 것입니다. PHP (Apache)가 특별한 사용자로 실행되도록 설정할 수 있습니다.이 경우 FTP 사용자 여야합니다. 그러면 모든 것이 잘 작동합니다.


PHP / 특수 사용자가 FTP 사용자와 일치하는 경우 특히이 문제를 해결한다고 말했듯이 사용자 / 그룹이 답입니다.
jackJoe

5

예, Shyam 에서 설명한 대로 권한은 644 및 755이어야 하지만 다른 포스터는 파일이 웹 서버에서 소유하고 그룹이 속한 그룹 인 경우를 언급하지 않습니다.

예를 들어 FileZilla에는 다음과 같은 권한이 표시됩니다.

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

drwxr-xr-x 권한은 755입니다 (선행 dr를 무시하므로 wxr-xr-x입니다). 읽기 권한의 가치는 4이고 쓰기 권한의 가치는 2이며 실행 권한의 가치는 1입니다. 따라서 모두 7을 더한 것이이 파일의 소유자입니다. 그룹에는 읽기 및 실행 권한이 있지만 쓰기 권한은 없으므로 5, 모든 사람은 5. 권한을 갖습니다. 권한 만들기 755.

754는 읽고, 쓰고, 실행 한 소유자입니다. 읽기 및 실행 권한이있는 그룹과 모든 사람에게 읽기 권한 만 있습니다.

위의 예에서 파일 소유자는 www-data (많은 Apache 서버의 기본 웹 서버 그룹 임)이고 Group은 myGroup 그룹이며 이는 내가 속한 그룹 (관리자)입니다.

첫 번째 숫자는 소유자 권한이고 두 번째 숫자는 그룹의 권한이며 세 번째 숫자는 모든 사람의 권한입니다. 분명히, 당신은 웹 서버에 필요한 권한을 주도록 조심해야합니다. 그리고 잠 가야하는 파일은 누군가 (세번째 숫자) 만 쓰거나 실행할 수 없도록해야합니다. 아래는 숫자의 의미입니다.

웹 서버가 파일을 소유한다고 가정하면 관리자는 그룹에 속하며 물론 모든 사람이 세 번째 숫자입니다.

644 : 사용 권한이 644로 설정된 파일은 누구나 읽을 수 있으며 파일 / 폴더 소유자 만 쓸 수 있습니다.

755 : 사용 권한이 755로 설정된 파일은 모든 사람이 읽고 실행할 수 있지만 파일 / 폴더 소유자 만 쓸 수 있습니다.

777 : 권한이 777로 설정된 파일은 누구나 읽고 쓸 수 있으며 실행할 수 있습니다. 꼭 필요한 경우가 아니면 일시적으로 만 웹 서버에서 보안상의 이유로이 권한 세트를 사용하지 마십시오. 특히 디렉토리에 이러한 권한이있는 경우 재난이 발생합니다. 이는 누구나 파일을 업로드하고 실행할 수 있음을 의미합니다.

Joomla!를 설정하는 Linux 명령은 다음과 같습니다. 명령 행에서 권장되는 권한. 권장 Joomla 파일 권한

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

참고-많은 사람들이 경로 없이이 명령을 보여 주지만 디렉토리를 루트 Joomla로 변경하는 것을 잊어 버린 경우 항상 전체 경로를 사용하는 것이 좋습니다. 설치 디렉토리와 경로없이 실행하면 해당 최상위 디렉토리의 모든 파일과 디렉토리에 대한 권한을 변경하고 큰 혼란을 일으켰습니다.

이 명령을 실행 한 후 이미지를 업로드하는 사용자 등 더 많은 권한이 필요한 디렉토리에 대한 권한을 수정해야합니다.

줌 라만 사용한다면! 인터페이스에 연결되어 있고 서버에 대한 관리자 또는 FTP 액세스 권한이없는 경우 위의 소유권 및 권한을 사용하십시오.

귀하가 NOVICE 인 경우 여기에서 중지하십시오. 아래는 권한과 소유권이 무엇을 진정으로 이해하는 사람들을위한 것입니다.

그러나 FileZilla와 터미널 세션 명령 줄을 대부분 사용하고 수동으로 많은 파일을 업로드하기 때문에 소유권과 권한이 매우 좋지 않습니다. 그러나 파일을 소유하지 않아서 쓸 수있는 권한이 없기 때문에 파일을 덮어 쓸 수 없습니다. FileZilla가 웹 서버 계정으로 로그인 할 수는 있지만 FileZilla가 내 계정으로 로그인하기를 원하므로 웹 서버가 액세스 할 수있는 파일뿐만 아니라 다른 디렉토리도 탐색 할 수 있습니다 ... SO ... 소유권과 권한을 다음과 같이 변경합니다.

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

나는 나 자신을 소유자로 만들고 웹 서버를 그룹에 넣고 ... 디렉토리에 대한 권한을 775로, 파일에 대한 권한을 664로 변경합니다. 내 인생을 훨씬 더 쉽게 만듭니다 ... 각자 모두.

내 방식대로하면 다음과 같은 명령이 있습니다.

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  

"drwxr-XR-X는 755이다"- 이것은 751 (대중에 대한 읽기 파마를 누락) 것,하지 755 (755 있지만이 디렉토리에 대한 더 "정상"이 될 것입니다.)
MrWhite

4

다른 답변은 수행해야 할 작업에 대한 좋은 설명을 제공합니다. 이미 구성 요소를 업로드했으며 ftp로 파일에 액세스 할 수없는 경우 권한을 수정하는 스크립트 만 추가하고 싶습니다.

이 경우이 파일을 fix.phpFTP 서버 로 업로드 하고 브라우저에서 엽니 다.http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

이 스크립트는 666에 모든 파일의 권한을 설정하고 777 세계 쓰기 가능한 모든 디렉토리의는 하지 공유 호스트에 대한 권한의 최고의 세트 만 다시 파일을 액세스 할 수 있습니다 다음 FTP와 올바른 값으로 설정할 수 있습니다.


1

파티에 늦었다. Joomla에 쓸 폴더가 무엇인지에 대한 결정적인 가이드를 찾기 위해 다른 곳을 찾고 여기에 왔습니다.

죄송합니다. 나쁜 소식의 선구자입니다.

모든 디렉토리에 대해 권한 755를 사용하고 모든 폴더에 대해 644를 사용하는 것에 대한 조언은 최소한 무책임합니다 .

소유자가 웹 서버가 아닌 한 모든 폴더와 파일을 쓰기 가능하게 만드는 것이 좋습니다 (apache et al).

나는 이것이 일반적인 권장 관행이라는 것을 알고 있지만 좋은 관행은 아니라고 확신 할 수 있습니다. 폴더에 쓰기 기능을 제공하려는 마지막 소프트웨어는 웹 서버 자체입니다. 아직 패치되지 않았거나 심지어 발견되지 않은 악용을 이용하기 위해 해커가 사용하는 웹 서버입니다.

.htaccess가 Kevin을 구할 것이라고 생각하십니까? 웹 서버 쓰기 액세스를 허용 했으므로 잊어 버린 해커 친구들은 원하는 권한을 부여하는 자체 .htaccess 파일을 만들 수 있습니다! 아, 나는 서버에서 .jpg 파일을 실행 가능하게 만듭니다. 그리고 당신은 .php 실행으로부터 보호하는 것이 A를 덮을 것이라고 생각했습니다.

그러나 쓰기 액세스가 필요한 폴더 만 실제로 있어야합니다. 다음 폴더는 755 및 644입니다.

public_html/images
public_html/cache
public_html/tmp

쓰기 가능한 모든 폴더 (위와 같이)에 대해 AllowOveride none을 사용하여 .htaccess 파일을 끄십시오.

공유 호스팅 행운의 사용자에게는 제어 할 수없는 구성 요소이므로 행운을 빕니다.

.htaccess 파일을 읽기 전용으로 만드는 것이 도움이 될 것이라고 생각하지 마십시오. 해커 친구가 새 폴더를 만들 수 있다면 (가능한 경우) 자신의 .htaccess를 만들 수 있습니다.

신성한 모든 것을 위해 공유 호스팅을 실행하는 사람들은 보안에 대한 단서를 얻으십시오.

보안을 이해하지 못하면 호스팅 비즈니스에서 나가십시오.

이제 쓰기 액세스가 필요한 폴더에 대한 명확한 안내서를 다시 검색해 보겠습니다.


Chris에게 감사하지만 표준 Jomla 웹 사이트 및 Sucuri와 같은 보안 전문가가 권장하는 표준 755 및 644 파일 권한을 사용하고있을 것입니다. docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ ...
닐 로버트슨

예, "권장"을 알고 있지만 일단 악용되고 악용 된 이유를 알아 내면 "권장"을 창 밖으로 던져 처음부터 다시 시작할 수 있습니다. 권장 사항은 최소 저항 경로입니다. 가장 안전한 것은 아닙니다.
DeveloperChris

표준 파일 권한과 함께 joomla.stackexchange.com/a/180/120에있는 "Joomla 웹 사이트 보안 유지"목록의 1-10 단계 가 표준 파일 권한과 함께 50 개 정도의 웹 사이트에서 제대로 작동했습니다. 지난 몇 년. 마일리지는 다를 수 있습니다.
Neil Robertson

@NeilRobertson 나는 그 목록에 동의하지만 그 목록에 갇히지 않은 익스플로잇이 있다면 마지막 방어선은 웹 서버에 쓰기 권한을 부여하지 않는 것입니다 (apache et al). 그건 그렇고 그것은 줌라 특정 조언이 아닙니다. 또한 대부분의 사람들은이 목록에서 많은 권장 사항을 구현할 수 없습니다. 그들은 단순히 자원이 없거나 저렴한 (가장 저렴한) 호스팅을 사용하고 있습니다.
DeveloperChris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.