Меню Рубрики

Установка apache права пользователя

Права доступа CHMOD для пользователей и групп в Apache

Недавно мне довелось прочесывать интернет в надежде найти подробную информацию о том, как правильно выставить права доступа для пользователей и групп в Apache с помощью chmod . Что мне удалось найти:

Основы

Есть три группы прав доступа к файлам/директориям, о которых вам стоит позаботиться:

  • Пользователь – что может делать владелец файла;
  • Группа – что могут делать пользователи отдельных групп;
  • Другие – что могут делать остальные пользователи.

У пользователей есть логины ( уникальные для каждого пользователя ). Пользователи могут быть частью группы.

Примечание: команда chmod принимает целые числа ( 0664 ), и каждая из цифр отвечает за определенные права доступа.

Сегодня я расскажу вам о том, как правильно использовать chmod-настройки . Chmod используются для изменения прав доступа к директории или файлу.

Флаги

chmod –R позволит рекурсивно пройтись по всей указанной директории и изменить права доступа для всех файлов и вложенных директорий.

Изменяем права доступа

Вы можете определять, для кого изменяете права доступа:

Вы можете добавлять или удалять права доступа при помощи следующих команд chmod :

  • + добавить права доступа;
  • — удалить права доступа.

Можно задавать следующие права доступа:

Эти знания можно использовать для настройки прав доступа в Apache :

  • Apache запущен как пользователь www-data в группе www-data ;
  • Корневой каталог сервера: /var/www .

Для начала

Нам нужно установить владельца/группу для корневого каталога ( и любых внутренних директорий и файлов ):

Нужно установить правильные права доступа для пользователей и групп. Запускаем несколько общих команд, которые закрывают доступ, а затем открываем доступ, насколько нам требуется.

Сначала сделайте так, чтобы никто кроме текущего пользователя ( www-data ) не имел доступа к содержимому директории web-root . Мы используем ‘ go ‘, поэтому команда будет направлена к группам и другим пользователям (‘ group ‘ и ‘ other ‘). Также мы используем ‘ — ‘ для отключения прав доступа. Затем используется параметр ‘rwx ‘, чтобы запретить чтение, запись и исполнение.

Далее нужно разрешить пользователям из той же группы ( и ‘other’ ) открывать директорию /var/www . Это делается без рекурсивного подхода. Мы указываем ‘ group ‘ и ‘ other ‘, но используем параметр ‘ + ‘, чтобы разрешить исполнение ( chmod ‘x’ ).

Далее изменяем права доступа всех директорий и файлов в корневом каталоге для той же группы ( www-data ). На случай, если в ней есть файлы:

Теперь нужно произвести некоторые « сбросы ». C помощью команд chmod сделайте так, чтобы только один пользователь мог осуществлять доступ к контенту:

Сделайте так, чтобы любой пользователь из той же группы мог читать/записывать и выполнять директории и файлы в корневом каталоге на сервере:

Лично я дал группе право записывать – это нужно для тех пользователей, которые редактируют контент. Выглядит это следующим образом:

Зачастую вам даже не придется проделывать все это, но данная статья вполне способна помочь разобраться.

Данная публикация представляет собой перевод статьи « User and Group permissions, with chmod, and Apache » , подготовленной дружной командой проекта Интернет-технологии.ру

источник

Установка и настройка сервера Apache

Apache — это популярнейший свободный веб-сервер. Состоянием на 2016 год он используется на 33% всех сайтов интернета, а это приблизительно 304 миллиарда сайтов. Этот веб-сервер был разработан в далеком 1995, как замена для популярного того сервера NCSA и исправил множество его проблем. Ходят слухи что его имя походит от a patchy, заплатка, так как он исправлял ошибки NCSA. Сейчас же, это кроссплатформенная программа, поддерживающая Windows, Linux и MacOS и обеспечивающая достаточную гибкость, настраиваемость и функциональность. Программа имеет модульную структуру, что позволяет расширять ее функциональность почти до бесконечности с помощью модулей.

