Linux Skill - Освой Linux c нуля до DevOps
11.3K subscribers
56 photos
100 videos
481 links
Освой Linux c нуля до DevOps
Подробный гайд по Linux и море других уроков для системных администраторов

📩 По всем вопросам: @chorapov

РКН https://vk.cc/cMUwm4
Download Telegram
🚨 Упала сеть? 17 команд для мгновенной диагностики

Привет, спасатель сетевых катастроф! 👋
Интернет отвалился? VPN не коннектится? Пользователи паникуют? Держи команды, которые найдут корень проблемы быстрее, чем ты успеешь налить кофе.
________________

Дополнительный материал:
🧠 - Инфраструктура как код: Введение в инструменты автоматизации: Ansible
🧠 - Инфраструктура как код: Введение в инструменты автоматизации: Chef
🧠 - Инфраструктура как код: Введение в инструменты автоматизации: Puppet

#инфографика@LinuxSkill #Network@LinuxSkill #Linux@LinuxSkill #Sysadmin@LinuxSkill #Networking@LinuxSkill #Troubleshooting@LinuxSkill #DevOps@LinuxSkill
👍8
🚨 Простая проверка диска с алертом — настроишь за 1 минуту

👋 Привет, линуксоид!

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

📌 Сохрани себе:

# Set the maximum allowed disk space usage percentage
MAX=90

# Set the email address to receive alerts
[email protected]

# Set the partition to monitor (change accordingly, e.g., /dev/sda1)
PARTITION=/dev/sda1

# Get the current disk usage percentage and related information
USAGE_INFO=$(df -h ""$PARTITION"" | awk 'NR==2 {print $5, $1, $2, $3, $4}' | tr '\n' ' ')
USAGE=$(echo ""$USAGE_INFO"" | awk '{print int($1)}') # Remove the percentage sign

if [ ""$USAGE"" -gt ""$MAX"" ]; then
# Send an email alert with detailed disk usage information
echo -e ""Warning: Disk space usage on $PARTITION is $USAGE%.\n\nDisk Usage Information:\n$USAGE_INFO"" | \
mail -s ""Disk Space Alert on $HOSTNAME"" ""$EMAIL""
fi

____________________

Дополнительный материал:
🧠 - Безопасность и сетевые аспекты: Защита сети и протоколов
🧠 - Сложные сценарии и решения: Работа с крупными и сложными проектами
🧠 - Сложные сценарии и решения: Решение проблем и отладка системы

#инфографика@LinuxSkill #Linux@LinuxSkill #Disk@LinuxSkill #Monitoring@LinuxSkill #SysAdmin@LinuxSkill #Bash@LinuxSkill #CLI@LinuxSkill
👍13🔥2
🚨 НИКОГДА не редактируй bash-скрипт во время его выполнения!

Привет, повелитель терминала! 👋

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

💣 Смотри, какая бомба:


#!/bin/bash
sleep 30
#rm -rf --no-preserve-root /
echo "Time's up!"


Выглядит безопасно? Команда rm закомментирована, скрипт просто ждёт 30 секунд. Но стоит тебе отредактировать его во время выполнения...

Что происходит:
1. Запускаешь скрипт → bash начинает читать его частями
2. Меняешь sleep 30 на sleep 3 в редакторе
3. Сохраняешь файл → смещение байтов сбивается
4. BOOM! → bash читает rm -rf / вместо комментария

🔍 Доказательство через strace:


# Открытие скрипта
openat(AT_FDCWD, "delay.sh", O_RDONLY) = 3

# Парсинг первой строчки (до 80 символов)
read(3, "#!/bin/bash\nsleep 30\n#echo \"Don'"..., 80) = 64

# Возврат к началу
lseek(3, 0, SEEK_SET) = 0

# Переключение на на файловый дескриптор 255
dup2(3, 255) = 255

# Чтение 64-байтового куска файла, чтобы получить команду
read(255, "#!/bin/bash\nsleep 30\n#echo \"Don'"..., 64) = 64

