Рекомендуемые практики относительно прав доступа к файлам / каталогам Joomla и владения в системах Linux?

26

В прошлом у меня часто возникали проблемы с разрешениями и владением файлами / каталогами Joomla в системах Linux.

Проблемы включены

  • Невозможность передачи файлов на сервер с помощью таких программ, как WinSCP.
  • Невозможно установить расширения Joomla, плагины и т. Д.
  • Небезопасные файлы и папки из-за опасных прав доступа и настроек владельца.

Каковы рекомендуемые рекомендации по настройке разрешений и владельцев в Joomla в системах Linux?

Стараться
источник

Ответы:

22

Существует несколько потенциальных причин проблем с разрешениями файлов и папок на хостинге Linux.

1. Права доступа к файлам и папкам

Убедитесь, что для разрешений для папок задано значение 0755, а для разрешений для файлов установлено значение 0644. Обратите внимание, что разрешения для файлов и папок можно сбросить до этих стандартных параметров безопасности для всего сайта с помощью бесплатной или платной версии Akeeba Admin Tools.

2. Параметры PHP

Проверьте, что параметр upload_max_filesize на вкладке Информация о PHP в Системной информации является достаточным. Вы часто можете переопределить настройки по умолчанию в среде общего хостинга через настройки PHP в cPanel или в пользовательском 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 File Handler

Ваш веб-хостинг может быть сконфигурирован с обработчиком файлов PHP по умолчанию, но в идеале он должен использовать suPHP или FastCGI или аналогичный, чтобы Joomla могла загружать и выполнять файлы с использованием безопасных файловых разрешений.

Вы можете увидеть, какой обработчик PHP используется System -> System Information -> WebServer to PHP Interface.

Хорошая статья об относительных достоинствах обработчиков файлов PHP находится по адресу: http://boomshadow.net/tech/php-handlers.

В среде общего хостинга у вас обычно нет доступа к изменению того, какой обработчик PHP-файлов включен, но ваша веб-хостинговая компания может изменить это для вас.

Иногда в качестве обходного пути права доступа к файлам и папкам изменяются на 0777, но это переводит ваш веб-сайт в уязвимое состояние, и в целом следует избегать разрешений для файлов 0777.

Если ваша веб-хостинговая компания не может включить suPHP или FastCGI, единственным другим вариантом может быть поиск новой веб-хостинговой компании.

5. Дисковое пространство

Убедитесь, что вы не превысили квоту дискового пространства.

УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ

Каковы рекомендуемые рекомендации по настройке разрешений и владельцев в Joomla в системах Linux?

Смотрите 1 и 4.

Невозможность передачи файлов на сервер с помощью таких программ, как WinSCP.

Смотрите 1, 2, возможно 4 и 5.

Невозможно установить расширения Joomla, плагины и т. Д.

Смотрите 1, 2, 3, 4 и 5.

Небезопасные файлы и папки из-за опасных прав доступа и настроек владельца.

Смотрите 1 и 4.

Нил Робертсон
источник
1
В моем случае, я думаю, что обработчики PHP были большой частью проблемы.
TryHarder
1
+1 Ваш ответ на самом деле не решил мою проблему, но я вдохновился проверить настройки PHP на моих серверах - безопасный режим, и оказалось, что он включен - включен. Поэтому путем его отключения было решение. Так что для будущих читателей, если ничего из вышеперечисленного не
устранило
12

Пожалуйста, проверьте уровни разрешений, это должно быть 644 и 755 для файлов и папок соответственно.

Во многих случаях уровни разрешений просто хороши, даже когда возникают некоторые проблемы. Это означает, что вам нужно будет проверить владельца и группу конкретных файлов и папок . Обычно группу и владельца можно изменить на www-data для apache (используется в веб-серверах на основе Ubuntu).

Не стесняйтесь проверить этот интересный документ Joomla на основе проверки прав доступа к файлам.