Установить Apache в Linux можно с помощью нескольких команд, но программа предоставляет очень большое количество настроек, которые можно изменить, а также модулей, после включения которых она будет работать лучше. В этой статье будет рассмотрена установка и настройка Apache, в качестве основной системы мы будем использовать Ubuntu, но вы можете повторить эти действия в любом другом дистрибутиве. Будет рассмотрена не только установка самой программы, но и способы ее настройки, настройка виртуальных хостов apache, а также самые полезные модули.

Установка Apache

На данный момент, самая новая версия программы 2.4 поэтому и будет рассмотрена настройка apache 2.4. Как я уже говорил, в Linux программа устанавливается буквально в пару команд. Для установки в Ubuntu сначала обновим систему до самой новой версии:

sudo apt update
$ sudo apt upgrade

В других дистрибутивах пакет программы называется либо так, либо httpd и его установка у вас не вызовет трудностей.

После завершения установки нужно добавить веб-сервер в автозагрузку, чтобы не запускать его вручную после включения компьютера:

Читайте также:  Установка лобового стекла 2121

sudo systemctl enable apache2

Настройка Apache

Уже прошло то время, когда конфигурация Apache хранилась в одном файле. Но оно и правильно, когда все распределено по своим директориям, в конфигурационных файлах легче ориентироваться.

