Чому погано мати кореневі записи файлів у каталог, який не належить root?


28

Це з'явилося в коментарі до іншого питання, і мені б хотілося, якби хтось міг пояснити мені причини цього.

Я запропонував Apache записати помилки для заданого VHost у домашній каталог користувача. Це було збито, бо це було небезпечно. Чому?

Я попросив роз'яснити у коментарі відповіді, але все, що я отримав, це те, що писати root у папці, яка не належить root, це небезпечно. Знову, хтось може пояснити?

Спасибі,

Барт.


4
Що Apache працює під керуванням root - принцип найменшої привілеї викрикує це!
Джонатан Леффлер

1
Apache працює як www, але він запускається як root, так що він може прив'язуватися до порту 80, як це є нормою. Мабуть, він також записує як root.
Bart B

Відповіді:


31

Оскільки користувач зло може зловмисно спробувати вказати файл записує в інше місце . Це не так просто, але реально можливо.root

Наприклад, якщо користувач знайде спосіб зробити символьне посилання з передбачуваного журналу Apache до, скажімо, / etc / shadow, у вас раптом з’явиться непридатна система. Apache ( root) замінить облікові дані користувачів, зробивши систему несправною.

ln -s /etc/shadow /home/eviluser/access.log

Якщо файл access.log користувачем не піддається запису, його може бути важко викрасти, але краще уникати можливості!

Можлива можливість використовувати logrotate для виконання роботи , створюючи посилання на файл, який ще не існує, але логротат буде перезаписаний, як тільки журнали зростають:

ln -s /etc/shadow /home/eviluser/access.log.1

Примітка :

Символічний метод тільки один з можливих атак, враховуючи , як доказ концепції.

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


Чи є спосіб встановити на нього дозволи, щоб вони могли лише читати файл, а не видаляти, редагувати чи робити щось інше (наприклад, chown, chmod тощо)?
Джошуа

Ви повинні робити цю операцію на кожному можливому цільовому файлі! цей файл, що записується, є вподобаним, а не самим посиланням, яке належить нападнику, як він його створив.
drAlberT

2
@Joshua: chown може виконуватися тільки root. chmod може виконувати той, хто володіє файлом. IIRC, перейменування може здійснити той, хто є власником каталогу. Як зазначає AlberT, створення посилання перед створенням файлу root може зробити той, хто може записати в каталог.
atk

2
@atk: Крім того, той, хто володіє каталогом, як правило, може видаляти з нього файли (якщо не встановлено липкий +tбіт), навіть якщо у них немає дозволу на запис до самих файлів (оскільки unlink () - це запис у каталог, а не файл). Навіть якщо root створить файл достроково, власник каталогу все-таки зможе його видалити та замінити символьним посиланням на щось інше.
Джеймс Снайрінгер

1
Якщо зловмисник може записати в / home / eviluser (або може змінити дозволи в каталозі - вони володіють ним, IOW), то не має значення, якими є дозволи на access.log; зловмисник може (пере) перемістити файл і розмістити на його місці символьне посилання. Інше питання полягає в тому, чи програмне забезпечення приділяє увагу тому, що воно відкривається.
Джонатан Леффлер

1

Загальний принцип відсутності процесів запису в каталог, яким вони не володіють, або якому він не довіряє, є хорошим. Але в цьому конкретному випадку доцільно вірити, що код Apache відкриває журнал за допомогою O_NOFOLLOWтощо: вхід у домашній каталог користувача - це звичайна настройка.

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