Архив рубрики: Публикации

Команда find в Linux

Команда find в Linux




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




В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.




Основная информация о FIND




Find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.




Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.




Команда find имеет такой синтаксис:




find [папка] [параметры] критерий шаблон [действие]




Папка — каталог в котором будем искать




Параметры — дополнительные параметры, например, глубина поиска, и т д




Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.




Шаблон — непосредственно значение по которому будем отбирать файлы.




Основные параметры команды find




Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.




  • -P никогда не открывать символические ссылки
  • -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth — искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version — показать версию утилиты find
  • -print — выводить полные имена файлов
  • -type f — искать только файлы
  • -type d — поиск папки в Linux




Критерии




Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.




  • -name — поиск файлов по имени
  • -perm — поиск файлов в Linux по режиму доступа
  • -user — поиск файлов по владельцу
  • -group — поиск по группе
  • -mtime — поиск по времени модификации файла
  • -atime — поиск файлов по дате последнего чтения
  • -nogroup — поиск файлов, не принадлежащих ни одной группе
  • -nouser — поиск файлов без владельцев
  • -newer — найти файлы новее чем указанный
  • -size — поиск файлов в Linux по их размеру




Примеры использования




А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.




1. Поиск всех файлов




Показать все файлы в текущей директории:




find

find .

find . -print




2. Поиск файлов в определенной папке




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




find ./test




Искать файлы по имени в текущей папке:




find . -name "*.jpg"




Не учитывать регистр при поиске по имени:




find . -iname "test*"




3. Ограничение глубины поиска




Поиска файлов по имени в Linux только в этой папке:




find . -maxdepth 1 -name "*.php"




4. Инвертирование шаблона




Найти файлы, которые не соответствуют шаблону:




find . -not -name "test*"




5. Несколько критериев




Поиск командой find в Linux по нескольким критериям, с оператором исключения:




 find . -name "test" -not -name "*.php"




Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:




find -name "*.html" -o -name "*.php"




6. Несколько каталогов




Искать в двух каталогах одновременно:




find ./test ./test2 -type f -name "*.c"




7. Поиск скрытых файлов




Найти скрытые файлы:




find ~ -type f -name ".*"




8. Поиск по разрешениям




Найти файлы с определенной маской прав, например, 0664:




find . type f -perm 0664




Найти файлы с установленным флагом suid/guid:




find / -perm 2644




Или так:




find / -maxdepth 2 -perm /u=s




Поиск файлов только для чтения:




find /etc -maxdepth 1 -perm /u=r




Найти только исполняемые файлы:




find /bin -maxdepth 2 -perm /a=x




9. Поиск файлов по группах и пользователях




Найти все файлы, принадлежащие пользователю:




find . -user sergiy




Поиск файлов в Linux принадлежащих группе:




find /var/www -group developer




10. Поиск по дате модификации




Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:




find / -mtime 50




Поиск файлов в Linux открытых N дней назад:




find / -atime 50




Найти все файлы, модифицированные между 50 и 100 дней назад:




find / -mtime +50 –mtime -100




Найти файлы измененные в течении часа:




find . -cmin 60




11. Поиск файлов по размеру




Найти все файлы размером 50 мегабайт:




find / -size 50M




От пятидесяти до ста мегабайт:




find / -size +50M -size -100M




Найти самые маленькие файлы:




find . -type f -exec ls -s {} ; | sort -n -r | head -5




Самые большие:




find . -type f -exec ls -s {} ; | sort -n | head -5




12. Поиск пустых файлов и папок




Поиск файлов




find /tmp -type f -empty




Поиск папок




find ~/ -type d -empty




13. Действия с найденными файлами




Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить ls для получения подробной информации о каждом файле:




find . -exec ls -ld {} ;




Удалить все текстовые файлы в tmp




find /tmp -type f -name "*.txt" -exec rm -f {} ;




Удалить все файлы больше 100 мегабайт:




find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} ;




Вывод




Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду grep.




Источник: https://losst.ru/komanda-find-v-linux



2021-03-07T11:12:48
Утилиты командной строки

Настройка кластера Proxmox VE

