Почему в / var / www не должно быть chmod 777?

67

При разработке страницы на локальном хосте я иногда получаю сообщение об ошибке «Отказано в доступе», которое можно устранить, запустив chmod -R 777 /var/www. Тем не менее, люди говорят мне, что это плохая идея по соображениям безопасности.

Почему бы не /var/wwwиметь chmod 777?

Луис Альварадо
источник
Я хотел бы рекомендовать эту тему на @ serverfault.com. Он отлично показывает пример настройки apache2 и разрешений. serverfault.com/q/6895/57036 PS Я не могу комментировать, поэтому я должен добавить его в качестве ответа.
MystaMax

Ответы:

81

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, вы открыли дыру в безопасности, которую хакер может использовать, как считает нужным.

Если вы вместо этого будете следовать Принципу наименьших привилегий , то этой дыры не будет, и ваша система будет намного сложнее взломать. Несмотря на то, что все сложнее сделать правильно, вы все равно должны приложить все усилия для этого.

ImaginaryRobots
источник
+1 для "toehold" и "escalate". Хорошо описывает концепцию.
Кари Kääriäinen
3
Не могли бы вы объяснить, как файл, замаскированный под jpg, может быть выполнен на сервере?
Анураг Пешне