Привет все и вся
Колдую вот с правами и владельцем, не пойму как правильно сделать. Делаю сервер на Дебиане. По разным статьям насобирал инфы.
Хочу уточнить что и как делать правильно. В принципе сервер работает и сайт крутится, но возникают проблемы с правами.
Итак, имеем:
есть сервер
есть один юзер /home/igor
есть два сайта - s1 и s2, то есть
/var/www/html/s1
/var/www/html/s2
Ну базу я так создал:
CREATE DATABASE lp CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON lp.* TO ‘lpl’@‘localhost’ IDENTIFIED BY ‘1234’ WITH GRANT OPTION;
Возникли вопросы:
надо ли ещё создавать пользователей? Например /home/s1
правильно ли указан владелец chown igor:igor /var/www/html/s1
и тут не уверен chown -R igor:www-data /var/www/html/s1
Отдельный пользователь для например веб-сервера нужен для некоторого улучшения безопасности: чтобы если будет найдена какая-то уязвимость в веб-сервере, то у злоумышленника не будет возможности выполнять команды от рута и он не сможет полностью захватить сервер.
Большое спасибо. Да, тогда буду делать отдельного юзера для каждого сайта. К ftp это тоже относится? Я тут пока не вник что к чему, но догадываюсь что тут тоже надо делать отдельных юзеров.
Про права доступа… Ну например иногда не могу в Filezila поменять 755 на 777, приходится лезть в консоль и вручную вбивать путь и указывать права. Иногда шаманю через домашнюю папку, закачиваю туда cms, а потом в нужную папку кидаю. Кароче, каша-малаша )
Про docker - погляжу что это такое. Но постоянно вижу как одна статья бродит по всем блогам, и всем похрен, что статья написана ботаником, и такие же ботаники массово копируют ошибки. Меня как-то заинтересовал перенос БД на другое место. Делаю как написано, проверяю, и хана. Долго не мог понять в чем прикол. А оказалось что написано с ошибкой - вместо /var/lib/mysql было написано /var/lib/mysql/mysql (два раза mysql).
А владелец правильно указан? То есть игорьдвоеточиеввв?
Я говорил о том, что сам процесс веб-сервера (apache httpd, nginx, …) должен работать не из под рута. Но это вроде бы так по умолчанию обычно и сделано.
А зачем он?
Файлы по SSH перекидывать можно (scp, …).
Код сайта лучше хранить в Git репозитории, редактировать локально, на сервер загружать либо например (самое простое, для начала) через git pull вручную на сервере, либо настроить, чтоб автоматически при push в определенную ветку (master, …).
Про ftp - да, можно и по ssh, но я решил потом не лазить на сервер, а сделать закачку фоток по ftp.
Поскольку я решил сделать каждому сайту своего юзера, то столкнулся с вопросом. Надо создать имя 100. Но adduser отказался делать с таким именем, предложил поменять правила. Зато useradd 100 сработало. Вот и возник вопрос - либо так оставить, хотя советуют adduser, либо покопаться в правилах, чтобы сработало adduser 100 ?
Да, как делать сервак для одного сайта понятно, а вот для нескольких сайтов уже многое умалчивается. Есть гений, который сайты на Debian 7 перенес в папку /home (типа для безопасности), не знаю не знаю…
Some commands (eg chown ) can accept either a username or a numeric user ID, so allowing all-numeric usernames would break that.
A rule to allow names that start with a number and contain some alpha was probably considered not worth the effort; instead there is just a requirement to start with an alpha character.
А что за фотки? Откуда они и для чего на сервере?
Вручную перекидывать по фтп это ж всё равно “лазить” )
В зависимости от задачи я б поискал другие способы, автоматически синхронизировать чем-нибудь и т.д. Например Syncthing интересная и простая в использовании штука.
Ммм… похоже что да. Ну как это называется тогда? Например, на сайте жму кнопку “Выбрать файл”, и кидаю на сайт с компа. В хтмл тег называется вроде бы инсерт, а вот ftp меня даже немного озадачил, но я сейчас в него не вникаю, и так обхожусь без него - кидаю по ssh.
Ну так от задачи зависит.
Но сейчас вряд ли для чего-либо есть смысл использовать FTP (точнее скорее FTPS, в FTP нет шифрования). Проще SCP/SFTP. GUI для них тоже полно: WinSCP, …
Привет.
Есть такой вопрос. Я сайт скинул в папку public_html как пишут в статьях. И получилась такая хрень. То ли это вывпавится при подцеплении к домену, то ли надо ковырять настройки апача и указывать путь. Как я понял, у меня получилось типа vk.com/public_html вместо просто vk.com
Или папку public_html удалить нафиг? Может надо было делать просто /var/www/html/test? Ибо работаю с Filezilla или mc, и как-будто она лишняя как камень.
Пример создания виртуального хоста
При необходимости установки собственных виртуальных хостов сделайте следующее:
Откройте файл “httpd-vhosts.conf”, и создайте в нём блок, примерно, следующего содержания:
<VirtualHost *:80>
Папка, в которой будет корень вашего хоста.
DocumentRoot “C:/apache/test.ru/www”
Домен по которому вы сможете обращаться к виртуальному хосту.
ServerName test.ru
Алиас (добавочное имя) домена.
ServerAlias www.test.ru
Файл, в который будут записываться ошибки.
ErrorLog “C:/apache/test.ru/error.log”
Файл журнала доступа к хосту.
CustomLog “C:/apache/test.ru/access.log” common
Затем в каталоге “apache”, создайте папку “test.ru” (прямо так, с точкой), в которой, в свою очередь, создайте папку “www”.
Следующий шаг создания виртуального хоста – это изменение файла C:\WINDOWS\system32\drivers\etc\hosts операционной системы. Откройте данный файл и добавьте в него две строки:
127.0.0.1 test.ru
127.0.0.1 www.test.ru
на сервере полный путь будет /var/www/html/test/public_html Вот думаю, может сайт из /var/www/html/public_html перенести в /var/www/html/ и не надо шаманить? Для первых проб вполне будет ок, а потом подправить при подцеплении домена.
Ну статьи разные, к примеру Драча или 8хост… Но повыше пример я понял, попробую перевести на линуксовый язык, то есть debian9.
Домену всё равно как папка называется.
По умолчанию да, вроде отдается из /var/www/html.
То есть mysite.com/image.jpg будет отдавать /var/www/html/image.jpg.
Если нужно отдавать несколько сайтов (доменов) из разных папок — надо настроить vhost'ы в конфиге.
Навело на мысль. К примеру, я сделал два тестовых сайтах:
/var/www/html/test1/public_html
и
/var/www/html/test2 (без /public_html)
Оба варианта работают, но второй вариант в адресной строке выглядит покрасивее. Возникает вопрос - а для чего делают папку /public_html? Для безопасности? Типа эту папку прикрыть правами типа 555 или 644 или что-то типа того… В статьях не видел ответа. Сейчас порылся про эту папку, она нужна, хотя путь получается длинный. Хмм?
Там нет /html. Ну и какого-то глубинного смысла тут тоже нет, просто такая структура папок для двух сайтов на одном сервере. В /var/www/example.com можно положить что-то еще, что не должно быть доступно пользователям сайта (.git, конфиги, скрипты вызываемые из public_html/index.php, …).
В результате виртуальный хост будет выглядеть так:
git clone https://github.com/laravel/laravel.git && cd laravel
ls -al
drwxrwxr-x 7 alex alex 4096 сен 30 12:22 app
-rwxrwxr-x 1 alex alex 1686 сен 30 12:22 artisan
drwxrwxr-x 3 alex alex 4096 сен 30 12:22 bootstrap
-rw-rw-r-- 1 alex alex 36639 сен 30 12:22 CHANGELOG.md
-rw-rw-r-- 1 alex alex 1608 сен 30 12:22 composer.json
drwxrwxr-x 2 alex alex 4096 сен 30 12:22 config
drwxrwxr-x 5 alex alex 4096 сен 30 12:22 database
-rw-rw-r-- 1 alex alex 220 сен 30 12:22 .editorconfig
-rw-rw-r-- 1 alex alex 778 сен 30 12:22 .env.example
drwxrwxr-x 8 alex alex 4096 сен 30 12:22 .git
-rw-rw-r-- 1 alex alex 111 сен 30 12:22 .gitattributes
-rw-rw-r-- 1 alex alex 163 сен 30 12:22 .gitignore
-rw-rw-r-- 1 alex alex 974 сен 30 12:22 package.json
-rw-rw-r-- 1 alex alex 1202 сен 30 12:22 phpunit.xml
drwxrwxr-x 2 alex alex 4096 сен 30 12:22 public
-rw-rw-r-- 1 alex alex 3738 сен 30 12:22 README.md
drwxrwxr-x 6 alex alex 4096 сен 30 12:22 resources
drwxrwxr-x 2 alex alex 4096 сен 30 12:22 routes
-rw-rw-r-- 1 alex alex 563 сен 30 12:22 server.php
drwxrwxr-x 5 alex alex 4096 сен 30 12:22 storage
-rw-rw-r-- 1 alex alex 181 сен 30 12:22 .styleci.yml
drwxrwxr-x 4 alex alex 4096 сен 30 12:22 tests
-rw-rw-r-- 1 alex alex 559 сен 30 12:22 webpack.mix.js
ls -al public/
-rw-rw-r-- 1 alex alex 0 сен 30 12:22 favicon.ico
-rw-rw-r-- 1 alex alex 603 сен 30 12:22 .htaccess
-rw-rw-r-- 1 alex alex 1731 сен 30 12:22 index.php
-rw-rw-r-- 1 alex alex 24 сен 30 12:22 robots.txt
Снаружи весь код приложения, конфиги, миграции БД, readme проекта и т.д.
В public только то, что надо просто отдавать напрямую: иконка, robots.txt. Можно положить туда статичные файлы типа картинок (логотип, …), иконок интерфейса. JS/CSS файлы скорее всего тоже туда попадут после сборки вебпаком.
И конфиг для Апача, что все остальные запросы надо перенаправлять в index.php.
index.php просто загружает autoload Composer’а из папки уровнем выше (../vendor/autoload.php) и передает управление приложению, которое анализирует запрос, в зависимости от адреса вызывает соотв. код для его обработки (контроллер) и т.д.
Это позволяет например использовать нормальные URL типа /shop/products/my-product/123, или тут /t/voprosy-po-web-serveru/1151/19 и /u/бармалей, вместо каких-нибудь /showthread.php?t=1151&p=19 и /member.php?u=123 на старых сайтах. (voprosy-po-web-serveru это необязательный Slug, запрос сработает и без него).
Ну а про безопасность тут разве что то, что в public не лежат секретные файлы и пользователи не смогут их получить при неправильной конфигурации веб-сервера разрешающей доступ к ним (ну и собственно не надо писать правила для запрета доступа к ним), чтоб не было как-то так: Около 390 тысяч сайтов оставили открытыми каталоги .git с кодом.