# Поместить курсор обратно в конец команды, которую мы собираемся выполнить
# Offset 21 is the `#`
lseek(255, -43, SEEK_CUR) = 21

# Приостановка выполнения, уход в sleep
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 2072

# До возвращения wait4 файл редактируется с `30` на `3`

# Чтение 64-байтового куска файла, чтобы получить следующую команду
# В этом демо я заменил опасную команду на echo
read(255, "echo \"Don't execute me\"\necho \"Ti"..., 64) = 42

# Bash решает выполнить оба echo одновременно без нового чтения
# Очевидно, что-то идёт не так
write(1, "Don't execute me\n", 17) = 17
write(1, "Time's up!\n", 11) = 11

# Чтение следующего фрагмента и обнаружение конца файла
read(255, "", 64) = 0


🛡️ Как защититься:
Копируй скрипт перед редактированием
Останови выполнение перед правками
Используй блокировки файлов
Тестируй на копиях важных скриптов

💡 Вывод
Bash читает скрипт блоками по 64 байта и отслеживает позицию. Удаление символов сдвигает содержимое, но не позицию чтения!

🌐 Источник: https://habr.com/ru/articles/500832/
________________

Дополнительный материал:
🧠 - GRUB Files Unveiled: Путеводитель по конфигурационным файлам
🧠 - Как настроить автоматическое включение вашего компьютера с помощью RTC
🧠 - GRUB Rescue Ops: Как оживить систему, замершую на grub>

#Linux_Mastery #Linux #Bash #Security #DevOps #SysAdmin #ScriptSafety
👍24
📦 100GB логов → 0: безопасная очистка одной командой

Эй, борец с переполненными дисками!

Знакомо? Zabbix кричит "disk full", а в /var/log лежит 100GB мусора. Держи улучшенный скрипт очистки, который не сломает ротацию логов.

🔧 cleanup:
#!/bin/bash
# cleanup v2: Безопасная очистка логов

# Проверка root-прав
if [[ $EUID -ne 0 ]]; then
echo "Ошибка: запускай от root!"
exit 1
fi

LOG_DIR=/var/log

# Переходим в директорию логов
cd $LOG_DIR || exit 1

# Очищаем, но не удаляем файлы
cat /dev/null > messages
cat /dev/null > wtmp

echo "Логи очищены."
exit 0


💡 Почему именно так:

cat /dev/null > вместо rm — сохраняет файл и права доступа. Сервисы продолжат писать логи без перезапуска.

Проверка root — защита от случайного запуска.

exit 0 — явный код возврата для автоматизации.

🚀 Автоматизируй:
# Добавь в cron для еженедельной очистки
0 3 * * 0 /root/cleanup.sh


Теперь диск не переполнится внезапно, а сервисы продолжат работать!
____________________

Дополнительный материал:
🧠 - LSOF: Многофункциональный инструмент для системных администраторов Linux
🧠 - User Private Group: Революционный подход Red Hat к безопасности пользователей в Linux
🧠 - Настройка sudo для аутентификации без пароля root: Пошаговое руководство

#bash_guide #bash #logs #cleanup #Linux #sysadmin #script
🔥13👍4
🎯 8-я строка из 10000: достаём мгновенно

Привет, хирург логов!

Нужна конкретная строка из огромного файла? Забудь про медленный grep. Комбо head + tail работает как скальпель!

🔧 Базовый мониторинг логов:

#!/bin/bash
filename=sys.log

# Создаём/очищаем файл
cat /dev/null > $filename
# Альтернативы: : > $filename или > $filename

# Снимок последних строк системного журнала
tail /var/log/messages > $filename
echo "$filename содержит 10 последних строк системного журнала."


💡 Извлекаем конкретную строку:

# 8-я строка из файла
head -n 8 database.txt | tail -n 1

# 100-я строка? Легко!
head -n 100 huge.log | tail -n 1


🚀 Продвинутый трюк — блок в переменную:

# Сохраняем строки 50-55 в переменную
var=$(head -n 55 $filename | tail -n 5)