В данной инструкции мы сначала соберем кластер Proxmox для управления всеми хостами виртуализации из единой консоли, а затем — кластер высокой доступности (HA или отказоустойчивый). В нашем примере мы будем работать с 3 серверами — pve1, pve2 и pve3.




Мы не станем уделять внимание процессу установки Proxmox VE, а также настройки сети и других функций данного гипервизора — все это можно прочитать в пошаговой инструкции Установка и настройка Proxmox VE.




Подготовка нод кластера




Серверы должны иметь возможность обращения друг к другу по их серверным именам. В продуктивной среде лучше всего для этого создать соответствующие записи в DNS. В тестовой можно отредактировать файлы hosts. В Proxmox это можно сделать в консоли управления — устанавливаем курсор на сервере — переходим в Система — Hosts — добавляем все серверы, которые будут включены в состав кластера:







* в данном примере у нас в hosts занесены наши два сервера Proxmox, из которых мы будем собирать кластер.




Настройка кластера




Построение кластерной системы выполняется в 2 этапа — сначала мы создаем кластер на любой из нод, затем присоединяем к данному кластеру остальные узлы.




Создание кластера




Переходим в панель управления Proxmox на любой их нод кластера. Устанавливаем курсов на Датацентр — кликаем по Кластер — Создать кластер:







Для создания кластера нам нужно задать его имя и, желательно, выбрать IP-адрес интерфейса, на котором узел кластера будет работать:







… кликаем Создать — процесс не должен занять много времени. В итоге, мы должны увидеть «TASK OK»:







Присоединение ноды к кластеру




На первой ноде, где создали кластер, в том же окне станет активна кнопка Данные присоединения — кликаем по ней:







В открывшемся окне копируем данные присоединения:







Теперь переходим в панель управления нодой, которую хотим присоединить к кластеру. Переходим в Датацентр — Кластер — кликаем по Присоединить к кластеру:







В поле «Данные» вставляем данные присоединения, которые мы скопировали с первой ноды — поля «Адрес сервера» и «Отпечаток заполняться автоматически». Заполняем пароль пользователя root первой ноды и кликаем Присоединение:







Присоединение также не должно занять много времени. Ждем несколько минут для завершения репликации всех настроек. Кластер готов к работе — при подключении к любой из нод мы будем подключаться к кластеру:







Готово. Данный кластер можно использовать для централизованного управления хостами Proxmox.




Посмотреть статус работы кластера можно командой в SSH:




pvecm status




Отказоустойчивый кластер




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




Для настройки отказоустойчивости (High Availability или HA) нам нужно:




  • Минимум 3 ноды в кластере. Сам кластер может состоять из двух нод и более, но для точного определения живых/не живых узлов нужно большинство голосов (кворумов), то есть на стороне рабочих нод должно быть больше одного голоса. Это необходимо для того, чтобы избежать ситуации 2-я активными узлами, когда связь между серверами прерывается и каждый из них считает себя единственным рабочим и начинает запускать у себя все виртуальные машины. Именно по этой причине HA требует 3 узла и выше.
  • Общее хранилище для виртуальных машин. Все ноды кластера должны быть подключены к общей системе хранения данных — это может быть СХД, подключенная по FC или iSCSI, NFS или распределенное хранилище Ceph или GlusterFS.




1. Подготовка кластера




Процесс добавления 3-о узла аналогичен процессу, описанному выше — на одной из нод, уже работающей в кластере, мы копируем данные присоединения; в панели управления третьего сервера переходим к настройке кластера и присоединяем узел. 




2. Добавление хранилища




Подробное описание процесса настройки самого хранилища выходит за рамки данной инструкции. В данном примере мы разберем пример и использованием СХД, подключенное по iSCSI.




Если наша СХД настроена на проверку инициаторов, на каждой ноде смотрим командой:




cat /etc/iscsi/initiatorname.iscsi




… IQN инициаторов. Пример ответа:





InitiatorName=iqn.1993-08.org.debian:01:4640b8a1c6f




* где iqn.1993-08.org.debian:01:4640b8a1c6f — IQN, который нужно добавить в настройках СХД.




