Системный администратор
Open in Telegram
Канал для системных администраторов. Linux, Windows, Active Directory, GPO, PowerShell. Виртуализация Hyper-V, VMWare. Облака Azure, AWS. По всем вопросам @evgenycarter
Show more2 097
Subscribers
-924 hours
-227 days
-14530 days
Posts Archive
Файловый сервер SFTPGo
Полнофункциональный и высококонфигурируемый SFTP-сервер с дополнительной поддержкой HTTP/S, FTP/S и WebDAV - S3, Google Cloud Storage, Azure Blob
https://github.com/drakkan/sftpgo
👉 @i_linux
Шпаргалка по RAID
mdadm — утилита для работы с программными RAID-массивами различных уровней. В данной инструкции рассмотрим примеры ее использования.
Информация о RAID
cat /proc/mdstat - состояние всех RAID
mdadm -D /dev/md0 - подробная инфа о конкретном RAID
lsblk - список дисков с разделами, местом, типом
df -hT - свободное место, тип файловой системы, точки монтирования
Сборка RAID
mdadm —zero-superblock —force /dev/sd{b,c} - обнуление суперблоков на дисках sdb sdc (для удаления инфы о других RAID)
при получении ответа mdadm: Unrecognised md component device - /dev/sdb значит, что диск не использовался для RAID, продолжаем
mdadm —create —verbose /dev/md0 -l 1 -n 2 /dev/sd{b,c}
* где /dev/md0 — устройство RAID, которое появится после сборки; -l 1 — уровень RAID; -n 2 — количество дисков, из которых собирается массив; /dev/sd{b,c} — сборка выполняется из дисков sdb и sdc.
Создание файловой системы и монтирование массива
mkfs.ext4 /dev/md0 - создание файловой системы ext4 на md0
mount /dev/md0 /mnt - разово примонтировать md0 к /mnt
nano /etc/fstab, прописать /dev/md0 /mnt ext4 defaults 1 2 - постоянное монтирование, работает после перезагрузки
Восстановление RAID
Замена жесткого диска
При выходе из строя, команда mdadm -D /dev/md0 выдаст: State : clean, degraded
mdadm /dev/md0 —remove /dev/sdc - удалить сбойный диск
mdadm /dev/md0 —add /dev/sde - добавить новый диск в массив
Статус должен стать Rebuild Status : 40% complete и так до полного восстановления
Пересборка массива
Если нам нужно вернуть ранее разобранный или развалившийся массив из дисков, которые уже входили в состав RAID, вводим:
mdadm —assemble —scan - команда сама найдет необходимую конфигурацию и восстановит RAID.
mdadm —assemble /dev/md0 /dev/sdb /dev/sdc - с указанием из каких дисков пересобрать
Запасной диск (Hot Spare)
Если в массиве будет запасной диск для горячей замены, при выходе из строя одного из основных дисков, его место займет запасной.
mdadm /dev/md0 —add /dev/sdd - Диском Hot Spare станет тот, который просто будет добавлен к массиву
Добавить диск к массиву, расширить массив
Добавление активного диска к RAID, который будет использоваться для работы, а не в качестве запасного.
mdadm /dev/md0 —add /dev/sde
mdadm -G /dev/md0 —raid-devices=3 - расширяем RAID
* в данном примере подразумевается, что у нас RAID 1 и мы добавили к нему 3-й диск.
Установка mdadm
Если каким-то образом в дистрибутиве нет этого пакета
apt-get install mdadm
Удаление массива
Если нам нужно полностью разобрать RAID, сначала размонтируем и остановим его:
umount /mnt
* где /mnt — каталог монтирования нашего RAID.
mdadm -S /dev/md0
Затем очищаем суперблоки на всех дисках, из которых он был собран:
mdadm —zero-superblock /dev/sdb
mdadm —zero-superblock /dev/sdc
mdadm —zero-superblock /dev/sdd
👉 @i_linuxКак пробросить порт в Linux на другой сервер
Необходимо пробросить с 8821 порта сервера 10.10.10.10 на 21 порт сервера 12.12.12.12:
iptables -A FORWARD --dst 10.10.10.10 -p tcp --dport 8821 -j ACCEPT
iptables -A FORWARD --src 10.10.10.10 -p tcp --sport 8821 -j ACCEPT
iptables -t nat -A PREROUTING -d 10.10.10.10 -p tcp --dport 8821 -j DNAT --to-destination 12.12.12.12:21
iptables -t nat -A POSTROUTING -d 12.12.12.12 -p tcp --dport 21 -j SNAT --to-source 10.10.10.10:8821
👉 @i_linuxСкриптик переустановки пароля пользователя MikroTik
# Скрипт смены пароля пользователя
# только для исполнения в терминале ROS
# by Sertik 09/06/2020
{
:global EnterString do={
:local cont 0; :local string ""
:while ($cont!=13) do={
:local key ([:terminal inkey])
:if ($key!=13) do={
:local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
:set string ("$string"."$char")}
:set cont $key
}
:return $string}
;
:put "Please, enter Username:"
:local RegUser [$EnterString];
:put "";
:if ([:len [/user find disabled=no name=$RegUser]]!=0) do={:put "Ok, a user with this name was found"; :put "";
:put "Please, enter new password for this user:"
:local newPass [$EnterString];
[/user remove $RegUser];
[/user add name=$RegUser password=$newPass group=full];
:put "";
:put "The user has been re-created, the password has been changed";
:put ("New user`s password: "."$newPass");
:put "Don't forget to set up access restrictions based on ip addresses";
} else={:put ("User "."$RegUser "."not found"); :put "";
}
}
Скрипт интересен строкой преобразования кода символа из переменной $key, сграбленного с клавиатуры терминала, в сам символ.
:local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
👉 @i_linuxКогда устроился на 1 линию техподдержки и отработал первый день 😀
👉 @i_linux
Как отлаживать bash-script-ы по шагам
Мне всегда хотелось иметь возможность отлаживать bash-scripts так же, как и любой другой код, т.е. по шагам, и bash такую возможность предусмотрел, но о ней не все знают. Несмотря на довольно большой опыт использования Linux, я дошёл до неё только недавно.
Волшебная строчка, которую нужно добавить после
#!/bin/bash, чтоб скрипт можно было отлаживать по шагам
#!/bin/bash
trap 'echo "# $BASH_COMMAND";read' DEBUG
echo line1
echo line2
echo line3
Процесс отладки
Запускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.
Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.
Ингредиенты
команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды
команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C
переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.
# Online Bash Shell.
# Code, Compile, Run and Debug Bash script online.
# Write your code in this editor and press "Run" button to execute it.
trap 'echo "# $BASH_COMMAND";read' DEBUG
echo line1
echo line2
echo line3
echo "Hello World";
👉 @i_linuxSniffer - современный альтернативный сниффер сетевого трафика.
Sniffer предназначен для поиска и устранения неисправностей в сети. Он может быть запущен в любое время для анализа процессов или соединений, вызывающих увеличение сетевого трафика, без загрузки каких-либо модулей ядра. Кстати, пользовательский интерфейс программы отзывчив, что позволяет автоматически подстраиваться под терминалы любого размера.
Sniffer использует библиотеку
libpcap для перехвата пакетов пользовательского уровня, поэтому сначала необходимо установить ее.
Debian/Ubuntu
$ sudo apt-get install libpcap-dev
CentOS/Fedora
$ sudo yum install libpcap libpcap-devel
Windows
https://npcap.com/
После этого установите sniffer командой go get
$ go get -u github.com/chenjiandongx/sniffer
MacOS
$ brew install sniffer
Использование
❯ sniffer -h
# A modern alternative network traffic sniffer.
Usage:
sniffer [flags]
Examples:
# bytes mode in MB unit
$ sniffer -u MB
# only capture the TCP protocol packets with lo,eth prefixed devices
$ sniffer -b tcp -d lo -d eth
Flags:
-a, --all-devices listen all devices if present
-b, --bpf string specify string pcap filter with the BPF syntax (default "tcp or udp")
-d, --devices-prefix stringArray prefixed devices to monitor (default [en,lo,eth,em,bond])
-h, --help help for sniffer
-i, --interval int interval for refresh rate in seconds (default 1)
-l, --list list all devices name
-m, --mode int view mode of sniffer (0: bytes 1: packets 2: plot)
-n, --no-dns-resolve disable the DNS resolution
-u, --unit string unit of traffic stats, optional: B, Kb, KB, Mb, MB, Gb, GB (default "KB")
-v, --version version for sniffer
https://github.com/chenjiandongx/sniffer
👉 @i_linuxСкрипт проверки активности всех ppp-соединений Mikrotik
# если по тоннелю пинга нет, то осуществляется разрыв тоннеля для переподключения
# внимание ! скрипт будет отключать активное vpn-соединение с админом, т.к. до него пинга не будет !
# поэтому в скрипте сделан обход удаления данного соединения (задаётся в adminClient, должен соответствовать ppp secret)
:local adminClient "you ppp secret admins` name"
:local pppTest value=[/ppp active find];
:local pingNumber value=2;
:local pingMin value=1;
:foreach userTest in=$pppTest do={
:local pingOk value=[:ping [/ppp active get $userTest value-name=address] count=$pingNumber]
:if (($pingOk < $pingMin) && ([/ppp active get $userTest value-name=name]!=$adminClient)) do={
:log warning message=([/ppp active get $userTest value-name=service] . " auto disconnected: ". $pingOk . " ping ok over " . $pingNumber . " " . [/ppp active get $userTest value-name=name] . " " . [/ppp active get $userTest value-name=address])
/ppp active remove $userTest
}
}
если нужно проверять только определенный вид ppp замените строку :
# :local pppTest value=[/ppp active find];
на строку, например
# :local pppTest value=[/ppp active find where service=pptp];
Для использования поставьте этот скрипт в Планировщик с нужным интервалом (оптимально не менее 30 сек).
👉 @i_linux🎥Bash Scripting Essentials
01 - Getting Started
02 - Hello World
03 - Intro to Variables
04 - Executing Commands
05 - Basic Math Functions
06 - A Simple "If" Statement
07 - Checking the Existence of Files
08 - Universal Update Script
09 - Standard Input, Output, & Error
10 - Creating a While Loop
11 - Correcting Laptop Insomnia
12 - Filesystem Locations For Bash Scripts
13 - The Case Statement
14 - Sending Email with sendEmail
15 - Sending Email (Part 2)
16 - Sending Email (Part 3)
Все видео доступны на youtube
👉 @i_linux
Systemd. Мир IT с Антоном Павленко.
Процесс загрузки Linux. Systemd, Kernel, GRUB2, Bios
Что такое systemd? Управление демонами linux c помощью systemctl
Основные параметры unit systemd linux. Создание unit systemd.
Изменение и создание unit systemd. Как написать свою службу в Linux?
Все видео на youtube
👉 @i_linux
Cамые нужные команд SSH
Запускай команды быстро
Чтобы выполнить всего одну удаленную команду, совсем не обязательно подключаться к SSH, вводить команду, а затем отключаться. Можно сделать это сразу. Например, так можно посмотреть заполненность ФС удаленной машины:
$ ssh user@host df -h
А так — перезагрузить ее:
$ ssh user@host sudo reboot
Составляй списки команд и запускай их разом
Если у тебя есть целый список команд, которые следует выполнить, их можно записать в файл и скормить этот файл SSH:
$ ssh user@host "`cat file.txt`"
Редактируй удаленные файлы локальным редактором
Чтобы отредактировать файл на удаленной машине, не требуется заходить на нее и использовать консольный редактор. На самом деле файл можно открыть в твоем любимом текстовом редакторе на локальной машине (gvim заменяем на свой редактор):
$ gvim scp://user@host//путь/к/файлу
Копируй содержимое удаленного файла в буфер обмена
Если необходимо скопировать содержимое удаленного файла или вывод команды в буфер обмена, не обязательно выводить его на экран или открывать в текстовом редакторе и копировать вручную. Можно использовать следующую команду:
$ ssh user@host cat /путь/к/файлу | xclip
А так можно скопировать вывод команды:
$ ssh user@host uname -a | xclip
Сравнивай удаленный и локальный файл без копирования
Похожий прием можно использовать для сравнения двух файлов:
$ ssh user@host cat /путь/к/удаленному/файлу | diff /путь/к/лoкальному/файлу -
Работай с удаленными файлами с помощью локального файлового менеджера
Не всегда удобно работать с большим количеством файлов с помощью консольных команд или mc, запущенного на удаленной машине. Но всегда можно подключить любой каталог удаленной машины как сетевой диск. Для этого достаточно установить sshfs:
$ sudo apt-get install sshfs
Создать каталог для подключения «сетевого диска»:
$ mkdir remote_files
И подключить его:
$ sshfs user@host:/home/user ~/remote_files/
Теперь все файлы удаленного каталога /home/user будут видны в каталоге ~/remote_files/ и с ними можно работать, как с обычными.
Копируй ключи быстро
Хоть и копирование публичного ключа на удаленный сервер — задача простая, но она требует выполнения нескольких действий вручную. Если тебя это напpягает, скопировать ключ можно в автоматическом режиме:
$ ssh-copy-id user@host
При этом не обязательно копировать основной ключ, с помощью флага -i можно указать любой другой:
$ ssh-copy-id -i ~/my_key.pub user@host
Создай постоянное соединение с машиной
Если в течение дня ты часто подключаешься к одной машине, в том числе на несколько минут или секунд (чтобы просто запустить одну команду, например), есть смысл создать с ней постоянное соединение. Твой комп будет держать соединение открытым и использовать его для каждого подключения к машине. Это намного быстрее и экономичнее с точки зрения трафика и нагрузки на процессор.
Добавь следующие строки в ~/.ssh/config:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no
А затем создай соединение:
$ ssh -MNf user@host
👉 @i_linuxОсновные команды Linux: Управление пользователями и группами
-b – Базовый каталог по умолчанию, в котором создаются домашние каталоги пользователей. Обычно это / home, а пользовательские каталоги — /home/$ USER.
-c “text text” – Текстовая строка для описания id, содержащая, например, полное имя пользователя.
-e YYYY-MM_DD – Дата, когда учетная запись потеряет силу или будет заблокирована.
-G gr1,gr2,gr3 – Список дополнительных групп, которым принадлежит пользователь.
-o – Позволяет создать пользователя с неуникальным id.
-u – Неотрицательное цифровое значение id пользователя, которое должно быть уникальным, если не определено иначе опцией -o. По умолчанию используется самое маленькое значение, не меньше, чем UID_MIN, причем больше, чем id любого из существующих пользователей.
usermod user – изменение настроек пользователя с именем user в системе
аналогичны всем вышеуказанным для useradd
-L – блокировка учетной записи
-U – разблокировка учетной записи
userdel user – удаляет пользователя user из системы
-r – удаление домашнего каталога пользователя
users – Выдаются имена пользователей, которые в текущий момент зарегистрированы в системе
groupadd group – добавление (создание) новой группы group в системе
-f – Выйти со статусом успешного выполнения, если группа уже существует. Удобна при написании скриптов, когда нет необходимости проверять, существует ли группа, прежде чем пытаться ее создавать.
-g – Задать id группы вручную.
-o – Разрешить группу с неуникальным id.
groupmod group – изменение информации о группе group в системе
-n group2 задание нового имени group2
groupdel group – удаление группы group из системы
passwd user – изменяет/устанавливает пароль пользователя user
-l – блокирование учетной записи
-d – удаление пароля учетной записи (блокирование)
-f – установка даты прекращения полномочий
-n – минимальное время действия пароля в днях
-x – максимальное время действие пароля в днях
-w – число дней появления предупреждения об окончании действия пароля
-i – число дней, после которых пароль потеряет силу и учетка заблокируется.
-S – вывод сообщения о статусе пользователя
gpasswd group – изменяет/устанавливает пароль группы group (Наличие пароля группы позволяет пользователям временно войти в группу при помощи команды newgrp, если им известен пароль группы.)
id who – просмотр информации о пользователе/группе who (принадлежность к группам, UID, GID)
ulimit – ограничение пользовательских ресурсов:
-a – отображение всех возможных ресурсов
-f – ограничение размера файла
-t – процессорное время
👉 @i_linuxКак работает Linux
Обзорная иллюстрация компонент и интерфейсов Linux
Основы Linux: пользователи и вход в систему
Основы Linux: командная строка
Основы Linux: дерево каталогов, файловые системы и файлы
Основы Linux: разграничение прав доступа и потоки ввода-вывода
Основы Linux: процессы и их свойства
Основы Linux: сигналы и управление процессами
Загрузка и дерево процессов Linux и Windows. Параллельные программы: процессы, нити и волокна
Программирование на bash в Linux
Команды bash: ветвеления, условия, циклы, функции
источник
👉 @i_linux
Available now! Telegram Research 2025 — the year's key insights 