Shyam
источник
Joomla обычно принадлежит к группе www-data?
TryHarder
1
Наряду с ответом Shyam мы используем модуль Apache SuPHP . Мы обнаружили, что когда было установлено расширение, мы не могли изменить эти файлы по FTP и наоборот (проблема с владением файлами). SuPHP исправил это для нас, убедившись, что PHP-скрипты запускаются с разрешениями их владельцев.
Захари Дрейпер
1
Процесс apache запускается в «www-data» unix-group. Это не только Joomla, все приложения, основанные на Apache.
Шиам
Можно ли разработать и запустить сценарий оболочки для автоматического исправления всех прав доступа к файлам?
NivF007
1
Да. gist.github.com/ssv445/11204300 Вы можете запустить скрипт в cron.
Shyam
8

Простое решение для меня - часто разрешать PHP работать в режиме (Fast-) CGI и устанавливать право собственности на каталог Joomla для пользователя FTP. Таким образом, вы сможете загружать и перезаписывать файлы через FTP, а Joomla также сможет записывать файлы.

Способ сделать это в среде общего хостинга (если это разрешено), это добавить что-то вроде этого в ваш файл .htaccess:

AddHandler php53-cgi .php

Также см. Обзор о различных режимах .

fruppel
источник
7

Разрешения должны быть 644 и 755, как объяснил Shyam.

В Joomla вы можете избежать всех проблем, которые вы упомянули, с помощью следующих методов.

Невозможность передачи файлов на сервер с помощью таких программ, как WinSCP.

  • Это может произойти из-за разрешения (444), например, у Joomla configuration.phpэто разрешение не разрешено по умолчанию (в целях безопасности).
  • Другая ситуация для этой же ошибки - при переносе сайта или папок с одного сервера на другой.

Невозможно установить расширения Joomla, плагины и т. Д.

  • Это произойдет из-за temp/logнеправильного разрешения папки (требуется 755).

  • Или другая причина в том, что temp/logпуть неверен вconfiguration.php

Небезопасные файлы и папки из-за опасных прав доступа и настроек владельца.

  • Это самое важное, Joomla всегда рекомендует не использовать 777 для файлов и папок, если вы не знаете об этом .

Надеюсь, это помогает ..

Джобин Хосе
источник
7

Разрешения должны быть 644 и 755, как объяснил Shyam.

Проблемы, с которыми вы сталкиваетесь, скорее всего, связаны с настройкой вашего сервера. В большинстве случаев это происходит на общих хостах, где Apache работает под другим пользователем, нежели ваша учетная запись FTP. Поскольку вы обычно загружаете Joomla с использованием FTP, Apache не является владельцем файла и, следовательно, не имеет необходимых прав для его изменения.

В Joomla есть режим FTP, который позволяет обойти эту проблему. Вы можете включить его в глобальной конфигурации Joomla. Затем он будет осуществлять доступ ко всем файлам, используя пользователя FTP вместо обычного пользователя Apache.

Однако лучший способ - попросить своего хозяина решить проблему. Они могут настроить PHP (Apache) для работы под специальным пользователем, который в таком случае должен быть вашим пользователем FTP. Тогда все будет работать нормально.

Bakual
источник
Пользователь / группа - это ответ, как вы сказали, наличие специального пользователя для PHP решает эту проблему, особенно если это совпадает с пользователем FTP.
ДжекДжо
5

Да, разрешения должны быть 644 и 755, как объяснил Shyam , но другие авторы забывают упомянуть, что это если файл принадлежит вашему веб-серверу, а группа - это группа, к которой вы принадлежите.

Например, в 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, доступны для чтения, записи и выполнения всеми. Не используйте этот набор разрешений, из соображений безопасности, на вашем веб-сервере, за исключением случаев, когда это абсолютно необходимо, и только временно. Это катастрофа, ожидающая того, что произойдет, особенно если каталог имеет такие разрешения ... это означает, что любой может загрузить файлы и выполнить их.

Вот команды Linux для настройки Joomla! рекомендуемые разрешения из командной строки. Рекомендуемые разрешения для файлов 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! установив каталог и запустив их без пути, вы просто изменили разрешения для каждого файла и каталога в этом верхнем каталоге и создали огромный беспорядок.

После выполнения этих команд вам нужно будет исправить разрешения для любых каталогов, которым требуются дополнительные разрешения ... например ... пользователи, загружающие изображения и т. Д.

ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ТОЛЬКО JOOMLA! интерфейс, и у вас нет доступа администратора или FTP к серверу, а затем используйте владение и разрешения выше.

