Надання дозволу користувачу apache


2

Я розробив веб-додаток, який дозволяє користувачам завантажувати зображення та трансформувати їх, щоб згодом завантажити їх знову перетвореними. Я, очевидно, повинен був надати дозволу користувача apache в каталог, куди користувачі можуть завантажувати:

$ chown root:www-data uploadFolder
$ chmod 1775 uploadFolder

Це дає групі apache всі дозволи, крім видалення.

Додаток створює каталог для кожного сеансу користувача всередині uploadFolderкаталогу з 0700дозволами та зберігає зображення користувача всередині.

Це uploadFolderвсередині каталогу додатків.

Коли зображення завантажується, воно подається безпосередньо клієнту (як посилання).

Завдання crontab виконує сценарій кожні 20 хвилин, який перевіряє, які сеанси активні, і видаляє всі файли та папки всередині, uploadFolderякі не відповідають жодному активному сеансу.

Це працює добре з двох місяців тому, але я не впевнений, чи може це бути небезпечно для мого додатка, бази даних чи інших сайтів у тому ж VPS.

Хтось знає ризик бути вседозволеним у цій ситуації?

Чи є альтернатива цього уникнути?

Це моя конфігурація сайту apache:

<VirtualHost *:80>
ServerName www.itransformer.es
ServerAlias itransformer.es *.itransformer.es
DocumentRoot /siteFolder
<Directory /var/www/itransformer-2.0/web>
   AllowOverride all
   Options -Indexes
</Directory>
</VirtualHost>

Додано цей фрагмент коду до конфігурації сайту Apache: (це має уникати читання .htaccessфайлів)

<Directory /uploadFolder>
   AllowOverride none
   Options -Indexes
</Directory>

Якщо сервер ділиться між різними програмами / користувачами, то будь-хто, хто може завантажувати сценарії, які веб-сервер може виконати, має повний контроль над цими каталогами і може робити все, що їм хочеться. Ви можете вивчити такі речі, як suphp тощо, щоб змусити php запускатися як конкретний користувач.
Doon

Теоретично, користувачі можуть просто завантажувати розміри файлів розміром 3 Мб у певний каталог через перевірку. Як хто-небудь міг завантажити щось інше?
Маноло

Я мав на увазі, якщо сервер є спільним та інші користувачі можуть завантажувати код і т. Д., Всі програми на сервері запускають www-data, тому якщо є інші додатки, які ви не контролюєте, які запускаються як веб-сервер, ви повинні мати на увазі. але якщо ви контролюєте все на сервері (IE його не поділяють, або ви довіряєте користувачеві сервера (не додатку), тоді ризик зведений до мінімуму
Doon

Я не бачу, як chmod 1775 заперечує видалення файлу. Якщо ви можете написати, ви можете також видалити ...
Calimo

Ні, ви не можете через клейкий шматочок.
Маноло

Відповіді:


1

Спершу слід зрозуміти, що безпека - це процес, і вам потрібно пам’ятати про це на всіх етапах та на всіх рівнях свого розвитку. Прочитайте та зрозумійте недоліки безпеки програми OWASP Top 10 та перегляньте їх код на увазі як у всьому світі (уся ваша програма), так і локально (окремі частини вашої програми). Звичайно, є й інші недоліки в безпеці, тому вам слід документувати про це.

Не можна дати гарну пораду з цієї теми без будь-якого коду та лише з дуже загальним та неточним описом, як ви це робите тут. У вашому випадку я б особливо стежив за обходом каталогів , XSS тощо, але пам’ятайте, що ризик може виникнути з будь-якого місця вашої програми.

На практиці ви, напевно, хочете запустити apache у в'язниці chroot , і я також би завантажував папки з деякими випадковими згенерованими іменами, а не ім'ям, яке надають користувачі (з оновлень вашого запитання виходить, що ви вже це робите) ). Загалом, пам’ятайте, що це просто зробить будь-який недолік, який ви, можливо, все ще буде складніше експлуатувати, але не запобіжить їм взагалі.


Я ніколи не ставив у в'язницю Chroot. Щойно побачив посилання: en.wikipedia.org/wiki/Chroot . Чи можете ви опублікувати гарну інформацію про те, як це зробити?
Маноло

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

У мене виникають проблеми при спробі показу зображень. Сервер не може отримати доступ до папки поза Document Root. Як мені це зробити?
Маноло

Потрібно перевірити дозволи в папці. Сценарій (як правило працює з тим самим користувачем, що і сервер, як правило, www-dataабо apache) повинен мати доступ до нього для запису.
Калімо

Напевно, я помиляюся, намагаючись отримати доступ до папки поза каталогом сервера. Він повинен знаходитися за межами кореня документа, але всередині каталогу сервера. Чи не так?
Маноло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.