Development

|

Как включить чувствительность к регистру в Windows 10

Начиная с билда 17107 в Windows 10 появилась возможность включать регистрозависимость определенным папкам. Это достигается с помощью установки флага FILE_FLAG_POSIX_SEMANTICS.
Текущее состояние можно посмотреть, вызвав следующую команду в PowerShell или cmd:

fsutil.exe file queryCaseSensitiveInfo {path}

Где {path} - это путь к директории, которую мы проверяем. Например, C:\Test.
Чтобы включить чувствительность к регистру в директории {path1} и выключить в директории {path2}, нужно вызвать следующие команды:

fsutil.exe file setCaseSensitiveInfo {path1} enable
fsutil.exe file setCaseSensitiveInfo {path2} disable

Чувствительность включается/выключается только в указанной директории и никак не меняется в дочерних. Все директории созданные через WSL наследуют значение флага родительской директории.
Более подробно можно прочесть в официальном блоге.

Для того чтобы рекурсивно выставить флаг директории и всем ее дочерним, необходимо в PowerShell (не в cmd!) перейти в корневую директорию и в вызвать следующую команду (источник):

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ enable}

PowerShell необходимо запускать от имени Администратора. Также еще немного полезной информации можно найти здесь.

|

youtube-dl - скачивание видео с youtube и других сервисов

Для установки переходим на http://rg3.github.io/youtube-dl/download.html (либо сюда) и следуем инструкциям.

Для того чтобы скачать видео в лучшем доступном качестве достаточно вызвать следующую команду:

youtube-dl https://www.youtube.com/watch?v=dQw4w9WgXcQ

Список всех поддерживаемых сайтов можно найти здесь - http://rg3.github.io/youtube-dl/supportedsites.html
Документация - https://github.com/rg3/youtube-dl/blob/master/README.md

|

Создание ключа для доступа по ssh

Авторизация по ключу с Linux

Если вы хотите с локального компьютера (или любой другой машины) авторизироваться на удаленном сервере (или любой другой машине) без ввода пароля, то для этого необходимо сначала на локльном компьютере сгенерировать ключи:

ssh-keygen

Будет создано 2 ключа, по дефолту это ~/.ssh/id_rsa (приватный) и ~/.ssh/id_rsa.pub (публичный). Скопируйте содержимое публичного ключа и добавьте его в файл ~/.ssh/authorized_keys на удаленном сервере.

|

Получение SSL-сертификата от Let's Encrypt

С декабря 2015 года появилась возможность получать сертификаты бесплатно и в автоматическом режиме. Для этого сначала переходим на сайт certbot и устанавливаем бота как указано в интструкции для вашей платформы.

Попытка получить сертификаты через плагин для nginx не увенчалась успехом, так что я воспользовался другим вариантом - webroot. Для него необходимо разрешить доступ к статическим файлам в директории .well-known. В nginx это можно сделать, к примеру, так:

location ^~ /.well-known {
    try_files $uri =404;
}

После чего запускаем команду на получение. К примеру, для доменов alhames.ru и www.alhames.ru, ссылающихся на директорию /var/www/alhames.ru/public, она будет выглядеть так:

certbot certonly --webroot -w /var/www/alhames.ru/public -d alhames.ru -d www.alhames.ru

По результату выполнения команды будут написаны пути для публичного fullchain.pem и приватного privkey.pem ключей, которые необходимо добавить в конфигурацию веб-сервера.

|

Ссылки на файлы и папки в Linux

# Создаем директорию для тестов и переходим в нее
mkdir /tmp/tests && cd /tmp/tests
# Создаем файл `src` и записываем в него "abc"
echo "abc" > src
# Создаем абсолютную символическую ссылку `link1` на файл `src`
ln -s /tmp/tests/src /tmp/tests/link1
# Создаем относительную символическую ссылку `link2` на файл `src`
ln -s src link2
# Создаем жесткую ссылку `link3` на файл `src`
ln src link3
# Первый столбик - inode - у файла и жестких ссылок он будет одинаков
# Второй столбик у символических ссылок начинается с "l"
# Третий столбик - количество жестких ссылок на файл
# В последнем столбике выводится имя файла либо имя ссылки и путь куда она ссылается (для символических ссылок)
ls -li
> total 0
> 44754521297123792 lrwxrwxrwx 1 alhames alhames 14 Jan  2 18:11 link1 -> /tmp/tests/src
> 14355223812434266 lrwxrwxrwx 1 alhames alhames  3 Jan  2 18:11 link2 -> src
> 13229323905596938 -rw-rw-rw- 2 alhames alhames  4 Jan  2 18:09 link3
> 13229323905596938 -rw-rw-rw- 2 alhames alhames  4 Jan  2 18:09 src
# К ссылкам можно обращаться также как и к файлу
cat link1
> abc
cat link2
> abc
cat link3
> abc
# Изменения отражаются на всех
echo "1" >> src
echo "2" >> link1
echo "3" >> link2
echo "4" >> link3
cat src
> abc
> 1
> 2
> 3
> 4
# Переименуем директорию в `tests1`
mv ../tests ../tests1
# Абсолютная символическая ссылка стала битой (подсветится красным)
# Отсносительная символическая и жесткая по-прежнему работают
ls -li
> total 0
> 44754521297123792 lrwxrwxrwx 1 alhames alhames 14 Jan  2 18:11 link1 -> /tmp/tests/src
> 14355223812434266 lrwxrwxrwx 1 alhames alhames  3 Jan  2 18:11 link2 -> src
> 13229323905596938 -rw-rw-rw- 2 alhames alhames 12 Jan  2 18:26 link3
> 13229323905596938 -rw-rw-rw- 2 alhames alhames 12 Jan  2 18:26 src
# Удаляем символические ссылки
rm link1 link2
# Если мы удалим источник, то все относительные ссылки сломаются, но жесткие по-прежнему будут работать
rm src
ls -li
> total 0
> 13229323905596938 -rw-rw-rw- 1 alhames alhames 12 Jan  2 18:26 link3
cat link3
> abc
> 1
> 2
> 3
> 4

