Кто-нибудь получил хорошее решение для обработки файлов в /var/www
? У нас работают виртуальные хосты на основе имен, а пользователь Apache 2 - www-data .
У нас есть два постоянных пользователя и root. Так что, когда возиться с файлами /var/www
, а не с ...
chown -R www-data:www-data
... все время, какой хороший способ справиться с этим?
Дополнительный вопрос: Насколько жестким вы тогда получаете разрешения?
Это всегда было проблемой в средах совместной разработки.
Ответы:
Попытка расширить ответ @ Zoredache , как я сам попробую :
Создайте новую группу (www-pub) и добавьте пользователей в эту группу.
groupadd www-pub
usermod -a -G www-pub usera
## необходимо использовать -a для добавления в существующие группыusermod -a -G www-pub userb
groups usera
## отображать группы для пользователяИзмените владельца всего в / var / www на root: www-pub
chown -R root:www-pub /var/www
## -R для рекурсивногоИзмените разрешения всех папок на 2775
chmod 2775 /var/www
## 2 = установить идентификатор группы, 7 = rwx для владельца (root), 7 = rwx для группы (www-pub), 5 = rx для мира (включая пользователя apache www-data)Бит установки идентификатора группы ( SETGID ) (2) приводит к тому, что группа (www-pub) копируется во все новые файлы / папки, созданные в этой папке. Другие варианты: SETUID (4) для копирования идентификатора пользователя и STICKY (1), который, я думаю, позволяет только владельцу удалять файлы.
Есть
-R
рекурсивная опция, но она не будет различать файлы и папки, поэтому вы должны использовать find , например так:find /var/www -type d -exec chmod 2775 {} +
Измените все файлы на 0664
find /var/www -type f -exec chmod 0664 {} +
Измените umask для ваших пользователей на 0002
Umask управляет разрешениями на создание файлов по умолчанию, 0002 означает, что файлы будут иметь 664, а каталоги 775. Установка этого параметра (путем редактирования
umask
строки внизу/etc/profile
в моем случае) означает, что файлы, созданные одним пользователем, будут доступны для записи другим пользователям в www- группа без необходимости вchmod
них.Проверьте все это, создав файл и каталог и проверив владельца, группу и права доступа
ls -l
.Примечание. Чтобы изменения в группах вступили в силу, вам необходимо выйти из системы!
источник
find
команду для этого. Один небольшой совет по производительности, который я хотел бы дать, если у вас много файлов / каталогов и вы используете GNU find, - это использовать+
вместо\;
так, чтобы команда работала с несколькими файлами, потому что «быстрее выполнить команду с максимально возможным количеством файлов» за раз, а не один раз для каждого файла. Это экономит время, необходимое для запуска команды каждый раз. " Кроме того, его легче набирать, поскольку он не требует обратной косой черты.Я не совсем уверен, как вы хотите настроить разрешения, но это может дать вам отправную точку. Там, вероятно, есть лучшие способы. Я предполагаю, что вы хотите, чтобы оба пользователя могли что-либо изменить в / var / www /
Это означает, что любой новый файл, созданный любым из ваших пользователей, должен иметь имя пользователя: www-pub 0664, а любой создаваемый каталог будет именем пользователя: www-pub 2775. Apache получит доступ для чтения ко всему через компонент «другие пользователи». Бит SETGID для каталогов заставит все созданные файлы принадлежать группе, которой принадлежит папка. Настройка umask необходима для того, чтобы убедиться, что бит записи установлен так, что любой в группе сможет редактировать файлы.
Что касается того, как хардкор я иду на разрешения. Это полностью зависит от сайта / сервера. Если есть только 1-2 редактора, и мне просто нужно, чтобы они не слишком сильно ломали вещи, тогда мне будет легко. Если бы бизнес требовал чего-то более сложного, я бы создал что-то более сложное.
источник
Я думаю, что вам может пригодиться POSIX ACL (списки контроля доступа). Они допускают более детальную модель разрешений по сравнению с моделью user: group: other. Я обнаружил, что их проще держать в голове, так как я могу быть более явным, а также могу установить поведение «по умолчанию» для ветви файловой системы.
Например, вы можете явно указать разрешения каждого пользователя:
Или вы можете сделать это на основе какой-то общей группы:
И, возможно, вы хотите оставить своего пользователя Apache доступным только для чтения
Справочные страницы:
Руководство
источник
www-data
на чтение / запись процесса apache ( например) на доступ только для чтения для всего сайта (через setfacl или chmod - или оба) -> Это, очевидно, заблокирует все записи (загрузка / обновление плагина / модуля со стороны браузера на большинство CMS например). Я полагаю, что многие популярные также проверяют только доступ на запись на уровне пользователя, а не на уровне группы. Вы все еще можете выполнить обновление, но обновления должны применяться вручную и любые пользовательские разрешения для папок записи (logs / temp / uploads / etc). Только чтение - это большая безопасность, если ваш сайт работает с ним .. в большинстве случаев это не так.Этот вопрос был задан еще раз , и, как обсуждалось в мета, нынешние передовые практики обеспечивают лучшие подходы, чем было доступно в 2009 году, когда это было задано. Этот ответ пытается дать некоторые текущие решения для безопасного управления средами совместной веб-разработки .
Для безопасного веб-сервера и совместной разработки есть больше, чем просто права доступа к файлам:
Иметь отдельного пользователя для каждого сайта, т.е. не обслуживать все сайты, использующие
www-data
. Это важно, поскольку в настоящее время Apache редко обслуживает только статические файлы содержимого, но работает на динамических веб-сайтах. Этот ответ концентрируется на PHP, так как это наиболее распространенный язык серверных сайтов, но те же принципы применимы и к другим.Если у вас есть проблема с безопасностью на одном сайте, она может распространиться на каждый сайт, который работает под тем же пользователем. Злоумышленник может видеть все, что видит пользователь, включая информацию для входа в базу данных, и изменять каждый сайт, на который у пользователя есть права на запись.
Используйте протокол передачи файлов SSH (SFTP). Хотя использование FTP следует отказаться от безопасности (так как он отправляет пароли и содержимое в виде простого текста), его безопасная замена SFTP также имеет функцию, которая является идеальным решением для совместной веб-разработки.
После того, как вы изолировали сайты и по одному пользователю на сайт, вам нужно предоставить доступ своим веб-разработчикам, о чем этот вопрос. Вместо того, чтобы давать им пароли для этих пользователей сайта - или получать доступ к файлам сайта, используя их личные учетные записи пользователей, как первоначально предлагалось - вы можете использовать ключи SSH для входа в систему.
Каждый разработчик может создать пару ключей и сохранить секретный ключ в секрете. Затем открытый ключ добавляется в
~/.ssh/authorized_keys
файл для каждой учетной записи пользователя веб-сайта, над которой работает разработчик. Это имеет много преимуществ для управления паролями и логинами:Каждый разработчик может иметь доступ к любому количеству веб-сайтов без необходимости запоминать или хранить все пароли, связанные с соглашением по каждому сайту.
Не нужно менять пароли и делиться ими каждый раз, когда кто-то покидает компанию.
Вы можете использовать очень надежные пароли или вообще отключить логин на основе пароля.
Используйте PHP-FPM . Это текущий подход для запуска PHP как пользователя. Создайте новый пул для каждого пользователя, т.е. по одному пулу на каждый сайт. Это лучше всего для безопасности и производительности, так как вы также можете указать, сколько ресурсов может потреблять один сайт.
Посмотрите, например, NeverEndingSecurity's Run php-fpm с отдельным user / uid и группой на linux . Существуют учебные пособия, такие как HowtoForge: « Использование PHP-FPM с Apache в Ubuntu 16.04» , в которых PHP-FPM не используется для повышения безопасности за счет разделения пользователей, и предлагается использовать один сокет FPM на сервере.
источник