• Nginx почему может не работать sni?

    Lynn
    @Lynn
    nginx, js, css
    https://nginx.org/ru/docs/http/request_processing....

    Сначала nginx выбирает серверный блок исходя из IP и порта на которые пришёл запрос отдавая предпочтение наиболее точному совпадению. И только если таких блоков несколько, тогда он будет выбирать из них по директиве server_name.

    В вашем случае есть два блока, в одном написано listen 1.1.1.1:443;, а во втором listen 443; (что эквивалентно listen *:443;).

    Если запрос приходит на IP 1.1.1.1 порт 443, то всегда выберется первый блок.

    Решение простое, либо дописывать IP во второй блок, либо убирать из первого.
    Ответ написан
    Комментировать
  • Мониторинг сервера с уведомлениями в телеграмм?

    Zoominger
    @Zoominger Куратор тега Системное администрирование
    System Integrator
    1 комментарий
  • Как перевести сотрудников на удаленку?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Помогите решить проблему реальными инструментами
    мозг - не дам!
    Ответ написан
    Комментировать
  • Можно ли спасти "сыпящийся" диск?

    @asdz
    Да выкинь к черту
    Ответ написан
    Комментировать
  • Как обезопаситься от шеллов на сервере?

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

    Например, структура может быть такая:
    /var/www
      + toster.ru
      |  + site
      |  + sessions
      |  + temp
      + example.com
      |  + site
      |  + sessions
      |  + temp
      + остальные сайты


    В папке site расположены скрипты сайта. Обычно эта папка (или одна из вложенных) является document root сайта.

    В sessions находятся файлы сессий посетителей сайта. Если их не разделять, то взлом одного сайта автоматически дискредитирует сессии всех пользователей остальных сайтов. То есть, взломав example.com, можно стырить сессию администратора toster.ru. Путь к этой папке настраивается директивой session.save_path.

    А в temp находятся временные файлы, загружаемые пользователями через html формы (директива upload_tmp_dir). Туда же неплохо направить и остальные временные файлы, генерируемые функциями tmpfile(), tempnam(), самостоятельным образом (используя результат функции sys_get_temp_dir() для построения пути) или любой другой функцией, которая использует системную временную директорию. К сожалению, директива sys_temp_dir, ответственная за это, появилась только в php 5.5.0. Если у вас более ранняя версия, тогда нужно учитывать момент, что сайты могут ходить в /tmp и нельзя блокировать доступ к этой папке.

    ---

    Далее необходимо настроить нормальные права доступа. Часто в интернете можно видеть советы "делайте chmod 777 на всё". Так делать нельзя. Подобные права доступа как раз наихудшим образом сказываются на безопасности, потому что дают возможность отредактировать любой скрипт на сайте и встроить маленький бэкдор в самый незаметный скрипт, принадлежащий CMS. Надежно избавиться от такого довеска можно будет только полной переустановкой CMS. Или можно загнать весь сайт в систему контроля версий, как предложил Максим Гречушников, и одной командой узнать какие скрпиты были заражены. Тем не менее, одно другое не исключает. Система контроля версий позволит выявить заражение постфактум, а нормальные права не дадут возможности заразить файл в принципе.

    Я рекомендую на папки устанавливать права 755, а на файлы 644. При этом, владельцем всех папок и файлов должен быть кто угодно, но не пользователь, из-под которого запущен веб-сервер или php (например, пользователь, под которым вы сами заходите на сервер по ssh). Но такие права на всё устанавливать тоже нельзя. Сайт в процессе своей работы может генерировать свои временные файлы (например, кешировать что-то в файл, компилировать шаблоны, хранить какие-нибудь настройки), поэтому для папок, в которые сайт может что-то записать, права должны быть другие. Вот здесь уже можно ставить 777 для папок и 666 для файлов. Это довольно кропотливая работа, потому что у каждого сайта (особенно если они на разных CMS) свои папки и часто определение таких папок нетрвиально.

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

    И ещё автоматическое обновление сайта перестанет работать. Если CMS позволяет обновить себя через кнопку в веб-интерфейсе админки, то такое обновление не будет работать, так как права доступа не разрешают веб-серверу модифицировать скрипты. Обновлять скрипты теперь можно только вручную от имени пользователя, которому принадлежат все файлы. Безопасность и удобство - разные концы одной палки.

    Даже с учётом всех недостатков - нормально настроенные права доступа на файлы и папки значительно сокращают вектор возможных атак. Так что обязательно разберитесь с этим вопросом.

    ---

    После раскидывания сайтов по своим папкам и настройки прав, необходимо ограничить доступ сайтов друг к другу. Проще всего это сделать настройкой php директивы open_basedir. Эта директива определяет список директорий, внутри которых (а так же во всех вложенных папках) скрипты могут читать и писать. Доступ за пределы этих директорий будет пресекаться. То есть нужно каждому сайту прописать в open_basedir путь к своей папке и к /tmp (если версия php < 5.5.0 и нельзя установить sys_temp_dir).

    Для Apache с mod_php конфигурация прописывается в httpd.conf:

    <VirtualHost *:80>
      ServerName example.com
      php_admin_value open_basedir /var/www/example.com/:/tmp/
      php_admin_value upload_tmp_dir /var/www/example.com/temp/
      php_admin_value sys_temp_dir /var/www/example.com/temp/
      php_value session.save_path /var/www/example.com/sessions/
    </VirtualHost>


    Для php-fpm в конец php.ini файла вписывается специальная секция, определяющая индивидуальную конфигурацию для каждого сайта:

    [HOST=example.com]
    open_basedir /var/www/example.com/:/tmp/
    upload_tmp_dir /var/www/example.com/temp/
    sys_temp_dir /var/www/example.com/temp/
    session.save_path /var/www/example.com/sessions/
    
    [HOST=toster.ru]
    ; конфиг для toster.ru и т.д.


    У open_basedir есть недостатки:

    1. Замедление файловых операций, так как необходимо проверить вхождение каждого открываемого файла в список open_basedir. Если проекты не highload, то некритично.
    2. Есть варианты обхода. Но их далеко не всегда удаётся эксплуатировать. Тем более они закрываются со временем в новых версиях php.
    3. Realpath cache не работает вместе с включенной open_basedir.

    ---

    Есть вариант запускать каждый сайт от своего пользователя. В apache это делается опцией AssignUserId. В php-fpm - отдельной конфигурацией pool. Но в любом случае нужно для каждого сайта создавать не только отдельного юзера, но и группу. При этом права на основную папку сайта (/var/www/example.com) должны быть 750, а группа должна соответствовать той, от которой будет запускаться процесс apache (или пул php-fpm), ответственный за обслуживание сайта.

    Проще показать на примере. После имени файла я буду указывать права, владельца и группу в формате (права, владелец:группа)
    /var/www         (755, root:root)
      + toster.ru    (750, my_user:toster)
      |  + site      (755, my_user:toster)
      |  + sessions  (777, my_user:toster)
      |  + temp      (777, my_user:toster)
      + example.com  (750, my_user:example)
      |  + site      (755, my_user:example)
      |  + sessions  (777, my_user:example)
      |  + temp      (777, my_user:example)
      + остальные сайты - всё аналогично


    my_user - это пользователь, под которым ни в коем случае нельзя запускать веб-сервер и php. Это может быть ваш собственный пользователь, под которым вы заходите на сервер по ssh. В этом случае у вас будут все права на сайт, а у сайта только необходимый минимум.

    <VirtualHost *:80>
      ServerName example.com
      AssignUserId exapmle example
    </VirtualHost>
    <VirtualHost *:80>
      ServerName toster.ru
      AssignUserId toster toster
    </VirtualHost>


    Разумеется, в системе должны быть заранее созданы пользователи с именами toster, example и с одноимёнными основными группами.

    Вобщем, рекомендую более подробно ознакомиться с системой прав и пользователей в линуксе. Пригодится всегда.

    ---

    Более сложным и предпочтительным вариантом является упаковка каждого сайта в свой отдельный виртуальный контейнер lxc/docker. Я не смогу в двух словах описать как это добро настраивать, но эффект будет такой, как будто каждый сайт работает на своём собственном VPS сервере.

    ---

    Ещё немного про базу. Для доступа к базе у каждого сайта должен быть свой собственный логин с паролем. Причем, доступ должен ограничиваться исключительно той базой, в которой находятся данные сайта. И права должны быть не все подряд, а только SELECT, INSERT, UPDATE, DELETE. В редких случаях CMS может самостоятельно создавать таблицы для своих нужд в процессе своей работы (не в процессе первичной установки). В этом случае можно добавить права CREATE, ALTER, INDEX юзеру этого сайта. Иногда бывает в базе есть какие-то процедуры/функции. Для их вызова требуются права EXECUTE.

    ---

    Безопасность - дело большое и очень разнообразное. И уж точно не простое. Всё что я здесь написал - это далеко не полный список. Есть ещё настройки уровня операционной системы (особенно фаервол) и прочего установленного в системе софта. Так же отдельным пунктом идёт система мониторинга и оповещения, которые почему-то никто не делает - не считают нужным разбираться ещё и в этом. Так что если у вас нет хорошего админа в запасе, то проще будет заказать услугу администрирования прямо у того же хостера, у которого вы арендуете VPS. Или найти админа-фрилансера. Или же перевезти сайты на shared хостинг, где администрирование уже включено в ценник, да и сам переезд хостеры часто предлагают сделать бесплатно силами своих админов.
    Ответ написан
    Комментировать
  • Почему регулярка с кириллицей не работает?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Какой язык программирования? В PHP надо указывать модификатор u для работы со строками в UTF-8.
    Ответ написан
    1 комментарий
  • Как не дать скрипту выполняться, если другая его копия уже запущена?

    Melkij
    @Melkij
    PostgreSQL DBA
    flock -n путь_к_lock_файлу команда_запуска_вашего_скрипта

    Что есть вариация других опубликованных здесь ответов, но зато при сбое по какой-либо причине скрипт всё-таки будет запущен в следующий раз и не будет ждать пока вы сами удалите оставшийся lock файл.
    Ответ написан
    3 комментария
  • Какой правильный размер SWAP установить при 24 Gb RAM + SSD? Или отключить SWAP, используя лишь RAM?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    5e917acb9f920813243515.png
    Бонусом идёт то, что Windows не просто проставляет значение в соответствии с ОЗУ, а, через некоторое время, оптимизирует этот размер.5e91bcc9a1fde224438403.png
    Ответ написан
    1 комментарий
  • Какой правильный размер SWAP установить при 24 Gb RAM + SSD? Или отключить SWAP, используя лишь RAM?

    Там есть размер по выбору системы, чем он тебя не устроил?
    Ответ написан
    Комментировать
  • Почему Visual Studio так долго компилирует?

    mayton2019
    @mayton2019
    Bigdata Engineer
    С++ компилирует долго потому-что это один из самых сложных и много-проходных компиляторов. В одной из лекций Александреску упоминал о том что порядка 7 трансформаций переживает исходный код перед тем как соберется бинарник.

    Сравнение с Python - неудачно. Питон - нетипизированный и многие фазы вывода типов и оптимизаций он просто пропускает. И как следствие Питон вообще тормозной в рантайме.

    Тоесть сравнение такое - быстро запрягать но медлено ездить или наоборот.

    Если автор хочет по настоящему сравнить быстрые ЯП то надо сравнивать С++ с Rust/Go/Dlang. Они хотя-бы стоят в одной весовой категории.
    Ответ написан
    1 комментарий
  • Как обойтись без крона?

    Sanes
    @Sanes
    Написать сервис. Systemd посмотрите. В любом случае должен быть какой-то сервис. Ну или пинать его постоянно, снаружи или бесконечным циклом.
    Ответ написан
    Комментировать
  • Какая разница между базой в csv и sql?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    csv - формат файла, sql - язык запросов. Как их можно сравнивать? При желании можно и к csv-файлу написать sql-запрос.

    Но если говорить о хранении данных, то база (не обязательно даже реляционная, кстати) всё-таки оптимизирована под постоянную работу с ними, включая вставку/изменение/удаление/быстрый поиск, а csv - для статичных малоизменяемых файлов и больше как формат для переноса данных.
    Ответ написан
    Комментировать
  • Почему не доходят письма по SMTP?

    akelsey
    @akelsey
    А по существу:
    PTR - отвратительный ip-176-192-239-59.bb.netbynet.ru
    SPF - отсутствует: *** No text (TXT) records available for trainzcity.myftp.org
    Ну т.е. домен абсолютно не подготовлен быть сервером отправки сообщений.
    Ответ написан
    Комментировать
  • ДНС компьютера и роутера должны совпадать или нет?

    Jump
    @Jump
    Системный администратор со стажем.
    ДНС компьютера и роутера должны совпадать или нет?
    Нет.

    одним словом разные, то какие записи будут использованы в маршрутизации?
    Никакие. DNS используется исключительно для определения IP адреса по имени. и никак не используется в маршрутизации.

    Какой сервер днс я фактически использую при таких настройках?
    Наивысший приоритет имеет запись файла HOSTS. Ее смотрят в первую очередь.
    Если там нет нужной записи используется DNS сервер указанный в настройках сетевого подключения.

    А уж какой вы там сервер пропишите, тот и будет использоваться.
    Ответ написан
    Комментировать
  • ДНС компьютера и роутера должны совпадать или нет?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Не обязательно они должны совпадать. И DNS не используется в маршрутизации.
    Ответ написан
    Комментировать
  • Почему все онлайн-сервисы геолокации гонят такой бред?

    Jump
    @Jump
    Системный администратор со стажем.
    Это нормально.
    Адреса раздает RIPE, у него есть база данных.
    Например адрес x.x.x.x выдан ООО "Рога и Копыта" юридический адрес - Бостон.
    Эта компания передала этот адрес своей дочерней фирме ООО "Шкуры" зарегистрированной на багамских островах.
    В данный момент этот адрес выделен серверу этой компании который размещается в Новосибирском датацентре.

    У сервисов геолокации разные базы данных, у кого-то записан адрес формального владельца - Бостон.
    У другого сервиса в базе более актуальные данные - юридический адрес реального владельца на Багамах.
    У третьего сервиса в базе записан текущий адрес размещения сервера - Новосибирск.

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

    И какой все таки адрес должен выдавать сервис геолокации???

    Мораль - не стоит думать что сервис геолокации показывает реальный адрес размещения сервера с таким IP.
    Хотя во многих случаях данные совпадают.

    Бывает что один IP присвоен серверу который уже 30лет стоит по одному адресу.
    А бывает что один IP за день назначается трем различным серверам находящимся на разных континентах.
    С утра в Европе, к вечеру в Бангкоке, а ночью уже в Австралии.
    Ответ написан
    1 комментарий
  • Можно ли сделать отображение разделов дисков как в windows на linux mint?

    Zoominger
    @Zoominger
    System Integrator
    Можете создать каталог, в который накидать ярлыков на нужные разделы и представлять, что это "тот самый" Мой компьютер, как в Windows.
    Ответ написан
    1 комментарий
  • Почему в итоге получается неправильная MX-запись в DNS?

    Sanes
    @Sanes
    mx.yandex.net.
    Точка в конце. Без точки это поддомен.
    Ответ написан
    Комментировать
  • Почему к адресу сайта добавляется www, при наличии https?

    @granty
    Вот уже 20 лет, как www. всё ещё занимает умы вебмастеров. И плодят они кучу дублей страниц, а потом доблестно сражаются с ними с помощью редиректов и rel='canonical'. И пишут кучу лишнего кода, чтобы решить проблемы SOP/CORS и установки куков на поддомен с www.
    откуда взялся этот www

    Двадцать лет назад, World Wide Web был только одной маленькой частью Интернета, и самый быстрый PC был основан на 386 чипах. Они были не очень быстры и не могли выдерживать большую нагрузку, таким образом, была необходимость размещать различные «части» Интернета на отдельных машинах.
    Например, сервер Apache размещался на одном компьютере, почтовый сервер на другом, и сервер FTP на ещё одном. Каждый из компьютеров отзывался на различный адрес IP, но на то же самое имя домена. Внутри этого доменного имени компьютеры дифференцировались по предоставляемому сервису (что назвалось тогда, "именем машины"). Таким образом, имена серверов в Интернет начинались с «имени машины» по предоставляемому ей сервису: www.domain.ru, mail.domain.ru, и ftp.domain.ru. («Старожилы» Интернета, наверное помнят ещё и такой архаичный сервис, как gopher.domain.ru, в настройках IE он еще остался).

    Сегодняшние компьютеры, конечно, намного более мощны, и мы можем поместить все различные "части" наших услуг Internet в той же самой «коробке» (принцип Head&Sholders - «два в одном флаконе» был применён задолго до массового появления «перхоти» в России :)
    Действительно, мы часто устанавливаем несколько сотен доменов, каждый с его собственным набором сервисов (http, ftp, mail…), на тот же самый сервер. Поэтому в настоящее время приставка www является «антиквариатом» и может игнорироваться.

    Этот экскурс в Историю, возможно, представляется интересным, но единственная важная вещь из него - то, что технически www.domain.ru - точно так же как sub.domain.ru - считаются полностью различными объектами относительно domain.ru, но по причинам, изложенным выше, обычно www.domain.ru и domain.ru обычно должны показывать одну и ту же страницу, в отличие от sub.domain.ru.

    Не надоело возиться с этим атавизмом? Убрать www и забыть его, как страшный сон. В www уже давно нет никакого смысла, зачем тащить в светлое будущее этот старый чемодан без ручки?

    По уровню вашей диагностики - "сайт недоступен", возможны 2 варианта:
    - SSL сертификат создан только на www.domain.ru, поэтому domain.ru недоступен по https://
    - в настройках веб-сервера указан www.domain.ru и не указан domain.ru (выше ребята написали что посмотреть). Тогда domain.ru будет недоступен и по http:// и по https://
    Ответ написан
    Комментировать
  • Не понять регулярку?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Эта регулярка будет совпадать с текстом, начинающимся с открывающейся квадратной скобки, состоящий из одного или более любых символов вплоть до ближайшей закрывающей скобки.
    Вопросик нужен, чтобы плюсик был нежадным, то есть не сожрал закрывающуюся скобку тоже. По умолчанию + и * жадные, то есть сожрут как можно больше символов, но чтобы в целом выражение сматчилось.
    Если ваш текст "12[34]56[78]90", то жадная регулярка (без вопросика) найдёт "[34]56[78]", а не жадная найдёт "[34]" и "[78]".
    Ответ написан
    Комментировать