Обновленное резюме
Каталог / var / www принадлежит, root:root
что означает, что никто не может его использовать, и он совершенно бесполезен. Поскольку нам всем нужен веб-сервер, который действительно работает (и никто не должен входить в систему как «root»), мы должны это исправить.
Только два объекта нуждаются в доступе.
PHP / Perl / Ruby / Python все нуждаются в доступе к папкам и файлам, так как они создают многие из них (то есть
/uploads/
). Эти языки сценариев должны работать под nginx или apache (или даже чем-то вроде FastCGI для PHP).Разработчики
Как они получают доступ? Я знаю, что кто-то где-то делал это раньше. Однако при наличии множества миллиардов веб-сайтов можно подумать, что по этой теме будет больше информации.
Я знаю, что 777 - полное разрешение на чтение / запись / выполнение для владельца / группы / другого. Так что, похоже, это не нужно корректно, поскольку дает случайным пользователям полные права.
Какие разрешения необходимо использовать, /var/www
чтобы:
- Контроль исходного кода, например, git или svn
- Пользователи в группе, такие как «сайты» ( или даже добавленные в «www-данные» )
- Сервера типа apache или lighthttpd
- И PHP / Perl / Ruby
можно ли там читать, создавать и запускать файлы (и каталоги)?
Если я прав, сценарии Ruby и PHP не «выполняются» напрямую, а передаются интерпретатору. Таким образом, нет необходимости в разрешении на выполнение файлов в /var/www
...? Таким образом, кажется , что правильное разрешение было бы chmod -R 1660
что сделало бы
- все файлы доступны для этих четырех объектов
- все файлы не могут быть выполнены по ошибке
- полностью заблокировать всех остальных из каталога
- установить режим разрешений «липкий» для всех будущих файлов
Это верно?
Обновление 1: я только что понял, что для файлов и каталогов могут потребоваться разные разрешения - я говорил о файлах выше, поэтому я не уверен, какими должны быть разрешения для каталогов.
Обновление 2: Структура папок /var/www
кардинально меняется, так как одна из четырех сущностей выше всегда добавляет (и иногда удаляет) папки и подпапки на несколько уровней. Они также создают и удаляют файлы, которые могут понадобиться другим 3 объектам для чтения / записи. Следовательно, разрешения должны выполнять четыре действия, указанные выше, как для файлов, так и для каталогов. Поскольку ни одному из них не нужно разрешение на выполнение (см. Вопрос о ruby / php выше), я бы предположил, что rw-rw-r--
разрешение - это все, что необходимо и полностью безопасно, поскольку эти четыре объекта управляются доверенным персоналом (см. # 2) и всеми другими пользователями на система имеет доступ только для чтения.
Обновление 3: это для персональных машин разработки и серверов частной компании. Нет случайных «веб-клиентов», как общий хост.
Обновление 4: эта статья от slicehost, кажется, лучше всего объясняет, что необходимо для настройки разрешений для вашей папки www. Тем не менее, я не уверен, какой пользователь или группа apache / nginx с PHP ИЛИ запускают svn / git и как их изменить.
Обновление 5: я (думаю) наконец нашел способ заставить все это работать (ответ ниже). Тем не менее, я не знаю, если это правильный и безопасный способ сделать это. Поэтому я начал щедрость. Человек, у которого есть лучший метод защиты и управления каталогом www, побеждает.
источник
Я не уверен, правильно ли это, но вот что я делаю на своем сервере:
Имейте в виду, что у вас должен быть включен бит выполнения для каталогов, чтобы вы могли перечислить содержимое.
источник
После дальнейших исследований кажется, что git / svn TOOLS НЕ являются проблемой, поскольку они работают так, как их использует пользователь. (Тем не менее, демоны git / svn - это другое дело!) Все, что я создал / клонировал с помощью git, имело мои разрешения, и был указан инструмент git,
/usr/bin
который подходит для этого тезиса.Разрешения Git решены.
Разрешения пользователей, по-видимому, можно решить, добавив всех пользователей, которым необходим доступ к каталогу www, в
www-data
группу, под которой работает apache (и nginx).Таким образом, кажется, что один ответ на этот вопрос выглядит так:
По умолчанию
/var/www
принадлежитroot:root
и никто не может добавлять или изменять файлы там.1) Изменить владельца группы
Сначала нам нужно изменить группу каталогов www, которая будет принадлежать "www-data" вместо "root" group
2) Добавить пользователей в www-данные
Затем нам нужно добавить текущего пользователя (и любого другого) в группу www-data
3) CHMOD www каталог
Измените права доступа, чтобы ТОЛЬКО владелец (root) и все пользователи в группе «www-data» могли rwx (чтение / запись / выполнение) файлы и каталоги ( никто другой даже не мог иметь к ним доступ ).
Теперь все файлы и каталоги, созданные любым пользователем, который имеет доступ (т. Е. В группе "www-data"), будут доступны для чтения / записи apache и, следовательно, php.
Это верно? А как насчет файлов, которые создают PHP / Ruby - могут ли пользователи www-data получить к ним доступ?
источник
Липкость не наследование разрешений. Прилипание к каталогу означает, что только владелец файла или владелец каталога может переименовать или удалить этот файл в каталоге, несмотря на то, что в разрешениях указано иное. Таким образом 1777 по / тмп /.
В классическом Unix отсутствует наследование разрешений на основе файловой системы, только на основе текущего процесса umask. В * BSD или Linux с setgid в каталоге поле группы вновь создаваемых файлов будет установлено так же, как поле родительского каталога. Для чего-то большего вам нужно взглянуть на ACL с ACL по умолчанию для каталогов, которые позволяют вам наследовать разрешения.
Вы должны начать с определения: * какие пользователи имеют доступ к системе * какова ваша модель угроз
Например, если вы делаете веб-хостинг с несколькими клиентами и не хотите, чтобы они видели файлы друг друга, тогда вы можете использовать общую группу «webcusts» для всех этих пользователей и режим каталога 0705. Затем файлы обслуживаются процесс веб-сервера ( не в "webcusts") увидит другие разрешения и будет разрешен; клиенты не могут видеть файлы друг друга, а пользователи могут связываться со своими файлами. Тем не менее, это означает, что в момент, когда вы разрешаете CGI или PHP, вы должны убедиться, что процессы запускаются от имени конкретного пользователя (в любом случае, это полезно для нескольких пользователей на одном хосте для обеспечения подотчетности). В противном случае клиенты могут связываться с файлами друг друга, заставляя CGI делать это.
Однако если пользователь времени выполнения веб-сайта совпадает с владельцем веб-сайта, у вас есть проблемы с невозможностью защитить контент от злоумышленников в случае дыры в безопасности в сценарии. Именно здесь выигрывают выделенные хосты, так что вы можете иметь пользователя во время выполнения, отличного от статического владельца контента, и вам не придется сильно беспокоиться о взаимодействии с другими пользователями.
источник
rename()
,unlink()
), только для действий над самим файлом (open()
). Это «обычное» поведение.Я считаю, что лучший способ сделать это - использовать Posix ACL. С ними удобно работать и они предлагают всю необходимую вам функциональность.
http://en.wikipedia.org/wiki/Access_control_list#Filesystem_ACLs
источник
Владельцем файла должен быть человек, который его создает, а в группе должны быть www-данные. Режим для каталогов / файлов тогда в целом 755/644. В то время как для каталогов и файлов группе необходим доступ для записи, мод - 775/664. Предположим, Пэдди является разработчиком. В целом это делает:
источник
В дополнение к ответу @ Xeoncross, я думаю, было бы хорошо настроить разрешения для файлов и каталогов отдельно.
Это позволит разработчикам создавать и изменять каталоги в / var / www. Что кажется важным, поскольку разработчикам может потребоваться создать дополнительные каталоги или удалить каталог, который больше не нужен.
Это также позволит разработчикам создавать и изменять файлы кода (читать HTML, файлы PHP и тому подобное). Но все равно разрешит доступ только для чтения всем остальным.
источник