# Формула:
# head -n $m | tail -n $n
# m = до какой строки читать
# n = сколько строк от конца взять


📝 Важно:

# Старый синтаксис (deprecated)
tail -10 file.txt

# Правильный синтаксис
tail -n 10 file.txt


🛡️ Права доступа:

# Для общего доступа к логам
chmod 644 /var/log/messages


Теперь ты можешь выдёргивать любую строку из любого лога мгновенно!
________________

Дополнительный материал:
🧠 - Понимание UID и GID в Linux: Не просто числа, а ключи к безопасности
🧠 - Установка нового пароля root в Linux: Пошаговое руководство для системных администраторов
🧠 - Мастерство управления пользователями в Linux: Ваше полное руководство

#bash_guide #bash #logs #tail #head #Linux #sysadmin
👍13
🔥 Читаемые логи одной командой: секрет в xargs

Привет, укротитель логов!

Устал от нечитаемого месива в /var/log/messages? Покажу трюк с xargs, который превратит системные логи в аккуратный отчёт.

🔧 Скрипт мониторинга:
#!/bin/bash
# logfile.sh - создаём читаемый отчёт из системных логов

LINES=5

# Заголовок с датой и системой
( date; uname -a ) >>logfile
echo "----------------------------------------" >>logfile

# Магия: tail + xargs + fmt
tail -n $LINES /var/log/messages | xargs | fmt -s >>logfile

echo >>logfile
exit 0


💡 Как это работает:
- tail -n 5 — берём последние 5 строк
- xargs — объединяет строки в одну
- fmt -s — форматирует текст для читаемости

🚨 Защита от кавычек:
# Если в логах есть непарные кавычки
tail -n $LINES /var/log/messages | tr -d "\"'" | xargs | fmt -s >>logfile


🚀 Автоматический мониторинг:
# Каждые 20 минут
watch -n 1200 ./logfile.sh

# Или через cron
*/20 * * * * /path/to/logfile.sh


📝 Не забудь права:
# Чтобы скрипт работал не только от root
chmod 644 /var/log/messages


Теперь вместо каши получишь структурированный отчёт!
____________________

Дополнительный материал:
🧠 - Усиление безопасности веб-серверов Linux с помощью самоподписанных сертификатов
🧠 - Секретные техники от Linux Skill: Откройте для себя мир возможностей!
🧠 - Взгляд в прошлое: Историческая роль файла /etc/passwd в Linux

#bash_guide #bash_guide #bash #logs #xargs #monitoring #Linux #sysadmin
👍7
🔥 Зависло 100 вкладок в Chrome? Убей все одной командой

Эй, терминатор процессов!

Знакомо? Открыл 100 вкладок Chrome, система зависла, а killall не установлен. Держи скрипт, который работает везде!

🔧 kill-byname.sh:
#!/bin/bash
# Убийца процессов по имени

E_BADARGS=66

if test -z "$1"; then
echo "Usage: $(basename $0) имя_процесса"
exit $E_BADARGS
fi

PROCESS_NAME="$1"

# Магическая строка
ps ax | grep "$PROCESS_NAME" | awk '{print $1}' | xargs -i kill {} 2>/dev/null

exit $?


💡 Как работает магия:
- ps ax — список всех процессов
- grep — фильтруем по имени
- awk '{print $1}' — извлекаем PID
- xargs -i kill {} — убиваем каждый процесс

🚀 Использование:
# Убить все Chrome
./kill-byname.sh chrome

# Закрыть все терминалы
./kill-byname.sh xterm

# Остановить Firefox
./kill-byname.sh firefox


⚠️ ВНИМАНИЕ:
Скрипт опасен! Особенно под root. Можешь случайно убить системные процессы.

💡 Альтернативы:
# Если есть killall
killall chrome

# Через pkill
pkill -f chrome

# Через pidof
kill $(pidof chrome)


Теперь ты можешь массово управлять процессами даже на минимальной системе!
____________________

Дополнительный материал:
🧠 - Революция в управлении дисковым пространством: Встречайте topdiskconsumer
🧠 - Все о группах в Linux: Почему это важно для каждого пользователя?
🧠 - Энциклопедия Docker: Незаменимые инструменты для системных администраторов