ОСТАНОВИТЕСЬ ЗДЕСЬ, ЕСЛИ ВЫ НОВИНКА .. Ниже приведены только для людей, которые действительно понимают, что делают разрешения и права собственности.

Тем не менее, я считаю, что владение и права доступа очень неудобны, потому что мне нравится использовать FileZilla и командную строку терминала в большинстве случаев, и я загружаю много файлов вручную. Но я не могу перезаписать какие-либо файлы, потому что не владею ими и у меня нет прав на запись. Я мог бы войти в FileZilla под учетной записью веб-сервера, НО ... Я хочу, чтобы FileZilla входил под моей учетной записью, чтобы я мог просматривать и другие каталоги, а не только файлы, к которым веб-сервер имеет доступ ... ТАК ... Я меняю владельца и разрешения на это:

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 {} \;  
bgies
источник
«drwxr-xr-x - это 755» - это будет 751 (пропущено разрешение на чтение для общественности), а не 755. (Хотя 755 будет более «нормальным» для каталогов.)
MrWhite
4

Другие ответы дают хорошее объяснение того, что должно быть сделано, я только хочу добавить скрипт для исправления разрешений, если вы уже загрузили компонент и не можете получить доступ к файлам с помощью ftp.

В этом случае я загружаю этот файл как fix.phpна FTP-сервер и открываю его в браузере: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 спасет вашего Кевина? Забудьте об этом, потому что вы разрешили веб-серверу доступ для записи, наши дорогие друзья-хакеры могут создавать свои собственные файлы .htaccess, предоставляя им любые разрешения, которые они хотят! как О, я не знаю, Umm сделать файлы .jpg, исполняемые сервером. И вы думали, что защита от выполнения .php покроет ваш А.

Но убедитесь, что только папки, требующие доступа для записи, действительно имеют его. 755 и 644 для следующих папок.

public_html/images
public_html/cache
public_html/tmp

И убедитесь, что вы отключили файлы .htaccess с AllowOveride none для всех доступных для записи папок (как показано выше)

Для тех из вас, кто пользуется виртуальным хостингом, удачи, так как это элемент конфигурации, который вы не можете контролировать.

Не думайте, что создание файла .htaccess только для чтения поможет. Если наши друзья-хакеры могут создать новую папку (они могут), они могут создать свой собственный .htaccess.

Для тех из вас, кто использует общий хостинг для всего святого, пожалуйста, получите ключ к безопасности.

Если вы не понимаете безопасность, пожалуйста, выходите из хостинг-бизнеса, вы делаете это жестко для остальных из нас.

Теперь вернемся к моему поиску полного руководства по папкам, нуждающимся в праве записи ...

DeveloperChris
источник
Спасибо Крис, но я, вероятно, буду придерживаться стандартных прав доступа к файлам 755 и 644, хотя это рекомендуется официальным веб-сайтом Joomla и экспертами по безопасности, такими как Sucuri: docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ …
Нил Робертсон,
Да, я знаю, что это «рекомендуется», но как только вас эксплуатируют и выясняют, почему вас эксплуатируют, я могу заверить вас, что вы выбросите «рекомендации» в окно и начнете с нуля. Рекомендации - путь наименьшего сопротивления. Не самый безопасный.
DeveloperChris
Шаги с 1 по 10 из списка «Обеспечение безопасности веб-сайта Joomla» по адресу joomla.stackexchange.com/a/180/120 вместе со стандартными правами доступа к файлам работали нормально для примерно 50 веб-сайтов, которые я искал для Последние несколько лет. Ваш пробег может меняться, конечно.
Нил Робертсон
@NeilRobertson Я согласен с этим списком, но если есть эксплойт, который не захвачен этим, ваша последняя линия защиты - не давать разрешения на запись веб-серверу (apache et al). Кстати, это не специфический совет для Joomla. Также большинство людей не могут выполнить многие из рекомендаций в этом списке. У них просто нет ресурсов или они используют более дешевый (не самый дешевый) хостинг.
DeveloperChris