P.S. Символическая ссылка указывает на путь к файлу или директории, а жесткая - на дескриптор inode. Как следствие, жесткие ссылки можно создавать только на файлы и только в пределах одной файловой системы.
Более подробно: Работа с жесткими и символическими ссылками

|

Установка и настройка https

Внимание!
Начиная с октября 2016 г. Mozilla Firefox и с марта 2017 г. Google Chrome не поддерживают сертификаты от StartCom.
Вместо них можно воспользоваться бесплатным сертификатом Let’s Encrypt.

Как получить бесплатный сертификат для сайта

Чтобы получить бесплатный сертификат для https идем на startssl.com и регистрируемся там. После регистрации вы получите файл сертификата для авторизации на сайте (*.p12), который необходимо импортировать. В Windows 10 для этого достаточно два раза кликнуть по файлу, после чего запуститься Certificate Import Wizard и сделает почти всю работу за вас. Раньше выдавали сертификат всего на один год, но последний раз (октябрь 2016 г.) сразу выдали на 4 года. В любом случае по истечении срока действия сертификата или его потери достаточно вновь ввести email, ввести код подтверждения (который придет на email) и создать новый сертификат.

После прохождения валидации вам предоставят возможность создавать сертификаты. Бесплатный тарифный план включает в себя неограниченное (наверное) число сертификатов Class 1 - это сертификаты Domain Validation (DV), которые требуют лишь подтверждения владения доменом. Самый простой способ подтвердить - запросить код подтверждения на почту webmaster@, после чего в один сертификат вы можете включить до 10 разных доменов. Wildcard не поддерживается, поэтому как минимум нужно будет указать домен с www и без, ну и остальные по вашему желанию. Эти сертификаты выдаются на год, но через год вы можете бесплатно сгенерировать новый и заменить старые файлы.

Как установить сертификат на сервер

Для установки сертификата вам потребуется файлик с приватным ключем *.key и файлик с сертификатом *.pem. Первый вы получаете в процессе генерации сертификата, второй можно скачать со страницы списка сертификатов. Далее вам понадобится рутовый сертификат, его скачиваем с этой страницы - startssl.com/root - Root 1 - StartCom Certification Authority - ca.crt(pem). После чего объединяем рутовый сертификат с нашим в один файлик:

cat alhames.ru.pem ca.crt > cert.pem

Далее устаналиваем приватный ключ:

openssl rsa -in alhames.ru.key -out priv.key
chmod 600 priv.key

Все готово, теперь остается лишь вписать необходимые настройки в nginx. Просто копипастим все оттуда, вкачестве ssl_certificate используем файлик cert.pem, а в качетсве ssl_certificate_key используем priv.key.

|

Настройка cron

Для запуска скриптов по расписанию необходимо отредактировать файл /etc/crontab. Параметры задачи разделяются пробелом и имеют следующую последовательность:

  • Минута (0 - 59)
  • Час (0 - 23)
  • День месяца (1 - 31)
  • Месяц (1 - 12 или jan,feb,mar,apr...)
  • День недели (0 - 6, где воскрксенье = 0, или sun,mon,tue,wed,thu,fri,sat)
  • Имя пользователя
  • Команда