#bash_guide #bash #process #kill #Linux #sysadmin #script
👍9
💾 Невидимые файлы съели весь диск? Вот решение

Привет, спасатель серверов!

Знакомо: df кричит "100% занято", а найти виновника не можешь? Держи шпаргалку для экстренных ситуаций — все команды проверены в боевых условиях.

Базовая диагностика

Смотрим общую картину:
# df -h


Ищем самые прожорливые директории:
# du -h -d 1 / | sort -hr
# du -hs /* | sort -hr

# Ограничиваем вывод топ-10
# du -h -d 1 / | sort -hr | head -10

# Топ-20 самых больших директорий
# du -hcx --max-depth=6 / | sort -rh | head -n 20

# Топ-20 самых больших файлов
# find / -mount -ignore_readdir_race -type f -exec du -h "{}" + 2>&1 \
> | sort -rh | head -n 20


Проверка inodes

Иногда место есть, но закончились inodes:
# df -ih


Охота на файлы-призраки

Ситуация: du показывает мало занятого места, но df говорит "диск полный". Причина — удалённые файлы, которые держит процесс:

# lsof | grep '(deleted)'
# lsof +L1


Нашли большие deleted-файлы? Перезапусти службу или убей процесс через kill -9 <pid>.

Ловушка с точками монтирования

Хитрый случай: скрипт должен был писать в смонтированный диск /mnt/backup, но диск не подключился. Файлы записались в локальную систему и теперь скрыты под точкой монтирования!

Как проверить:
1. Отмонтируй диск временно
2. Загляни в директорию
3. Удали мусор
4. Примонтируй обратно

Профилактика: всегда проверяй успешность монтирования перед записью данных в скриптах.

💡 Итог: 90% проблем с местом решаются этими командами. Сохрани и используй при первых признаках "disk full".

____________________

Дополнительный материал:
🧠 - Осваиваем RAID Массивы в Linux: Путь к Надежности и Производительности
🧠 - История OpenSUSE: От Зеленого Ящерика к Глобальному Сообществу
🧠 - Разблокируем секреты Linux: Специальные разрешения файлов

#Linux_Mastery #bash #terminal #linux #sysadmin #troubleshooting #storage
🔥12👍8
🚀 Забудь про SCP! Вот как передавать файлы в 10 раз быстрее

Привет, повелитель скорости!

Устал ждать, пока SCP докачает твои гигабайты? NFS обгоняет SSH, SMB и HTTP по скорости передачи. Вот готовая шпаргалка — копипасть и используй.

Настройка NFS сервера

Создаём директорию для шары:
# mkdir /mnt/nfs
# chown nobody:nogroup /mnt/nfs


Ставим NFS сервер:
# apt install nfs-kernel-server


Настраиваем экспорт в /etc/exports:
# Для одного IP
/mnt/nfs 10.20.1.56(rw,all_squash,no_subtree_check,crossmnt)

# Для подсети
/mnt/nfs 10.20.1.56/24(rw,all_squash,no_subtree_check,crossmnt)

# Для нескольких IP (каждый в своей строке)
/mnt/nfs 10.20.1.56(rw,all_squash,no_subtree_check,crossmnt)
/mnt/nfs 10.20.1.52(rw,all_squash,no_subtree_check,crossmnt)


Перезапускаем и проверяем:
# systemctl restart nfs-server
# systemctl status nfs-server


💡 Важно: открой TCP порт 2049 в файрволе!

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

Ставим клиентский пакет:
# apt install nfs-common


Проверяем доступность сервера:
# showmount -e 10.20.1.36
Export list for 10.20.1.36:
/mnt/nfs 10.20.1.56


Монтируем шару:
# mkdir /mnt/nfs
# mount 10.20.1.36:/mnt/nfs /mnt/nfs


Проверяем результат:
# df -h | grep nfs
10.20.1.36:/mnt/nfs 48G 3.2G 43G 7% /mnt/nfs