Все настройки содержатся в папке /etc/apache/:

  • Файл /etc/apache2/apache2.conf отвечает за основные настройки
  • /etc/apache2/conf-available/* — дополнительные настройки веб-сервера
  • /etc/apache2/mods-available/* — настройки модулей
  • /etc/apache2/sites-available/* — настойки виртуальных хостов
  • /etc/apache2/ports.conf — порты, на которых работает apache
  • /etc/apache2/envvars

Как вы заметили есть две папки для conf, mods и site. Это available и enabled. При включении модуля или хоста создается символическая ссылка из папки available (доступно) в папку enable (включено). Поэтому настройки лучше выполнять именно в папках available. Вообще говоря, можно было бы обойтись без этих папок, взять все и по старинке свалить в один файл, и все бы работало, но сейчас так никто не делает.

Сначала давайте рассмотрим главный файл конфигурации:

Timeout — указывает как долго сервер будет пытаться продолжить прерванную передачу или прием данных. 160 секунд будет вполне достаточно.

KeepAlive On — очень полезный параметр, позволяет передавать несколько файлов, за одно соединение, например, не только саму html страницу, но и картинки и css файлы.

MaxKeepAliveRequests 100 — максимальное количество запросов за одно соединение, чем больше, тем лучше.

KeepAliveTimeout 5 — таймаут соединения, обычно для загрузки страницы достаточно 5-10 секунд, так что больше ставить не нужно, но и рвать соединение раньше чем загрузились все данные тоже не нужно.

User, Group — пользователь и группа, от имени которых будет работать программа.

HostnameLookups — записывать в логи вместо ip адресов доменные имена, лучше отключить, чтобы ускорить работу.

LogLevel — уровень логирования ошибок. По умолчанию используется warn, но чтобы логи заполнялись медленнее достаточно включить error

Include — все директивы include отвечают за подключение рассмотренных выше конфигурационных файлов.

Директивы Directory отвечают за настройку прав доступа к той или иной директории в файловой системе. Синтаксис здесь такой:

Здесь доступны такие основные опции:

AllowOverride — указывает нужно ли читать .htaccess файлы из этой директории, это такие же файлы настроек и таким же синтаксисом. All — разрешать все, None — не читать эти файлы.

DocumentRoot — устанавливает из какой папки нужно брать документы для отображенияа пользователю

Options — указывает какие особенности веб-сервера нужно разрешить в этой папке. Например, All — разрешить все, FollowSymLinks — переходить по символическим ссылкам, Indexes — отображать содержимое каталога если нет файла индекса.

Require — устанавливает, какие пользователи имеют доступ к этому каталогу. Require all denied — всем запретить, Require all granted — всем разрешить. можно использовать вместо all директиву user или group чтобы явно указать пользователя.

Order — позволяет управлять доступом к директории. Принимает два значения Allow,Deny — разрешить для всех, кроме указанных или Deny,Allow — запретить для всех, кроме указанных. Теперь мы можем запретить доступ к директории для всех: Deny from all, а затем разрешить только для приложения от losst.ru: Allow from losst.ru.

Здесь все эти директивы не используются, поскольку нас устраивают значения по умолчанию, но вот в файлах .htaccess они могут быть очень полезны.

У нас остался файл /etc/apache2/ports.conf:

В нем только одна директива, Listen, которая указывает программе на каком порту нужно работать.

Последний файл /etc/apache2/envvars, его вы вряд ли будете использовать, в нем указанны переменные, которые можно использовать в других конфигурационных файлах.

Дальше поговорим немного о htacess. Совсем немного.

Настройка сервера Apache через htaccess

Файлы .htaccess позволяют настраивать веб-сервер на Ubuntu для поведения в определенной директории. Все инструкции, указанные в этом файле выполняются как бы они были обвернуты в тег если бы находились в основном файле.

Важно заметить, что для того, чтобы сервер читал инструкции из .htaccess настройки для этой папки в основном файле или файле виртуального хоста не должны содержать AllowOverride None, чтобы могли работать все настройки нужно AllowOverride All.

А в остальном, здесь может выполняться любая настройка сервера apache, от включения модулей, до обычного изменения доступа к папке. Поскольку все параметры мы уже рассмотрели просто приведем пару примеров:

Order Deny,Allow
Deny from all

Запрещает всем доступ к этой папке, важно применить, для папок с конфигурацией. Чаще всего .htaccess используется для работы с модулем mod_rewrite, который позволяет изменять запросы на лету:

RewriteEngine on
RewriteRule ^product/([^/\.]+)/?$ product.php? >

Но это очень обширная тема и выходит за рамки этой статьи.

Настройка модулей Apache

Как я уже говорил, Apache — модульная программа, ее функциональность можно расширять с помощью модулей. Все доступные модули загрузчики и конфигурационные файлы модулей находятся в папке /etc/apache/mods-available. А активированные в /etc/apache/mods-enable.

Читайте также:  Установка mac для чайников

Но вам необязательно анализировать содержимое этих папок. Настройка Apache 2.4 с помощью добавления модулей выполняется с помощью специальных команд. Посмотреть все запущенные модули можно командой:

Включить модуль можно командой:

После включения или отключения модулей нужно перезагрузить apache:

sudo systemctl restart apache2

Во время выполнения одной из этих команд создается или удаляется символическая ссылка на файл модуля с расширением load в директории mods-available. Можете посмотреть содержимое этого файла, там только одна строка. Например:

Это к тому, что активировать модуль можно было просто добавив эту строчку в файл apache2.conf. Но принято делать именно так, чтобы избежать путаницы.

Настройки модулей находятся в той же папке, только в файле с расширением .conf вместо load. Например, посмотрим настройки того же модуля для сжатия deflate:

Файлы в папке conf-available, это такие же модули, только они установлены отдельно от apache, это может быть конфигурационные файлы для включения модуля php или любого другого языка программирования. Здесь работает все точно так же, только команды для включения и отключения этих модулей немного другие:

Как вы убедились, включать модули очень просто. Давайте включим несколько необходимых, но не включенных по умолчанию модулей:

sudo a2enmod expires
$ sudo a2enmod headers
$ sudo a2enmod rewrite
$ sudo a2enmod ssl

Модули expires и headers уменьшают нагрузку на сервер. Они возвращают заголовок Not Modified, если документ не изменился с последнего запроса. Модуль expiries позволяет устанавливать время, на которое браузер должен кэшировать полученный документ. Rewrite позволяет изменять запрашиваемые адреса на лету, очень полезно при создании ЧПУ ссылок и т д. А последний для включения поддержки шифрования по SSL. Не забудьте перезагрузить apache2 после завершения настроек.

Настройка виртуальных хостов Apache

Было бы не совсем удобно, если на одной физической машине можно было размещать только один сайт. Apache может поддерживать сотни сайтов на одном компьютере и выдавать для каждого из них правильное содержимое. Для этого используются виртуальные хосты. Сервер определяет к какому домену приходит запрос и отдает нужное содержимое из папки этого домена.

Настройки хостов Apache расположены в папке /etc/apache2/hosts-available/. Для создания нового хоста достаточно создать файл с любым именем (лучше кончено с именем хоста) и заполнить его нужными данными. Обернуть все эти параметры нужно в директиву VirtualHost. Кроме рассмотренных параметров здесь будут использоваться такие:

  • ServerName — основное имя домена
  • ServerAlias — дополнительное имя, по которому будет доступен сайт
  • ServerAdmin — электронная почта администратора
  • DocumentRoot — папка с документами для этого домена

ServerName test.site
ServerAlias www.test.site
ServerAdmin webmaster@localhost
DocumentRoot /var/www/test.site/public_html
ErrorLog $/error.log
CustomLog $/access.log combined

Виртуальные хосты, как и модули нужно активировать. Для этого есть специальные утилиты. Чтобы активировать наберите:

Здесь test.site — имя файла виртуального хоста. Для отключения тоже есть команда:

Настройка виртуальных хостов Apache завершена и на публичном сервере это все бы уже работало, но если вам нужна настройка Apache на домашней машине, то вы ваш новый сайт не откроется в браузере. Браузер не знает такого сайта. И откуда ему знать? DNS службы не могут ничего сообщить об этом доменном имени. Но в системе Linux мы можем сами указать ip адреса для доменных имен в файле /etc/hosts. Поэтому добавляем в конец файла такие строки:

127.0.0.1 test.site
127.0.0.1 www.test.site

Вот, ну теперь будет работать, открывайте браузер, проверяйте.

Выводы

Вот и все. Установка и настройка Apache linux завершена, вы можете использовать программу для размещения ваших сайтов. Более того, вы не просто настроили ее, вы разобрались со всеми подробностями и теперь знаете чуточку больше. Если у вас остались еще вопросы, пишите в комментариях!

источник

Безопасная настройка виртуального хостинга Debian + Apache2 + vsftpd

1. Постановка задачи

Дано
Debian-сервер «из коробки» (установлен из дистрибутива)

Задача
Организовать работу нескольких проектов на сервере, чтобы люди, которые ими занимаются, не имели доступа к соседним проектам:

  • Ограничить возможность обзора файловой системы определенной папкой для пользователя проекта.
  • Ограничить возможность запуска бинарников пользователями
  • Ограничить возможность открытия портов на сервере (нужно как-то по другому сформулировать)
  • Автоматизировать добавление пользователя в систему: создание папки, конфига apache, пользователей mysql или postgres

2. Решение

  • 2.0 Обновление системы
  • 2.1 SSH
  • 2.2 Файловая система
  • 2.3 Apache
  • 2.3.1 Права пользователей [apache2-mpm-itk ]
  • 2.3.2 Отдельные tmp для каждого сайта
  • 2.3.3 Sendmail
  • 2.4 FTP
  • 2.5 MySQL + Postgres
  • 2.6 Firewall
  • 2.7 chroot
  • 2.8 Автоматизация

2.0 Обновляемся

Ставим свежие версии пакетов. Вот мой список репозиториев:

2.1 Генерируем ключи для SSH

Дабы исключить возможность перехвата парольной фразы, мы сгенерируем rsa ключи для входа на сервер.

Обратите внимание — ключи генерируются на Вашей рабочей машине, а затем публичный ключ заливается на сервер:

Читайте также:  Установка регенерации солевого раствора

Теперь мы сможем заходить на сервер — по ключу, с паролем или без — в зависимости от Ваших настроек. Хочется подчеркнуть, что если Вы сгенерировали ключи без пароля, то уровень безопасности сервера эквивалентен уровню безопасности Вашего секретного ключа на Вашей машине. Будьте внимательны и берегите ключ.

2.2 Файловая система. Права пользователей.

Поговорим про файловую систему. Я предлагаю выделить для наших сайтов отдельную папку в корне файловой системы.

Домашние папки наших пользователей будут такого вида:

  • /web/site1
  • /web/site2

Создаем пользователей и расставляем права:

Пользователь site1 будет иметь домашнюю папку /web/site1. Ключ -m означает, что папка будет создана автоматически. -U — так же будет создана одноименная группа, куда пользователь будет помещен. Пользователь не будет иметь шелла. Все, что будет доступно из веба — будет находится в папке public_html. Если когда-нибудь захочется иметь поддомены — разместим их в папках рядом с www.

2.3 Apache

2.3.1 Права пользователей. Модификация Apache [apache2-mpm-itk]

Как нам известно, по умолчанию web-сервер apache работает от одного пользователя для всех сайтов, находящихся на сервере. А это означает, что, воспользовавшись web-шеллом, можно прочитать файлы соседних проектов.

Для исправления этого недоразумения нам понадобится установить модифицированную версию аpache. Пакет называется apache2-mpm-itk. Установив пакет, мы получим возможность в конфигах файла указывать, от какого пользователя и группы должен работать apache при обработке сайта.

Пользователь и группа задается строкой в конфиге:

В тоже время мы хотим, чтобы, используя web-шелл, нельзя было править файлы нашего проекта, кроме тех, на которыx стоят права o+w.

Для этого в нашем конфиге мы будем писать:

Таким образом apache сможет прочитать index.php, выполнить и отдать в браузер, но не сможет изменить его. А tmp.txt изменить сможет.
Важный момент — нужно запретить консоль у пользователя www-data

2.3.2 Отдельный tmp для каждого сайта

Предотвращаем инклуд сессий с соседнего сайта. + Запрещаем php выходить выше пользовательской домашней дирректории.

В конфиг нашего сайта нужно добавить диррективы open_basedir, upload_tmp_dir, session.save_path

Получаем такой минималистичный конфиг:

После создания конфига нужно сделать сайт активным с помощью команды:

А затем перечитать конфиги:

2.3.3 Sendmail

Почему я вынес Sendmail отдельным пунктом? Потому что по умолчанию он не работал. Пришлось повозится. Я расскажу самый простой способ. Чтобы php умел отправлять письма, проделываем следующие операции.

Для конфигурации Exim4 (по умолчанию в качестве Mail Transfer Agent используется именно он) существует пакет exim4-config. Воспользоваться им можно так:

После этого вам начнут задавать вопросы. На первый (Общий тип почтовой конфигурации) отвечаем:

  • интернет-сайт; прием и отправка почты напрямую, используя SMTP

А далее жмем Enter до конца настройки. Теперь все должно работать.

2.4 vsftpd

Теперь разберемся с FTP. Для работы был выбран vsftpd.

Говорим демону vsftpd перечитать конфиги:

2.5 MySQL + PostgreSQL

Создаем нового пользователя.

Меняем пароль на пользователя postgres:

После установки рутового пароля для пользователя postgres нам мнужно поправить конфиг. По умолчанию любой локальный пользователь может запустить psql с правами суперпользователя без ввода пароля. Исправляем.

В /etc/phppgadmin/apache.conf открываем доступ извне.

Говорим apache перечитать конфиги:

У постгрес есть один нюанс. Юзеры всегда видят названия соседних БД. Чтобы они не мозолили глаз нашим пользователям в phppgadmin, правим конфиг:

Пользователи создаются такой командой:

2.6 Firewall

В нашем случае цели просты — запретить злоумышленнику открывать порты. Поэтому решение будет простым — мы не будем вдаваться в нюансы правил iptables, а воспользуемся пакетом arno-iptables-firewall, который упростит нам жизнь. Он сам спросит нас, что мы хотим во время установки. Ответы на вопросы ниже.

2.7 Запуск Apache2 в chroot среде [посредством libapache2-mod-chroot]

Что такое chroot’инг? Это создание специальной среды (песочницы), изолированной от окружения. Скажем, процесс apache не должен иметь доступа к папкам home. В тоже время в изолированную среду нужно брать все, что нужно для работы. Самый простой способ — это воспользоваться libapache2-mod-chroot.

Chroot’инг — это интересная тема с кучей своих проблем, связанных с тем, что помимо apache обычно требуется куча дополнительных программ, библиотек и средств для работы. Поэтому я не буду делать статью в статье, и отправлю Вас на отличный материал по этой теме. Используйте программу ldd и берите с собой в изолированное окружение все, что нужно именно Вам.

2.8 Автоматизация добавления новых пользователей

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

источник

Добавить комментарий