После настройки СХД, в панели управления Proxmox переходим в Датацентр — Хранилище. Кликаем Добавить и выбираем тип (в нашем случае, iSCSI):







В открывшемся окне указываем настройки для подключения к хранилке:







* где ID — произвольный идентификатор для удобства; Portal — адрес, по которому iSCSI отдает диски; Target — идентификатор таргета, по которому СХД отдает нужный нам LUN.




Нажимаем добавить, немного ждем — на всех хостах кластера должно появиться хранилище с указанным идентификатором. Чтобы использовать его для хранения виртуальных машин, еще раз добавляем хранилище, только выбираем LVM:







Задаем настройки для тома LVM:







* где было настроено:




  • ID — произвольный идентификатор. Будет служить как имя хранилища.
  • Основное хранилище — выбираем добавленное устройство iSCSI.
  • Основное том — выбираем LUN, который анонсируется таргетом.
  • Группа томов — указываем название для группы томов. В данном примере указано таким же, как ID.
  • Общедоступно — ставим галочку, чтобы устройство было доступно для всех нод нашего кластера.




Нажимаем Добавить — мы должны увидеть новое устройство для хранения виртуальных машин.




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




3. Настройка отказоустойчивости




Создание группы




Для начала, определяется с необходимостью групп. Они нужны в случае, если у нас в кластере много серверов, но мы хотим перемещать виртуальную машину между определенными нодами. Если нам нужны группы, переходим в Датацентр — HA — Группы. Кликаем по кнопке Создать:







Вносим настройки для группы и выбираем галочками участников группы:







* где:




  • ID — название для группы.
  • restricted — определяет жесткое требование перемещения виртуальной машины внутри группы. Если в составе группы не окажется рабочих серверов, то виртуальная машина будет выключена.
  • nofailback — в случае восстановления ноды, виртуальная машина не будет на нее возвращена, если галочка установлена.




Также мы можем задать приоритеты для серверов, если отдаем каким-то из них предпочтение.




Нажимаем OK — группа должна появиться в общем списке.




Настраиваем отказоустойчивость для виртуальной машины




Переходим в Датацентр — HA. Кликаем по кнопке Добавить:







В открывшемся окне выбираем виртуальную машину и группу:







… и нажимаем Добавить.




4. Проверка отказоустойчивости




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




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




Для выключения ноды можно ввести команду:




systemctl poweroff




Виртуальная машина должна переместиться в течение 1 — 2 минут.




Ручное перемещение виртуальной машины




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




И так, открываем SSH-консоль сервера, на любой работающем сервере Proxmox. Переходим в каталог qemu-server той ноды, которая не работает:




cd /etc/pve/nodes/pve1/qemu-server




* мы предполагаем, что у нас вышел из строя сервер pve1.




Смотрим содержимое каталога:




ls




Мы должны увидеть конфигурационные файлы запущенных виртуальных машин, например:




100.conf




* в нашем примере у нас запущена только одна виртуальная машина с идентификатором 100.




mv 100.conf ../../pve2/qemu-server/




* где pve2 — имя второй ноды, на которой мы запустим виртуальный сервер.




Командой:




qm list




… проверяем, что виртуальная машина появилась в системе. В противном случае, перезапускаем службы:




systemctl restart pvestatd

systemctl restart pvedaemon

systemctl restart pve-cluster




Сбрасываем состояние для HA:




ha-manager set vm:100 --state disabled

ha-manager set vm:100 --state started




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




После виртуальную машину можно запустить:




qm start 100




Репликация виртуальных машин




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




Настройка ZFS




Репликация может выполняться только на тома ZFS. Подробная работа с данной файловой системой выходит за рамки данной инструкции, однако, мы разберем основные команды, с помощью которых можно создать необходимы том.




Пул ZFS необходимо создавать из командной строки, например:




zpool create -f zpool1 /dev/sdc




* в данном примере мы создадим пул с названием zpool1 из диска /dev/sdc.




Теперь открываем панель управления Proxmox. Переходим в Датацентр — Хранилище — ZFS:







Задаем настройки для создания хранилища из созданного ранее пула ZFS:







* в данном примере мы создаем хранилище из пула zpool1; название для хранилище задаем zfs-pool, также ставим галочку Дисковое резервирование. Остальные настройки оставляем по умолчанию.