Задачи из крона запускаются не чаще раза в минуту. Указание времени по сути имеет вид фильтра - как только текущее время под него попадает, то задача запускается.

  • Если указать *, то это будет соответствовать любому значению.
  • Если указать конкретное число/название - то задача будет запускаться когда это число будет совпадать с текущим. Например 10 20 * * * будет запускаться раз в день в 20:10.
  • Также можно указать диапазон через дефис. Например, 0-10 * * * * будет запускаться каждую минуту в началае часа 10 раз.
  • Также можно перечислить время, разделив его запятой: 0,1,2,3,4,5 * * * *.
  • Также можно указать интервал, разделив * на число. Если текущее время будет делиться без остатка, то задача запустится. Например */10 * * * * будет запускаться каждые 10 минут (в 00, 10, 20, 30...).

Для записи логов выполнения в файл дописываем в конце команды следующее: > /tmp/cron.log 2>&1, что значит что поток ошибок (stderr) будет перенаправлен в поток вывода (stdout), который в свою очередь запишется в файл /tmp/cron.log. Для дозаписи ">" заменяем на ">>".

Итак, чтобы запускать команду Symfony раз в сутки в 23:00 и логировать ее выполнение, пишем следующее:

0 23 * * * nginx /var/www/project/bin/console cache:clear >> /var/www/project/var/logs/cron.log 2>&1
|

Как изменить ssh-порт

Открываем на редактирование файл /etc/ssh/sshd_config:

nano /etc/ssh/sshd_config

Находим строку #port 22, убираем "#" и заменяем 22 на любой свободный порт. Лучше всего использовать диапазон от 2000 до 7000. Список свободных портов можно посмотреть на wikipedia.org. А еще 2222 тоже лучше не использовать :)

Также список открытых портов можно посмотреть следующей командой:

netstat -tupln | grep LISTEN

После чего перезапускаем ssh и конектимся по новому порту:

systemctl restart sshd

Особо это не защитит, но зато избавит от сообщения аля

There were 181693 failed login attempts since the last successful login.
|

Установка CentOS 7 на VirtualBox

Скачиваем и устаналиваем VirtualBox отсюда - download.virtualbox.org/virtualbox. Лучше всего версию 4.3.12, т.к. у последующих имеются проблемы с запуском на Windows 7 (SP1, x64).

Создаем вирутальную машину. Тип жесткого желательно выбрать VMDK фиксированного размера. Операционную систему - Red Hat (64 bit).

Скачиваем образ CentOS 7 отсюда - www.centos.org/download (выбираем Minimal ISO). Либо сразу идем на mirror.yandex.ru/centos и скачиваем последнюю версию 7.x.

В настройках вирутальной машины в разделе Носители выбираем образ CentOS. В разделе Сеть тип подключения должен стоять NAT, переходим в проброс портов и добавляем следующие записи:

Имя Протокол IP хоста Порт хоста IP гостя Порт гостя
ssh tcp 192.168.56.1 22 10.0.2.15 22
http tcp 192.168.56.1 80 10.0.2.15 80
https tcp 192.168.56.1 443 10.0.2.15 443

Запускаем машину, начнется установка. Русский язык нигде не выбираем - везде оставляем English (US). Должны быть выбраны следующие настройки:

  • Date&Time: Europe/Moscow
  • Keyboard: English (US)
  • Language Support: English (United States)
  • Software selection: Minimal install
  • Installation destination: Automatic partitioning selected
  • Kdump: Kdump is enabled
  • Network & Host name: Wired (enp0s3) connected

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

После завершения установки отключаем и удаляем firewalld (будем использовать iptables).

systemctl stop firewalld
systemctl disable firewalld
yum remove firewalld

Теперь можно перейти в Putty. В качестве хоста используем 192.168.56.1, порт 22 (стандартный). Обновляем систему и ставим все необходимое (по желанию).

yum update
yum install wget nano net-tools

Отключаем Selinux, заменив в /etc/sysconfig/selinux строку на SELINUX=disabled.

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

rpm -Uvh https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install gcc make bzip2 kernel-devel kernel-headers dkms perl

Идем на download.virtualbox.org/virtualbox и скачиваем образ диска с гостевыми дополнениями от самой последней версии VirtualBox (VBoxGuestAdditions_4.x.xx.iso). В новых версиях kernel поменялась структура папок, поэтому гостевые аддоны от 4.3.12 не установятся. Можно скачать, к примеру, версию 4.3.26. После чего вставляем образ в дисковод.

Далее запускаем установлку аддонов:

mkdir /media/VBoxAdd
mount -r /dev/cdrom /media/VBoxAdd
cd /media/VBoxAdd
./VBoxLinuxAdditions.run

После такого как аддоны установились мы сможем, к примеру, монтировать папку WINDOWS, созданную под Windows, в папку /tmp/windows, следующей командой:

mount -t vboxsf WINDOWS /tmp/windows

Либо сразу добавить в автозагрузку файловой системы. Для этого необходимо отредактировать файл /etc/fstab, дописав следующую строчку:

WINDOWS /tmp/windows vboxsf defaults,comment=systemd.automount 0 0