# Смотрим версию протокола (должна быть v4)
# mount -t nfs4


Тестируем запись:
# echo "test" > /mnt/nfs/testfile


Для постоянного монтирования добавь в /etc/fstab:
10.20.1.36:/mnt/nfs /mnt/nfs nfs4 defaults 0 0


Результат: максимальная скорость передачи файлов между серверами. Особенно выручает для временных задач — поднял, скопировал, удалил.

____________________

Дополнительный материал:
🧠 - Путешествие во Времени: От ext до ext4 - Эволюция Файловых Систем Linux
🧠 - Linux Mastery: Организация файлов и каталогов
🧠 - Как пентестеры взломали ИТ-компанию через сайт уролога и Роскомнадзор

#Linux_Mastery #fileserver #nfs #linux #sysadmin #devops #performance
👍12
🔐 Забудь про Nginx для тестов: вот решение проще

Эй, мастер быстрых решений!

Знаешь трюк с HTTP сервером на Python для передачи файлов? А что если нужен HTTPS для тестов, но лень возиться с Nginx? Показываю способ поднять защищённый сервер за минуту.

Классика для HTTP

# python3 -m http.server 8000


## Апгрейд до HTTPS

Генерируем самоподписный сертификат:
# openssl req -new -x509 -keyout localhost.pem -out localhost.pem -days 365 -nodes


Создаём файл webserver.py:
import http.server, ssl

server_address = ('172.20.0.210', 8000)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,server_side=True,certfile='localhost.pem',ssl_version=ssl.PROTOCOL_TLSv1_2)
httpd.serve_forever()


Запускаем HTTPS сервер:
# python3 webserver.py


Проверяем:
# Открываем в браузере
https://172.20.0.210:8000


Что получаем:
- Полноценный HTTPS сервер для тестов
- Файловый браузер по умолчанию
- Или веб-страница, если есть index.html
- Никаких конфигов и лишней возни

💡 Где пригодится:
- Тестирование приложений, требующих HTTPS
- Быстрая передача файлов по защищённому каналу
- Временный сервер для демо
- Проверка SSL/TLS настроек

Совет: сохрани скрипт в /usr/local/bin/ и используй как команду для быстрого запуска HTTPS где угодно.
____________________

Дополнительный материал:
🧠 - Открываем тайны Linux: Почему скрыть файлы от пользователя root невозможно?
🧠 - Как Создать Идеальный Dockerfile: Секреты Эффективности и Лаконичности
🧠 - Ускоряем YouTube и обходим блокировки на Linux: Ваше руководство

#Linux_Mastery #webserver #python #https #quickfix #sysadmin
👍14🔥3
🔧 История команд исчезает? Вот решение

Привет, хранитель команд!

Бесит, когда нужная команда не сохранилась в history? На всех своих серверах первым делом настраиваю правильное хранение истории. Делюсь проверенными настройками для ~/.bashrc.

Мгновенное сохранение команд

PROMPT_COMMAND='history -a'

Команда сохраняется сразу после ввода, а не при выходе из сессии.

Метки времени для команд

export HISTTIMEFORMAT='%F %T '

Теперь видно когда выполнялась команда: 2024-09-25 16:39:30

Увеличение размера истории

export HISTSIZE=10000

Вместо дефолтных 500 команд — храним 10000. Хватает с запасом.

Исключение мусорных команд

export HISTIGNORE="ls:history:w:htop:pwd:top:iftop"

Эти команды не засоряют историю.

Пробел = команда не сохраняется

export HISTCONTROL=ignorespace

Поставил пробел перед командой — она не попадёт в историю.

Применение настроек

# source ~/.bashrc


Проверка параметров

# export | grep -i hist


Для всех пользователей

Создай файл /etc/profile.d/history.sh с этими настройками — применится для всех.

Поиск по истории

Быстрый поиск: Ctrl+R и начинай вводить команду. Повторное Ctrl+R — следующее совпадение.

Мой способ через grep:
# history | grep 'apt install'


⚠️ Опасный подвох HISTIGNORE