После этого мы должны либо перенести виртуальную машину на хранилище ZFS, либо создать в нем новую машину.




Настройка репликации




Переходим к хосту, где находится виртуальная машина, для которой мы хотим настроить клонирование (она должна также находится на хранилище ZFS) — Репликация:







Задаем настройки для репликации виртуальной машины:







* в данном примере мы указываем системе проверять и реплицировать изменения каждые 15 минут для виртуальной машины с идентификатором 100. Репликация должна проводиться на сервер pve2.




Нажимаем Создать — теперь ждем репликации по расписанию или форсируем событие, кликнув по Запустить сейчас:







Удаление ноды из кластера




Удаление узла из рабочего кластера выполняется из командной строки. Список всех нод можно увидеть командой:




pvecm nodes




Мы увидим, примерно, следующее:




Membership information
----------------------
    Nodeid      Votes Name
         1          1 pve1 (local)
         2          1 pve2
         3          1 pve3




* где pve1, pve2, pve3 — узлы кластера; local указываем на ноду, с которой мы выполняем команду pvecm.




Для удаления узла, например, pve2 вводим:




pvecm delnode pve2




Ждем немного времени, пока не пройдет репликация. В консоли управления Proxmox удаленный сервер должен пропасть




Удаление кластера




Рассмотрим процесс удаления нод из кластера и самого кластера. Данные действия не могут быть выполнены из веб-консоли — все операции делаем в командной строке.




Подключаемся по SSH к одной из нод кластера. Смотрим все узлы, которые присоединены к нему:




pvecm nodes




Мы получим список нод — удалим все, кроме локальной, например:




pvecm delnode pve2
pvecm delnode pve3




* в данном примере мы удалили ноды pve2 и pve3.




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




systemctl stop pvestatd pvedaemon pve-cluster corosync




Подключаемся к базе sqlite для кластера PVE:




sqlite3 /var/lib/pve-cluster/config.db




Удаляем из таблицы tree все записи, поле name в которых равно corosync.conf:




> DELETE FROM tree WHERE name = 'corosync.conf';




Отключаемся от базы:




> .quit




Удаляем файл блокировки:




rm -f /var/lib/pve-cluster/.pmxcfs.lockfile




Удаляем файлы, имеющие отношение к настройке кластера:




