Чому не слід / var / www мати chmod 777


67

Під час розробки сторінки в localhost я іноді отримую помилку "Дозвіл відмовлено", яку я можу вирішити, запустивши chmod -R 777 /var/www. Однак люди мені кажуть, що це погана ідея з міркувань безпеки.

Чому не повинен /var/wwwмати chmod 777?


Я хотів би порекомендувати цю тему на @ serverfault.com. Це чудова робота з прикладом налаштування для apache2 та дозволів. serverfault.com/q/6895/57036 PS Я не можу коментувати, тому мені потрібно додати це як відповідь.
MystaMax

Відповіді:


80

777 - це поганий дозвіл взагалі, і я покажу вам, чому.

Незважаючи на те, як це може виглядати в казино чи Лас-Вегасі, 777 не означає для вас джекпот. Швидше, джекпот для всіх, хто хоче змінити ваші файли. 777 (і його потворний двоюрідний брат 666) дозволяють читати і писати дозволи (а у випадку 777 - Виконати) іншим . Ви можете дізнатися більше про те, як працюють дозволи файлів , але коротше, це три групи дозволів: власник, група та інші . Встановивши дозвіл на 6 або 7 ( rw-або rwx) для інших, ви даєте будь-якому користувачеві можливість редагувати ці файли та папки. Як правило, як ви уявляєте, це погано для безпеки.

Ось мій приклад:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Поки я створив папку та створив файл із "поганими" дозволами (777 та 666). Тепер я перейду на іншого користувача і спробую маніпулювати цими файлами.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Оскільки цей "зловмисний" користувач, я зміг розмістити файли в каталозі та вставити текст у вже існуючі файли. В той час як нижче, в каталозі з 755 та файлами з 644 я можу бачити всередині файлів і каталогів, але я не можу редагувати файли, ані створювати нові:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Для дозволів Apache вам потрібно буде дотримуватися 0755 та 0644 (AKA umask 022) для папок та файлів відповідно. Це дозволяє вам, як власнику файлів, редагувати та маніпулювати ними, надаючи Apache мінімальний рівень доступу, необхідний для роботи.


13
Мені дуже шкода мови, але це відповідь. Дякую, Марко.
Луїс Альварадо

Що робити, якщо ви створили користувачів лише для людей, яким дозволено вільно керувати папкою / var / www? Я використовую спеціальні віртуальні машини для кожного веб-сервера, який я запускаю, і мені цікаво, чи все-таки це справедливо, що вам слід бути таким обережним.
UrkoM

1
@UrkoM Ви ніколи не можете бути занадто обережними. Якщо ви хочете, щоб люди отримували доступ до одних і тих же файлів, ви можете збільшити групові дозволи на 6/7 (0664/0775) та додати кожного користувача до цієї групи. Хоча ця установка (і та, яку я описав у своїй відповіді) не відповідає всім критеріям, я б сказав, що 90% часу 0755/0644 - це дозволи, які ви хочете використовувати. Якщо у вас є лише системи "одного користувача", то ризик виникнення інших з дозволом на запис не є настільки великим ризиком.
Марко Цеппі

4
@UrkoM Інша річ, яку слід врахувати, - це те, що є багато "користувачів", які не представляють реальних людей, але існують, щоб певні сервіси могли працювати з обмеженими можливостями (в основному з міркувань безпеки, але і щоб зменшити шкоду, який може виникнути від помилки стабільності). Перегляд вмісту , /etc/passwdі ви побачите , як користувач mail, newsі nobody. Навіть якщо всім реальним людям користувачів вашої системи добре, щоб вони могли змінювати вміст /var/www, це не означає, що ви хочете, щоб усі процеси працювали, оскільки ці "штучні" користувачі зможуть це зробити.
Елія Каган

1) Як найпростіша відповідь. Не пояснює, як Apache або Nginx можуть управляти папками або файлами. Apache або Nginx є серверами, так що додатки, вони не ваш «зловмисний» користувач, вони не можуть надрукувати ls -lah, touch badабо будь-які інші команди. Як вони можуть маніпулювати папками та файлами? 2) Спадщина. Ви не покривали спадкування між папками та файлами в них. Є по крайней мере , 2-3 кроки до файлу: /var, /var/www, /var/www/project. Якими повинні /varбути дозволи користувачів / груп ? Якими повинні /var/wwwбути дозволи користувачів / груп ? І так далі. Як вони співпрацюють?
Зелений

15

По суті, дозволу 777 не зроблять вас зламаними самостійно, але якщо хтось взагалі отримає опору, це може бути використане для ескалації дозволів та отримання повного контролю над вашим комп'ютером. Найгірше - те, що ваші дозволи дозволяють використовувати "7" - це означає, що читати, писати та виконувати дозволи.

Скажімо, хакер хоче захопити ваш комп’ютер. Він може підключитися до комп'ютера за допомогою веб-браузера, підключившись до http://yourcomputer.example.com:80/. Якщо у вас є будь-які сторінки, які дозволяють йому завантажувати зображення, він може перейменувати виконуваний файл, закінчений на ".jpg", і завантажити його на ваш сервер. Тепер він переглядає цей файл у своєму веб-браузері і запускає його, оскільки Linux не переймається розширенням, він бачить лише, що це виконуваний файл. Це може не отримати його багато, але, оскільки він працював зовсім, він знає, що він працював як користувач apache. Потім він завантажує модифіковану версію, яка буде редагувати конфігураційні файли apache, надаючи йому ще більший доступ - скажімо так, щоб apache виводив вміст / etc / passwd. Потім він може використовувати цю інформацію, щоб побачити, які користувачі існують у системі. Потім він може підключитися за допомогою ssh та спробувати загальні паролі, щоб увійти як ці користувачі - якщо це не працює, він перейде до використання повної атаки грубої сили. Якщо він входить як користувач із доступом до sudo,

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

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


+1 для "toehold" і "ескалація". Добре описує поняття.
Kari Kääriäinen

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