Рекомендовані практики щодо дозволів файлів / директорій 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. Неправильні шляхи в config.php

Можливо, у папках tmp та logs вказані неправильні шляхи. Вони вказані в конфігурації системи або можуть бути оновлені безпосередньо у файлі config.php, якщо вам зручно редагувати системні файли безпосередньо. Якщо ви не впевнені, яким повинен бути шлях, створіть і завантажте файл whereami.php(або подібний) до кореневої папки вашого веб-сайту із таким вмістом:

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

Перейдіть, щоб [mywebsite].com/whereami.phpпобачити шлях до кореневої папки.

Після правильного шляху не забудьте видалити whereami.phpфайл.

4. Непридатний обробник файлів PHP

Ваш веб-хостинг може бути налаштований за допомогою файлового 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 моїх серверів - Безпечний режим, і виявилося, що це ввімкнено. Тому його вимкнення було рішенням. Тож для майбутніх читачів, якщо нічого з вищевказаного не виправлено, перевірте також свій безпечний режим :)
Mohammed Joraid

12

Перевірте рівні дозволів, вони повинні бути 644 та 755 відповідно для файлів і папок.

Багато разів рівні дозволів просто чудові, навіть якщо виникають певні проблеми. Це означає, що вам доведеться перевірити право власності та групу певних файлів і папок . Зазвичай група та право власності можуть бути змінені на www-дані для apache (використовуються на веб-серверах, що базуються на ubuntu).

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


Чи Joomla зазвичай належить до групи www-data?
TryHarder

1
Поряд з відповіддю Shyam, ми використовуємо модуль SuPHP Apache . Ми з'ясували, що коли було встановлено розширення, ми не могли змінити ці файли через FTP та навпаки (проблема власності на файли). SuPHP зафіксував це для нас, гарантуючи, що сценарії PHP працюють із дозволами їх власників.
Zachary Draper

1
Процес apache запускається під 'www-data' unix-групою. Його не тільки Joomla, всі програми на базі апаш.
Шям

Чи можна розробити та запустити скрипт оболонки, щоб автоматично виправити всі дозволи файлів?
NivF007

1
Так. gist.github.com/ssv445/11204300 Сценарій можна запустити в cron.
Шям

8

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

Спосіб зробити це в спільному середовищі хостингу (якщо це дозволено) - додати щось подібне до вашого .htaccess файлу:

AddHandler php53-cgi .php

Також дивіться огляд різних режимів .


7

Дозвіл має бути 644 та 755, як пояснив Шиям.

У Joomla ви можете уникнути всіх згаданих вами проблем, дотримуючись наступних методів.

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

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

Неможливо встановити розширення Joomla, плагіни тощо.

  • Це станеться через temp/logнеправильний дозвіл папки (для цього потрібно 755)

  • Або інша причина temp/log- неправильний шляхconfiguration.php

Небезпечні файли та папки через небезпечні дозволи та параметри власності.

  • Це найбільш важливо Joomla завжди рекомендую не використовувати 777 для файлів і папок , якщо ви не знаєте про це .

Сподіваюся, що це допомагає ..


7

Дозвіл має бути 644 та 755, як пояснив Шиям.

Проблеми, з якими ви стикаєтеся, швидше за все, пов’язані з налаштуванням вашого сервера. Здебільшого це відбувається на спільних хостах, де Apache працює під іншим користувачем, ніж ваш FTP-акаунт. Оскільки ви зазвичай завантажуєте Joomla за допомогою FTP, Apache не є власником файлу і, отже, не має необхідних дозволів для його зміни.

У Joomla є режим FTP, який дозволяє обійти цю проблему. Ви можете включити її в глобальній конфігурації Joomla. Тоді він буде робити весь доступ до файлів за допомогою користувача FTP замість звичайного користувача Apache.

Краще, однак, попросити свого господаря виправити цю проблему. Вони можуть налаштувати PHP (Apache) для роботи під спеціальним користувачем, який у такому випадку повинен бути вашим FTP-користувачем. Тоді все буде добре.


Користувач / група - це відповідь, як ви сказали, спеціальний користувач для PHP вирішує це, особливо якщо це збігається з FTP-користувачем.
jackJoe

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), а група - група 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 {} \;  

"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.

Для тих, хто працює з спільним хостингом для всього святого, будь ласка, зрозумійте безпеку.

Якщо ви не розумієте безпеку, будь ласка, вийдіть з хостингового бізнесу, який ви ускладнюєте для решти нас.

Поверніться до мого пошуку остаточного посібника щодо папок, які потребують доступу для запису ...


Дякую Крісу, але, напевно, я буду дотримуватися стандартних дозволів 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). Це, до речі, не конкретний рада. Також більшість людей не можуть виконати багато рекомендацій у цьому списку. Вони просто не мають ресурсів або використовують дешевший (не найдешевший) хостинг.
DeveloperChris
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.