rm /etc/pve/corosync.conf
rm /etc/corosync/*
rm /var/lib/corosync/*




Запускаем ранее погашенные службы:




systemctl start pvestatd pvedaemon pve-cluster corosync




Кластер удален.




Источник : https://www.dmosk.ru/miniinstruktions.php?mini=mdadm



2021-03-07T11:05:31
Software

Использование VLAN между двумя марутизаторами MikroTik

В моей домашней сети все устройства, относящиеся к умному дому отселены в отдельную сеть, это не только шлюзы и лампы Xiaomi, а также телевизор, медиа проигрыватель, ресивер, различные Wi-Fi реле и розетки, и, конечно сервер Home Assistant. Это повышает безопасность, устройства локальной сети, кроме избранных, не будут иметь доступ к ресурсам умного дома и соответственно вероятность того, что кто-то случайно или специально выкрутит громкость ресивера на максимум со своего телефона не велика, а беря в руки пульт или прикасаясь к ручке громкости можно получить в лоб этим самым пультом.




Собственно, есть два устройства MikroTik, RB4011 и RB962, оба маршрутизаторы, первый работает как шлюз для доступа в интернет и switch, второй как switch и Wi-Fi точка доступа. В устройствах собрано по два бриджа, для домашней локальной сети и сети умного дома, Wi-Fi точка доступа домашней сети работает в диапазонах 2.4G и 5G, Wi-Fi точка для подключения устройств УД только в 2.4G. Устройства находятся в разных помещениях квартиры и соединены проводом. Что бы не тянуть второй провод и обеспечения передачи трафика обоих сетей между устройствами будут использоваться VLAN’ы, питание на второе устройство будет подаваться по этому же проводу посредствам PoE.







Наверно здесь должно быть описание что такое VLAN’ы, для чего они нужны и как это работает, но этого не будет, считаем, что читатель уже знает, что это такое. Единственное замечание, это то, что описанный ниже способ, является программной реализацией обработки VLAN и вся нагрузка ложится на ЦП.




Настройка первого роутера




Устройство RB4011 имеет десять ethernet портов плюс порт SFP-SFP+. Порт SFP мы рассматривать не будем, в итоге мы должны будем получить следующую конфигурацию:




  • Порт ether1 — интернет (WAN порт), считаем, что интернет на устройстве уже настроен
  • Bridge 18, IP адрес 192.168.18.1, ethernet порты 6 — 9, vlan18 untagged — сеть умного дома
  • Bridge 22, IP адрес 192.168.22.1, ethernet порты 2 — 5, vlan22 untagged — домашняя локальная сеть
  • Порт ether10 — trunk порт на второе устройство, vlan18 tagged, vlan22 tagged




Переименовываем порт ether10 в ether10-trunk, что бы было понятнее:




/interface ethernet set ether10 name="ether10-trunk"




Создаем vlan18 и vlan22 с соответствующими VLAN ID, оба вешаем на порт ether10-trunk, трафик на этом порту будет Tagged.




/interface vlan add name="vlan18" vlan-id=18 interface=ether10-trunk
/interface vlan add name="vlan22" vlan-id=22 interface=ether10-trunk




Создаем бриджи для двух сетей и назначаем им адреса, добавляем порты и VLAN’ы в соответствующие бриджи, трафик на портах бриджа будет Untagged.




/interface bridge add name="bridge18"
/interface bridge add name="bridge22"

/ip address add address=192.168.18.1 interface=bridge18
/ip address add address=192.168.22.1 interface=bridge22

/interface bridge port add bridge=bridge18 interface=ether6
/interface bridge port add bridge=bridge18 interface=ether7
/interface bridge port add bridge=bridge18 interface=ether8
/interface bridge port add bridge=bridge18 interface=ether9
/interface bridge port add bridge=bridge18 interface=vlan18

/interface bridge port add bridge=bridge22 interface=ether2
/interface bridge port add bridge=bridge22 interface=ether3
/interface bridge port add bridge=bridge22 interface=ether4
/interface bridge port add bridge=bridge22 interface=ether5
/interface bridge port add bridge=bridge22 interface=vlan22




Настройка второго роутера




Устройство RB962 имеет пять ethernet портов плюс порт SFP, два WLAN интерфейса, на wlan1 работает 2.4G, wlan2 на 5G, оба задействованы для локальной домашней сети, для сети УД создан дополнительный виртуальный WLAN интерфейс wlan-smarthome работающий на 2.4G. Порт SFP мы, как и ранее, рассматривать не будем, но по необходимости его можно задействовать в своих нуждах. В конечном итоге конфигурация должна быть следующей:




  • Порт ether1 — trunk порт на первое устройство, vlan18 tagged, vlan22 tagged
  • Bridge 18, IP адрес 192.168.18.2, ethernet порты 2 — 5, виртуальный интерфейс wlan 2.4G, vlan18 untagged — сеть умного дома
  • Bridge 22, IP адрес 192.168.22.2, основные wlan интерфейсы 2.4G и 5G, vlan22 untagged — домашняя локальная сеть




Переименовываем порт ether1 в ether1-trunk, что бы было понятнее:




/interface ethernet set ether1 name="ether1-trunk"




Создаем vlan18 и vlan22 с соответствующими VLAN ID, оба вешаем на порт ether1-trunk, трафик на этом порту будет Tagged.




/interface vlan add name="vlan18" vlan-id=18 interface=ether1-trunk
/interface vlan add name="vlan22" vlan-id=22 interface=ether1-trunk




Создаем бриджи для двух сетей и назначаем им адреса, добавляем порты и VLAN’ы в соответствующие бриджи, трафик на портах бриджа будет Untagged.




/interface bridge add name="bridge18"
/interface bridge add name="bridge22"

/ip address add address=192.168.18.2 interface=bridge18
/ip address add address=192.168.22.2 interface=bridge22

/interface bridge port add bridge=bridge18 interface=ether2
/interface bridge port add bridge=bridge18 interface=ether3
/interface bridge port add bridge=bridge18 interface=ether4
/interface bridge port add bridge=bridge18 interface=ether5
/interface bridge port add bridge=bridge18 interface=wlan-smarthome
/interface bridge port add bridge=bridge18 interface=vlan18

/interface bridge port add bridge=bridge22 interface=wlan1
/interface bridge port add bridge=bridge22 interface=wlan2
/interface bridge port add bridge=bridge22 interface=vlan22




Теперь весь трафик, исходящий с устройства подключенного к RB962 направленный на устройство, подключенное к RB4011 сначала попадает в бридж, далее в порт ether1-trunk, тегируется соответствующим VLAN ID, попадает в порт ether10-trunk на RB4011, снимается тег VLAN ID, попадает в соответствующий бридж и затем в устройство назначения.




Настройка Firewall описана не будет, т.к. это уже материал для отдельной статьи.




Источник: https://stupidhouse.info/node/15



2021-03-07T01:25:37
Network

Как установить и настроить WireGuard в Kali Linux

WireGuard — это простой и быстрый сервис VPN-туннелирования с открытым исходным кодом, созданный с использованием передовых криптографических технологий. Его очень легко настроить и использовать, и многие считают его лучше, чем OpenVPN или IPSec. WireGuard также является кроссплатформенным и поддерживает встроенные устройства. Читать

Как использовать Django Channel

Django — это популярная среда Python, используемая для разработки веб-приложений с использованием спецификаций сервера WGSI (интерфейс шлюза веб-сервера) и ASGI (интерфейс шлюза асинхронного сервера). WGSI используется для разработки синхронных приложений Python, а AGSI используется для разработки асинхронных и синхронных веб-приложений. Канал — это полезная функция Django, которая используется для обработки WebSocket, протокола чата и т. д. Наряду с протоколом HTTP. Канал построен по спецификации сервера ASGI. Сеанс двусторонней интерактивной связи между браузером пользователя и сервером можно открыть с помощью WebSocket. Клиент инициирует соединение WebSocket, и сервер отвечает согласием или закрыть сообщение. Сообщения WebSocket проталкиваются в канал с помощью производителей и отправляются потребителям, которые прослушивают канал. В этой статье показано, как использовать каналы для обработки сообщений WebSocket.

 

Предпосылки

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

  • Установите Django версии 3+ на Ubuntu 20+ (желательно)
  • Создайте проект Django
  • Запустите сервер Django, чтобы проверить, правильно ли он работает.

 

Настроить приложение Django

Выполните следующую команду, чтобы создать приложение Django с именем socketapp:

$ python3 manage.py startapp socketapp

 

Выполните следующую команду, чтобы установить канал:

$ pip install channels

 

Добавьте каналы и имя приложения в часть INSTALLED_APP файла settings.py :

INSTALLED_APPS = [

…..

'channels',

'socketapp'

]

 

Определите значение ASGI_APPLICATION в файле settings.py :

ASGI_APPLICATION = ‘channel_pro.asgi.application’

 

Создайте папку с именем templates внутри папки socketapp и установите расположение шаблона приложения в части TEMPLATES файла settings.py :

TEMPLATES = [

{

….

'DIRS': ['/home/fahmida/channel_pro/socketapp/templates'],

….

},

]

Следующий вывод появится в терминале после запуска сервера Django. Выходные данные показывают, что работает ASGI/Channels версии 3.0.3.

Создайте файл шаблона с именем index.html в определенном месте шаблона для отображения данных, отправленных WebSocket. Объект сокета, созданный с помощью JavaScript, будет считывать данные с помощью метода JSON.parse(), а затем передавать значение в содержимое тега <h1>, который содержит значение идентификатора, msg.

<!DOCTYPE html>

<html lang=»en»>

<head>

<meta charset=»UTF-8″>

<title>Учебники по каналу Django</title>

<script>

socket = new WebSocket(«ws://localhost:8000/msg/»);

socket.onmessage = function(e) {

var data = JSON.parse(e.data);

document.querySelector(‘#msg’).innerText = data.timeValue;

}

</script>

</head>

<body>

<center>

<h1 style=»color:blue» id =»msg»>{{ text }}</h1>

</center>

</body>

</html>

 

Измените views.py файл в socketapp со следующим содержанием. Index.html файл шаблона будет отображаться в браузере с текстом переменной, когда метод index() этого сценария вызывается из urls.py файла. Если сообщение не передается из сокета, в браузере будет отображаться текст «AndreyEx».

views.py

# Импортировать модуль рендеринга из Django

from django.shortcuts import render



# Создать функцию индекса для отображения HTML-файла в браузере

def index(request):

return render(request, "index.html", context={'text': 'AndreyEx'})

 

Измените urls.py файл в socketapp со следующим содержанием. В скрипте определены два пути: путь admin/ используется для открытия панели администрирования Django, а путь msg/ используется для чтения сообщения WebSocket.

urls.py

from django.contrib import admin

from django.urls import path



from socketapp import views



urlpatterns = [

path('admin/', admin.site.urls),

path('msg/', views.index)

]

Когда следующий URL-адрес выполняется без определения файлов-потребителей и файлов маршрутизации, протокол HTTP будет работать, и появится следующий вывод.

http://localhost:8000/msg/

 

Теперь создайте файл consumer.py внутри папки socketapp с помощью следующего скрипта. Метод connect() для ws_consumer будет использоваться для приема подключения к сокету, чтения текущего значения времени каждую секунду и отправки текущего времени в формате JSON через WebSocket, когда этот метод вызывается из файла маршрутизации.

consumers.py

# Импортировать модуль JSON

import json

# Импортировать WebsocketConsumer

from channels.generic.websocket import WebsocketConsumer

# Импортировать модуль datetime

from datetime import datetime

# Импортировать модуль sleep

from time import sleep





# Определить класс потребителя для отправки данных через

class ws_consumer(WebsocketConsumer):

def connect(self):

self.accept()

while(True):

now = datetime.now()

self.send(json.dumps({'timeValue': now.strftime("%H:%M:%S")}))

sleep(1)

 

Создайте routing.py внутри папки socketapp с помощью следующего скрипта. Путь msg/ определен в сценарии для вызова потребителя для отправки данных в сокет.

routing.py

from django.urls import path

from.consumers import ws_consumer



# Задайте путь для вызова потребителя

ws_urlpatterns = [

path('msg/', ws_consumer.as_asgi())

]

 

Измените файл asgi.py с помощью следующего сценария. Модули, необходимые для обработки запросов HTTP и WebSocket, импортируются в сценарий.

asgi.py

# Импортировать модуль os

import os

# Импортировать get_asgi_application для обработки протокола http

from django.core.asgi import get_asgi_application

# Import ProtocolTypeRouter и URLRouter для установки маршрутизации веб-сокетов

from channels.routing import ProtocolTypeRouter, URLRouter

# Import AuthMiddlewareStack для обработки веб-сокета

from channels.auth import  AuthMiddlewareStack

# Импортировать маршрутизацию веб-сокетов

from socketapp.routing import ws_urlpatterns



# Назначьте значение для DJANGO_SETTINGS_MODULE

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'channel_pro.settings')



# Определить переменные приложения для обработки HTTP и WebSocket

application = ProtocolTypeRouter({

'http': get_asgi_application(),

'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))



})

 

Теперь снова запустите следующий URL-адрес из браузера, чтобы прочитать данные из WebSocket.

http://localhost:8000/msg/

 

Если потребитель и маршрутизатор работают правильно, в браузере будут отображаться следующие цифровые часы. Здесь маршрутизатор отправил запрос WebSocket, используя путь msg/ к потребителю, который принял запрос и отправил данные в шаблон, чтобы показать цифровые часы в браузере, где второе значение текущего времени обновляется каждые второй.

 

Вывод

В этом руководстве показано, как реализовать приложение реального времени с использованием инфраструктуры и каналов Django, создав простые цифровые часы. Другие типы приложений реального времени также могут быть реализованы с использованием Django и каналов, таких как системы онлайн-чата. Скрипты, используемые в этой статье, работают только с Django версии 3+ и Channel версии 3+. Итак, если вы используете более раннюю версию Django или Channel, вам нужно будет обновить версию перед тестированием скрипта, представленного в этом руководстве.



2021-03-06T10:29:34
Python

Как настроить зеркало Kali Linux

Используя простые шаги, представленные в этой статье , вы можете настроить зеркало Kali Linux, на котором будут размещаться основные репозитории и образы Kali. Зеркало Kali Linux удобно.

 

Требования

Чтобы настроить полное зеркало Kali Linux, вам понадобится несколько ресурсов. К ним относятся:

  • Доступный веб-сервер с доступом HTTP и HTTP.
  • Большое дисковое пространство — на момент написания этой статьи, по словам специалистов по сопровождению Kali Linux, размер репозитория пакетов Kali Linux составлял 1,1 ТБ и быстро расширялся.
  • Установленные и запущенные в системе службы HTTP и RSYNC

 

Настройка пользователя для зеркала Kali Linux

Первым шагом является создание полной учетной записи, предназначенной только для зеркал Kali Linux. Используйте команду adduser:

$ adduser –disabled-password andreyex



Adding user `andreyex’...



Adding new group `andreyex’ (1001) ...



Adding new user `andreyex’ (1001) with group `andreyex’...



Creating home directory `/home/andreyex' ...



Copying files from `/etc/skel' ...



Changing the user information for andreyex



Enter the new value, or press ENTER for the default



Full Name []:



Room Number []:



Work Phone []:



Home Phone []:



Other []:



Is the information correct? [Y/n] y

Настроить зеркальные каталоги

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

mkdir -p /srv/mirrors/kali{,-images}



chown andreyex:andreyex /srv/mirrors/kali{,-images}

 

Приведенные выше команды создадут каталоги kali и kali-images и установят право собственности на пользователя, которого мы создали ранее.

 

Настроить rsync

Следующий шаг включает запуск и настройку службы rsync. Экспортируйте каталоги с помощью команды:

sed -i -e "s/RSYNC_ENABLE=false/RSYNC_ENABLE=true/" /etc/default/rsync



# nano /etc/rsyncd.conf



# cat /etc/rsyncd.conf



uid = nobody



gid = nogroup



max connections = 25



socket options = SO_KEEPALIVE







[kali]



path = /srv/mirrors/kali



read only = true



[kali-images]



path = /srv/mirrors/kali-images



read only = true



# service rsync start



Starting rsync daemon: rsync.

Запуск демона rsync: rsync.

Настройка зеркал

Затем нам нужно экспортировать зеркала в http://domain.com/kali и http://domain.com/kali-images.

Начнем с загрузки и разархивирования архива http://archive.kali.org/ftpsync.tar.gz в каталоге пользователя, созданном ранее.

# su - archvsync



# wget http://archive.kali.org/ftpsync.tar.gz



# tar zxf ftpsync.tar.gz



Next set up the configuration file.



cp etc/ftpsync.conf.sample etc/ftpsync-kali.conf



nano etc/ftpsync-kali.conf



grep -E '^[^#]' etc/ftpsync-kali.conf



MIRRORNAME=`hostname -f`



TO="/srv/mirrors/kali/"



RSYNC_PATH="kali"



RSYNC_HOST=archive.kali.org

 Настройка доступа по SSH

Последний шаг — настроить авторизованные ключи SSH для archive.kali.org для запуска зеркала.

mkdir /home/andreyex/.ssh



chown 700 /home/andreyex/.ssh



wget –O- -q http://archive.kali.org/pushmirror.pub >> /home/andreyex/.ssh/authorized_keys



chown 644 /home/andreyex/authorized_keys

 Связь с Kali.org

После завершения настройки системы отправьте электронное письмо по адресу devel@kali.org, указав всю информацию о ваших зеркалах, включая пользователя, порт для доступа к службе SSH и общедоступное имя хоста. Вы также должны указать, к кому Kali следует обращаться в случае проблем и должны ли применяться какие-либо изменения в соответствии с настройками зеркала.

Оттуда все, что вам нужно сделать, это дождаться первого толчка от archive.kali.org.



2021-03-06T10:09:54
Kali Linux