Как настроить разрешения linux для папки WWW
Директория /var/www принадлежит root:root, что означает, что никто не может ее использовать и она совершенно бесполезна. Поскольку мы все хотим, чтобы веб-сервер действительно работал (и никто не должен входить в систему под именем «root»), то нам нужно это исправить.
Доступ нужен только двум сущностям.
PHP/Perl/Ruby/Python нуждаются в доступе к папкам и файлам, поскольку они создают их множество (например, /uploads/). Эти скриптовые языки должны работать под nginx или apache (или даже под чем-то другим, например, FastCGI для PHP).
Я знаю, что 777 — это полное разрешение на чтение/запись/исполнение для владельца/группы/гостей. Так что это не кажется правильным, поскольку дает случайным пользователям полные разрешения.
Какие разрешения нужно использовать на /var/www, чтобы:
Обеспечить контроль исходных текстов, например , для git или svn.
Пользователям в группе типа «websites» (или даже добавленные в «www-data») .
Серверы типа apache или lighthttpd и PHP/Perl/Ruby.
Которые могут читать, создавать и запускать файлы (и каталоги) там?
Если я правильно понимаю, скрипты Ruby и PHP не «выполняются» напрямую — они передаются интерпретатору. Поэтому нет необходимости в разрешении execute для файлов в /var/www. Поэтому кажется, что правильным разрешением будет chmod -R 1660, которое сделает все файлы, доступные для совместного использования этими четырьмя сущностями.
Правильно ли это?
Дополнение 1: Я только что понял, что файлы и каталоги могут нуждаться в разных разрешениях — я говорил о файлах выше, поэтому я не уверен, какими должны быть разрешения для каталогов.
Дополнение 2: Структура папок /var/www сильно меняется, поскольку одна из четырех вышеупомянутых сущностей постоянно добавляет (и иногда удаляет) папки и подпапки на много уровней вглубь. Они также создают и удаляют файлы, доступ к которым на чтение/запись может понадобиться другим трем сущностям. Поэтому разрешения должны выполнять четыре вышеуказанные функции как для файлов, так и для каталогов. Поскольку ни одному из них не нужно разрешение, я бы предположил, что разрешение rw-rw-r— — это все, что нужно, и это совершенно безопасно, поскольку эти четыре сущности управляются доверенными лицами, а все остальные пользователи в системе имеют доступ только на чтение.
Дополнение 3: Для персональных машин для разработки и частных серверов компании. Никаких случайных «веб-клиентов», как на общем хосте.
Дополнение 4: Я (кажется) , наконец-то , нашел способ заставить все это работать. Однако я не знаю, является ли это правильным и безопасным способом сделать это. Поэтому я объявил конкурс. Победит тот, кто предложит лучший способ защиты и управления www-директорией.
Ответ 1
- sudo usermod -a -G developer user1 (добавьте каждого пользователя в группу разработчиков) ;
- sudo chgrp -R developer /var/www/site.com/, чтобы разработчики могли там работать ;
- sudo chmod -R 2774 /var/www/site.com/, чтобы только разработчики могли создавать/редактировать файлы (остальные могут читать) ;
- sudo chgrp -R www-data /var/www/site.com/uploads, чтобы www-data (apache/nginx) мог создавать загрузки.
Ответ 2
- /var/www содержит папку для каждого сайта.
- Каждый сайт имеет назначенного владельца, который устанавливается как владелец всех файлов и папок в каталоге сайта.
- Все пользователи, которые поддерживают сайт, объединяются в группу для этого сайта.
- Эта группа назначается владельцем всех файлов и папок в каталоге.
- Любые файлы и папки, которые должны быть записаны веб-сервером (т. е. PHP), имеют владельца www-data, пользователя, под которым работает apache.
Ответ 3
После проведения дополнительных исследований выяснилось, что инструменты git/svn НЕ являются проблемой, поскольку они запускаются под тем пользователем, который их использует ( о днако демоны git/svn — это совсем другое дело!) . Все, что я создавал/клонировал с помощью git, имело мои права доступа, а инструмент git был указан в /usr/bin, что соответствует этому тезису.
Разрешения git доступны.
Разрешения пользователей, похоже, можно обеспечить, добавив всех пользователей, которым нужен доступ к каталогу www, в группу www-data, от имени которой работает apache (и nginx). Итак, похоже, что один из ответов на этот вопрос выглядит следующим образом:
По умолчанию /var/www принадлежит root:root , и никто не может добавлять или изменять там файлы.
1) Изменить владельца группы
Сначала нам нужно изменить группу каталога www так, чтобы она принадлежала группе «www-data», а не группе «root» .
sudo chgrp -R www-data /var/www
2) Добавить пользователей в www-data
Затем нам нужно добавить текущего пользователя (и всех остальных) в группу www-data .
sudo usermod -a -G www-data demousername
3) Изменить права доступа к каталогу www
Измените разрешения так, чтобы ТОЛЬКО владелец (root) и все пользователи из группы «www-data» могли rwx (читать/писать/исполнять) файлы и каталоги (никто другой не должен иметь к ним доступа).
sudo chmod -R 2770 /var/www
Теперь все файлы и каталоги, созданные любым пользователем, имеющим доступ (т. е. входящим в группу «www-data»), будут доступны для чтения/записи apache и, следовательно, php.
Ответ 4
Привязка — это не наследование прав доступа. Привязка каталога означает, что только владелец файла или владелец каталога может переименовать или удалить этот файл в каталоге, несмотря на то, что разрешения говорят об обратном. Таким образом, 1777 на /tmp/.
В классическом Unix нет наследования прав доступа, основанного на файловой системе, только на umask текущего процесса. В *BSD или Linux с setgid на каталоге групповое поле вновь созданных файлов будет установлено таким же, как и в родительском каталоге. Для чего-то большего вам нужно изучить ACL, с ACL «по умолчанию» на каталогах, которые позволяют вам иметь наследуемые разрешения. Вы должны начать с определения: * какие пользователи имеют доступ к системе * , какова ваша модель угроз.
Например, если вы занимаетесь веб-хостингом с несколькими клиентами и не хотите, чтобы они видели файлы друг друга, то вы можете использовать общую группу «webcusts» для всех этих пользователей и режим каталога 0705. Тогда файлы, обслуживаемые процессом веб-сервера (не в «webcusts»), будут видеть Other perms и будут разрешены; клиенты не смогут видеть файлы друг друга, а пользователи смогут работать со своими собственными файлами. Однако это означает, что , когда вы разрешаете CGI или PHP, вы должны убедиться, что процессы запускаются от имени конкретного пользователя (хорошая практика в любом случае для нескольких пользователей на одном хосте, для отчетности). В противном случае клиенты могут испортить файлы друг друга, поручив это CGI.
Однако если пользователь, выполняющий веб-сайт, совпадает с владельцем сайта, то возникают проблемы с невозможностью защитить контент от злоумышленников в случае дыры в безопасности скрипта. Именно в этом случае выделенные хосты выигрывают, так как вы можете иметь пользователя времени выполнения, отличного от владельца статического контента, и не беспокоиться о взаимодействии с другими пользователями.
Ответ 5
Владельцем файла должен быть тот, кто его создает, а группа должна быть www-data. Режим для каталогов/файлов в общем случае будет 755/644. Если для каталогов и файлов группе нужен доступ на запись, то режим будет 775/664. Предположим, что paddy является разработчиком. В целом это дает следующее:
chown -R paddy:www-data /var/www/websiteindevelopment
chmod -R 755 /var/www/websiteindevelopment
chmod -R 775 /var/www/websiteindevelopment/directorywritablebygroup
find /var/www/websiteindevelopment -type f -perm 755 -print -exec chmod 644 <> \;
find /var/www/websiteindevelopment -type f -perm 775 -print -exec chmod 664 <> \;
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Пользователь и группа www-data
После установки Apache нужно установить правильные права доступа для пользователей и групп. В этом нам помогут команды chown (изменить владельца) и chmod (изменить права доступа). Рассмотрим эти команды, а потом установим владельца для директории /var/www и права доступа к ней.
В Linux существует всего три вида прав — право на чтение ( read ), запись ( write ) и выполнение ( execute ), а также три категории пользователей, к которым они могут применяться — владелец файла ( user ), группа владельца ( group ) и все остальные ( others ).
Команда chmod
Изменяет прав доступа к файлу или директории.
chmod [опции] ВладелецГруппаДругие файл(ы)
- Опция -R позволяет рекурсивно изменять права доступа для каталога
- Владелец — права доступа в числовом виде для владельца
- Группа — права доступа в числовом виде для группы
- Другие — права доступа в числовом виде для других
Команда chown
Изменяет владельца и/или группу файла или директории.
chown [опции] владелец[:группа] файл(ы)
Опция -R — позволяет рекурсивно изменять владельца каталога.
Исходные данные
После установки web-сервера
- Apache запущен под пользователем и группой www-data
- Директории виртуальных хостов расположены в /var/www
Нам нужно обеспечить минимальные права для web-сервера (чтение директорий и файлов), чтобы он мог работать. И предоставить необходимые права на создание, редактирование и удаление файлов и директорий разработчику.
Создадим пользователя developer и назначим ему основную группу www-data :
$ sudo useradd -m -s /bin/bash -g www-data developer
Зададим пароль для нового пользователя:
$ sudo passwd developer Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён
Изменяем владельца
Устанавливаем владельца и группу для всех директорий /var/www :
$ sudo find /var/www -type d -exec chown developer:www-data <> \; -print /var/www /var/www/html /var/www/host1.loc /var/www/host2.loc
Устанавливаем владельца и группу для всех файлов /var/www :
$ sudo find /var/www -type f -exec chown developer:www-data <> \; -print /var/www/html/index.html /var/www/host1.loc/index.php /var/www/host2.loc/index.php
Здесь можно обойтись одной командой (но с двумя нагляднее):
$ sudo chown -R developer:www-data /var/www
Устанавливаем права
Устанавливаем права для всех директорий /var/www :
$ sudo find /var/www -type d -exec chmod 755 <> \; -print /var/www /var/www/html /var/www/host1.loc /var/www/host2.loc
- Пользователь developer (разработчик) имеет право на чтение и запись директорий, потому что является их владельцем
- Пользователь www-data (web-сервер) имеет право на чтение директорий, потому что принадлежит к группе www-data
Устанавливаем права для всех файлов /var/www :
$ sudo find /var/www -type f -exec chmod 644 <> \; -print /var/www/html/index.html /var/www/host1.loc/index.php /var/www/host2.loc/index.php
- Пользователь developer (разработчик) имеет право на чтение и запись файлов, потому что является их владельцем
- Пользователь www-data (web-сервер) имеет право на чтение файлов, потому что принадлежит к группе www-data
Для наглядности посмотрим на права всех файлов и директорий:
$ cd /var/www $ ls -laR .: итого 20 drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 . drwxr-xr-x 15 root root 4096 ноя 11 09:32 .. drwxr-xr-x 2 developer www-data 4096 ноя 11 09:32 html drwxr-xr-x 3 developer www-data 4096 дек 4 17:50 host1.loc drwxr-xr-x 2 developer www-data 4096 ноя 15 14:56 host2.loc ./html: итого 20 drwxr-xr-x 2 developer www-data 4096 ноя 11 09:32 . drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 .. -rw-r--r-- 1 developer www-data 10918 ноя 11 09:32 index.html ./host1.loc: итого 16 drwxr-xr-x 3 developer www-data 4096 дек 4 17:50 . drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 .. -rw-r--r-- 1 developer www-data 78 дек 4 17:34 index.php ./host2.loc: итого 12 drwxr-xr-x 2 developer www-data 4096 ноя 15 14:56 . drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 .. -rw-r--r-- 1 developer www-data 46 ноя 15 14:56 index.php
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- 1С:Предприятие (31)
- API (29)
- Bash (43)
- CLI (99)
- CMS (139)
- CSS (50)
- Frontend (75)
- HTML (66)
- JavaScript (150)
- Laravel (72)
- Linux (146)
- MySQL (76)
- PHP (125)
- React.js (66)
- SSH (27)
- Ubuntu (68)
- Web-разработка (509)
- WordPress (73)
- Yii2 (69)
- БазаДанных (95)
- Битрикс (66)
- Блог (29)
- Верстка (43)
- ИнтернетМагаз… (84)
- КаталогТоваров (87)
- Класс (30)
- Клиент (27)
- Ключ (28)
- Команда (68)
- Компонент (60)
- Конфигурация (62)
- Корзина (32)
- ЛокальнаяСеть (28)
- Модуль (34)
- Навигация (31)
- Настройка (140)
- ПанельУправле… (29)
- Плагин (33)
- Пользователь (26)
- Практика (99)
- Сервер (74)
- Событие (27)
- Теория (105)
- Установка (66)
- Файл (47)
- Форма (58)
- Фреймворк (192)
- Функция (36)
- ШаблонСайта (68)