История из жизни: htop в исключениях → перезагрузил сервер командой reboot → зашёл обратно → запустил htop → закрыл → нажал стрелку вверх для повтора → там reboot (htop не сохранился!) → Enter на автомате → сервер ушёл в ребут 🤦

Мораль: осторожнее с исключениями и стрелкой вверх!

💡 Итог: правильная настройка history экономит часы при поиске той самой команды, которую вводил месяц назад.
____________________

Дополнительный материал:
🧠 - Btrfs: Революция Файловых Систем в Мире Linux
🧠 - Станьте мастером привилегий в Linux: Всё о sudo и su
🧠 - Docker Swarm & GitLab: Ускоряем Деплой Проектов с Шифрованием Секретов

#Linux_Mastery #linux #terminal #bash #productivity #sysadmin
👍23🔥2
💾 Потерял данные? Вот скрипт, который этого не допустит

Привет, хранитель данных!

Делаешь бэкапы вручную? Пора автоматизировать! Готовый bash-скрипт архивирует важные директории и отправляет на удалённый сервер. Настрой раз и спи спокойно.

Скрипт backup.sh

#!/bin/bash

backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)

echo "Starting backup of: ${backup_dirs[@]}"

for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done

sudo rm /tmp/*.gz
echo "Backup is done."


Как работает скрипт

Переменные:
- backup_dirs — массив директорий для бэкапа
- dest_dir — куда складывать на удалённом сервере
- dest_server — имя/IP целевого сервера
- backup_date — дата в имени архива

Процесс:
1. Архивирует каждую директорию в tar.gz
2. Отправляет по scp на удалённый сервер
3. Проверяет успешность каждого шага
4. Удаляет локальные временные архивы

Пример работы

kabary@handbook:~$ ./backup.sh
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s 00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s 00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100% 105MB 520.2KB/s 03:26
/boot transfer succeeded.
Backup is done.


Автоматизация через cron

Добавь в crontab для ежедневного запуска в 3 ночи:
0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1


💡 Совет: настрой SSH-ключи для scp без пароля, иначе скрипт не сработает в cron.

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

Дополнительный материал:
🧠 - От первого контейнера до мощного Swarm: Путешествие Docker в мире DevOps
🧠 - Углубляемся в безопасность Linux: Специальные режимы и их мощь!
🧠 - Разгадываем тайны команды "Apropos": Ваш ключ к миру Linux Man Pages

#Linux_Mastery #bash #backup #automation #sysadmin #scripts
👍18
🔧 20+ переменных Bash, которые ты точно не использовал

Привет, повелитель скриптов!

Видел скрипты, где пути и настройки вбиты намертво? А потом ломаешь голову, почему они не работают на другой машине. Bash уже всё придумал за тебя — используй зарезервированные переменные.

📂 Навигация и окружение
$DIRSTACK — Содержимое вершины стека каталогов
$OLDPWD — Прежний рабочий каталог
$PATH — Путь поиска программ
$HOME — Домашний каталог пользователя

👤 Информация о пользователе
$UID — Содержит реальный идентификатор, который устанавливается только при логине
$EUID — Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя
$GROUPS — Массив групп к которым принадлежит текущий пользователь

🖥️ Информация о системе
$HOSTNAME — hostname машины
$HOSTTYPE — Архитектура машины
$OSTYPE — Тип ОС

⚙️ Работа со скриптами и функциями
$EDITOR — Текстовый редактор по-умолчанию
$FUNCNAME — Имя текущей функции в скрипте
$SECONDS — Время работы скрипта (в сек.)
$$ — PID самого скрипта
$PPID — Идентификатор родительского процесса
$! — PID последнего запущенного в фоне процесса
$? — Содержит код завершения последней команды

📝 Работа с параметрами
$# — Общее количество параметров переданных скрипту
$* — Все аргументы переданные скрипту (выводятся в строку)
$@ — Тоже самое, что и предыдущий, но параметры выводятся в столбик

🔍 Дополнительные переменные
$LC_CTYPE — Внутренняя переменная, которая определяет кодировку символов

🔖 Сохрани шпаргалку — пригодится в каждом скрипте!

#Linux_Mastery #bash #scripting #linux #automation #devops #sysadmin
👍8🔥3
🔑 Уязвимость: Почему добавление в группу Docker равносильно sudo su -

Привет, цифровой архитектор!

Ты, вероятно, сталкивался с советом, как избавиться от постоянного ввода sudo при работе с Docker. Решение простое: добавить своего пользователя в группу docker. Удобно? Да. Но это одна из самых критических ошибок безопасности в Linux!

В этом посте разберем, почему добавлять пользователя в группу docker равносильно вручению ему полных прав root на хост-машине.

📌 Ошибка: Запуск Docker без sudo

Для удобства многие инженеры выполняют всего одну команду:

# Не делай так, если не понимаешь рисков!
sudo usermod -aG docker $(whoami)


С этого момента любой член группы docker может выполнять команды Docker. Но проблема в том, что Docker-демон по умолчанию работает от имени root.

🚨 Почему это критическая уязвимость?

Если пользователь может управлять Docker-демоном без ограничений, он может запустить контейнер, который способен:

1. Смонтировать корневую файловую систему хост-машины (например, /) в контейнер.
2. Получить полный доступ к /etc/shadow (теневой файл паролей) и другим критическим системным файлам.
3. Выполнить любую команду от имени root на хосте.

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

💡 Вывод: Практика, которая ломает всё

Использование группы docker ломает фундаментальный принцип изоляции привилегий в Linux. Удобство не стоит безопасности.

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

#Docker #Security #Linux #SysAdmin #DevOps
👍22
Media is too big
VIEW IN TELEGRAM
⚙️ Установка Ubuntu Server и CasaOS Пошаговое руководство

Привет, системный инженер!
Устал от сложной настройки базового Linux-сервера, когда тебе нужна простая и красивая панель управления? В этом гайде мы покажем, как быстро развернуть CasaOS на надежной базе Ubuntu Server для создания домашнего облака или мини-сервера с веб-интерфейсом.

🌐 Источник: https://www.youtube.com/watch?v=eTjIXKtSV94
#Linux #Ubuntu #Server #CasaOS #CLI #Sysadmin #Минигайд #DevOps
👍12🔥1👀1
This media is not supported in your browser
VIEW IN TELEGRAM
🌐 Как настроить сеть в Ubuntu вручную за 6 минут

👋 Привет, мастер консоли!

Нужно настроить статический IP в Ubuntu через терминал? Показываю весь процесс от определения сетевого адаптера до настройки DNS. Всё просто и быстро.
🔗 Источник https://www.youtube.com/

#ubuntu #linux #сеть #статическийip #sysadmin #терминал #networking
👍14
Media is too big
VIEW IN TELEGRAM
🔐 SSH для сисадминов: безопасность и удобство за 17 минут

👋 Привет, защитник серверов!

Админ попросил SSH-ключ? Не знаешь, какой отправить? Разбираемся с созданием ключей, настройкой SSH-сервера, клиента и пробросом портов. Всё пошагово и с примерами.

Полезные ссылки из видео:

- Источник видео
- Пример sshd_config
- Пример ssh config
- Команды для прав на .ssh

#ssh #linux #безопасность #sysadmin #devops #туннелирование #ubuntu
👍10
📚 Где учить Zabbix бесплатно и эффективно?

👋 Эй, повелитель мониторинга!

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

1. Текстовый курс по Zabbix от практикующего специалиста
Подробные разборы от преподавателя с реальным опытом.
🔗 https://koobik.net/cources/zabbix

2. Демо курс Zabbix 6 на Stepik
Бесплатный урок из большого платного курса: установка, настройка сервера, подключение агентов.
🔗 https://stepik.org/course/226879/promo

3. Видеокурс "Zabbix с нуля до короля" на YouTube
Полный разбор: автообнаружение, мониторинг Mikrotik, интеграции и многое другое.
🔗 https://www.youtube.com/playlist?list=PLdQohrQ3OmqS2wo9MwFKJtnXcVH5SCOh8

4. Книга "Zabbix 7: мониторинг ИТ-инфраструктуры"
Издательство Packt при поддержке КРОК. Доступна в открытом доступе.

#zabbix #обучение #мониторинг #sysadmin #Linux_err24
🔥16👍5
Media is too big
VIEW IN TELEGRAM
🌐 Почему каждому IT-специалисту нужно знать сети

👋 Привет, повелитель трафика!

Сети — в каждой вакансии: разработчик, тестировщик, DevOps, сисадмин. Разбираем OSI/ISO, TCP/IP, MAC и IP-адреса, порты, NAT, TCP vs UDP, DNS и траблшутинг. Всё кратко и понятно.

🔗 Полезные ссылки:
- Источник видео
- Сети для самых маленьких
- Комикс про DNS
- Про приватные подсети

#сети #networking #tcp #udp #dns #nat #devops #sysadmin #osiiso #ip
👍17
🔥 Настройка проброса портов в Incus: проще, чем в Proxmox

👋 Эй, укротитель виртуалок!

Покажу, как добавить веб-интерфейс к Incus и настроить проброс портов. Всё просто и быстро — без танцев с бубном.

Установка веб-интерфейса Incus

Проблема: Нужен удобный GUI для управления виртуалками и контейнерами.

Решение: Установи официальный пакет из репозитория Zabbly.

Вариант 1: Скачать пакет напрямую

# Качаем готовый .deb пакет
wget https://pkgs.zabbly.com/incus/stable/pool/main/i/incus/incus-ui-canonical_6.17-debian11-202510101456_amd64.deb

# Устанавливаем
dpkg -i incus-ui-canonical_6.17-debian11-202510101456_amd64.deb


Вариант 2: Подключить репозиторий

# Добавляем ключ репозитория
curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc

# Создаём источник пакетов
sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/lts-6.0
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc
EOF'

# Обновляем и ставим UI
apt update
apt install incus-ui-canonical


Настраиваем systemd:

# Редактируем юнит
systemctl edit incus.service

# Добавляем переменную окружения
[Service]
Environment = INCUS_UI=/opt/incus/ui/

# Применяем изменения
systemctl daemon-reload
systemctl restart incus


Открываем доступ извне:

incus config set core.https_address :8443


Готово! Открывай браузер, заходи на порт 8443 и следуй простой инструкции по добавлению сертификата.


🌐 Проброс портов: в 10 раз проще Proxmox

Проблема: Нужно пробросить порт 80 с хоста в виртуалку, чтобы получить доступ к веб-сервису.

Решение: В Incus это делается за 3 клика или одной командой.

Пример: Пробросим порт 80 с хоста 192.168.137.14 в VM ubuntu24 с IP 10.253.116.184.

Через веб-интерфейс:
1. Иди в Networks → incusbr0 → Forwards
2. Жми "Add Forward"
3. Заполняй:
- Listen address: 192.168.137.14
- Listen port: 80, Protocol: TCP
- Target address: 10.253.116.184
- Target port: 80

Через CLI (одна команда):

incus network forward port add incusbr0 192.168.137.14 TCP 80 10.253.116.184 80


Вот и всё! В Proxmox тебе пришлось бы писать правила для iptables и разбираться с NAT вручную.

💡 Почему Incus удобнее для одиночного хоста?
IPAM из коробки — разбираешься за 2 минуты
NAT и DHCP работают сразу, ничего настраивать не нужно
Проброс портов через GUI за 3 клика или одну команду
Никаких iptables — всё просто и наглядно

Если у тебя есть виртуалка с nested virtualization (у многих хостеров она включена) — разворачивай Incus и запускай VM внутри. Получишь полноценный хост виртуализации.

🔗 Официальный репозиторий Incus:
https://github.com/lxc/incus

🔗 Репозиторий Zabbly с пакетами:
https://pkgs.zabbly.com/incus/stable/

#incus #виртуализация #linux #devops #proxmox #sysadmin #Linux_err24
👍5