BashTex | Linux
2.49K subscribers
44 photos
8 videos
274 links
Авторский канал для тех, кто хочет глубже погрузиться в мир Linux.

Подойдет для разработчиков, системных администраторов и DevOps

Реклама: @dad_admin
Download Telegram
Bash-сборка .deb пакета из локального проекта с автогенерацией changelog

Хочешь упаковать свой скрипт, бинарник или мини-сервис в .deb, не лезя в dh-make и ручное правописание changelog? Делается это всего за пару минут с bash-автоматизацией.

▪️ Структура проекта. Пример для утилиты mytool:


mytool/
├── usr/
│ └── local/
│ └── bin/
│ └── mytool
└── DEBIAN/
└── control


▪️ DEBIAN/control (пример)


Package: mytool
Version: 1.0.0
Section: utils
Priority: optional
Architecture: all
Maintainer: You <[email protected]>
Description: Утилита для всего


▪️ Генерация changelog из git


generate_changelog() {
git log -n 10 --pretty=" * %s (%h)" > changelog.txt
echo "mytool (1.0.0) stable; urgency=low" | cat - changelog.txt > DEBIAN/changelog
rm changelog.txt
}


▪️ Сборка .deb


build_deb() {
chmod -R 755 mytool/DEBIAN
dpkg-deb --build mytool
}


▪️ Автоматизация в bash


#!/bin/bash
set -e

PKG_DIR="mytool"
VERSION="1.0.0"
PKG_NAME="mytool_${VERSION}.deb"

generate_changelog() {
git log -n 10 --pretty=" * %s (%h)" > "$PKG_DIR/DEBIAN/changelog"
}

build_deb() {
chmod -R 755 "$PKG_DIR/DEBIAN"
dpkg-deb --build "$PKG_DIR" "$PKG_NAME"
echo "Пакет создан: $PKG_NAME"
}

generate_changelog
build_deb


Теперь можно установить пакет через dpkg -i mytool_1.0.0.deb, а в /usr/local/bin/ появится твой скрипт.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
Симуляция транзакций в Bash

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

▪️ Пример: изменение конфигов с возможностью отмены


#!/bin/bash
set -euo pipefail

CONFIG="/etc/myapp/config.conf"
BACKUP="/tmp/config.conf.bak.$RANDOM"

# Создаём резервную копию
cp "$CONFIG" "$BACKUP"

# Обработчик при ошибке
rollback() {
echo "Ошибка! Откатываем изменения..."
cp "$BACKUP" "$CONFIG"
echo "Конфиг восстановлен."
}
trap rollback ERR

echo "Обновляем конфиг..."
# Имитация изменения
echo "enable_feature=true" >> "$CONFIG"

# Имитация ошибки
false # или команда, которая может упасть

echo "Конфиг успешно обновлён"
rm "$BACKUP"


▪️ Объяснение:

📍 trap rollback ERR - ловит любую ошибку
📍 set -euo pipefail - строгий режим, ошибки не скрываются
📍 Копия - это наша "точка восстановления"
📍 После успешного выполнения - копия удаляется

▪️ Применение:

Обновление конфигов
Копирование и изменение сервисных файлов
Манипуляции с crontab, systemd, hosts, fstab
Авторазвертывание с откатом при сбое


Это простая, но классная техника: bash-транзакции как ручной аналог ACID.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
This media is not supported in your browser
VIEW IN TELEGRAM
Пушистый сделал правильный выбор

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11🫡1
Запрет доступа к конфигурационным файлам через AppArmor

Даже если у вас настроены права доступа на конфиги (/etc/shadow, /etc/ssh/sshd_config, /etc/fstab), это не исключает попыток обхода через эксплойты или скомпрометированные процессы. Решение: AppArmor + аудит + реакция.

1️⃣ Базовый профиль AppArmor. Пример для блокировки доступа к sshd_config сторонними процессами:


# /etc/apparmor.d/usr.local.block-ssh-access
#include <tunables/global>

/usr/local/bin/* {
deny /etc/ssh/sshd_config r,
}


Разрешаем запуск всего в /usr/local/bin, но явно запрещаем доступ к sshd_config.

▪️ Активация профиля


sudo apparmor_parser -r /etc/apparmor.d/usr.local.block-ssh-access


Профиль будет применен сразу.

Проверка:


aa-status


2️⃣ Анализ логов AppArmor. Все попытки нарушения будут фиксироваться в dmesg или /var/log/kern.log / /var/log/syslog:

Пример:


audit: type=1400 audit(…): apparmor="DENIED" operation="open" profile="/usr/local/bin/myscript" name="/etc/ssh/sshd_config"


3️⃣ Скрипт для анализа и алерта


#!/bin/bash
LOG="/var/log/syslog"
ALERT="/var/log/apparmor_violations.log"

grep "apparmor=\"DENIED\"" "$LOG" | grep "/etc/ssh/sshd_config" >> "$ALERT"

if [[ -s $ALERT ]]; then
echo "[ALERT] Попытка доступа к sshd_config:"
cat "$ALERT"
> "$ALERT" # Очистка после отчёта
fi


Можно запустить через cron или systemd-timer.

Зачем это нужно:

📍 Ужесточение защиты конфигов от неожиданных процессов;
📍 Мониторинг попыток обхода прав через утилиты;
📍 Интеграция с TG или почтой для оповещений

BashTex 📱 #bash #security
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
🎉 С днем системного администратора! 🎉

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

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

Буду короток: пусть в логах будет чисто, аптайм радует глаз, а пользователи не беспокоят в пятницу вечером. А еще - стабильных обновлений, бесшумных серверов и свободного времени для себя.

За вас, сисадмины! С праздником! 🎆

BashTex 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🫡4
Скрытые сенсоры системы в скриптах

Когда bash-скрипт работает в продакшене, важно понимать окружение: доступные ресурсы, нагрузку, ограничения. Знакомимся: getconf, ulimit, vmstat, iostat - системные команды, которые можно встраивать прямо в bash для более "умных" решений.

▪️ getconf: узнать параметры системы


echo "Page size: $(getconf PAGESIZE)"
echo "Максимум аргументов в командной строке: $(getconf ARG_MAX)"


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

▪️ ulimit: узнать и задать ограничения


echo "Открытых файлов можно: $(ulimit -n)"
ulimit -c 0 # Запретить core dumps


Полезно перед форком процессов: не дайте скрипту уронить систему из-за 10000 открытых файлов.

▪️ vmstat: мониторинг памяти и нагрузки


vmstat 1 2 | tail -1 | awk '{print "Свободная память: " $4 " KB, ожидание I/O: " $16}'


Используй для самодиагностики скриптов: если скрипт замечает, что система в swap - можно приостановить запуск тяжелых задач.

▪️ iostat: здоровье диска


iostat -dx 1 2 | grep sda | tail -1 | awk '{print "IO util: " $NF "%"}'


Если util% > 90 - диск перегружен. Скрипт может решить подождать или отложить копирование.

▪️ Пример: скрипт отложенного запуска при перегрузке


wait_for_idle() {
while :; do
util=$(iostat -dx 1 2 | awk '/sda/ {u=$NF} END{print int(u)}')
[[ $util -lt 50 ]] && break
echo "Диск занят ($util%), ждём..."
sleep 5
done
}


Скрипты могут быть "умными", если читают данные от системы: не запускай, если ресурсов нет, не ломай лимиты.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Автоматическое обновление /etc/hosts из внешнего списка блокировки рекламы

Хотите заблокировать рекламу, трекеры и телеметрию на уровне всей системы, без прокси и сторонних приложений? Достаточно обновлять /etc/hosts из надежных источников, таких как someonewhocares.org или StevenBlack. И все это можно автоматизировать с bash.

🛠 Скрипт обновления /etc/hosts


#!/bin/bash
set -euo pipefail

# Источник обновленного hosts-файла
URL="https://someonewhocares.org/hosts/hosts"

# Временный файл
TMP="/tmp/hosts_blocklist"

# Бэкап текущего hosts
cp /etc/hosts "/etc/hosts.bak.$(date +%s)"

# Скачиваем и фильтруем список
curl -s "$URL" | grep -vE '^#|^$' > "$TMP"

# Объединяем с локальной частью
{
grep -E "^127\.0\.0\.1|^::1" /etc/hosts.bak.* | head -n 2
echo -e "\n# 🔒 AdBlock entries:"
cat "$TMP"
} > /etc/hosts

echo "/etc/hosts обновлен. Всего $(wc -l < "$TMP") заблокированных адресов."


▪️ Автоматизация через cron. Добавим задачу раз в неделю:


(crontab -l; echo "0 4 * * 0 /usr/local/bin/update-hosts.sh") | crontab -


Преимущества:

Блокировка на уровне ОС - работает в браузерах, терминале, приложениях;
Никаких прокси, VPN, расширений;
Работает даже в headless-системах.

🌟 Редактирование /etc/hosts требует root-прав, а некоторые адреса могут ломать нужные функции (whitelist нужно продумывать).

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
Управление псевдотерминалами

Псевдотерминалы (PTY) - это то, что позволяет запускать оболочки, эмулировать сессии и автоматизировать взаимодействие с CLI-программами, которые ждут ввода. В linux есть несколько инструментов, которые можно использовать для работы с ними.

▪️ script - захват сессии в PTY


script -q -c "top -n 1" session.log


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

Полезно: для логгирования; обхода нестандартного поведения программ без TTY.

▪️ socat - соединение PTY с чем угодно. Создание виртуальной пары PTY-устройств:


socat -d -d pty,raw,echo=0 pty,raw,echo=0


Это выведет два устройства /dev/pts/X и /dev/pts/Y, которые можно использовать, например, чтобы связать скрипт и программу, как будто они "болтают" друг с другом.

Применения: имитация COM-портов; отладка CLI-программ; организация проброса ввода/вывода.

▪️ expect - автоматизация интерактивных CLI


#!/usr/bin/expect -f

spawn ssh user@host
expect "password:"
send "supersecret\r"
interact


expect ждет определенный вывод и отправляет нужный ввод. Это незаменимо, когда скрипт должен работать с программой, которая не поддерживает аргументы, только ручной ввод.

Когда это нужно?

📍 автоматизация SCP, FTP, SSH при отсутствии ключей;
📍 создание тестов CLI-интерфейсов;
📍 запуск GUI-оберток над TUI-программами;
📍 обход "упрямых" команд, требующих TTY (sudo, passwd, mysql, и др.);

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Создание honeypot-директории с мониторингом через inotify

Honeypot-директория - это ловушка для злоумышленников: специальная папка, куда никто не должен лазить, но если вдруг кто-то туда сунулся - ты узнаешь первым. С помощью inotifywait и bash можно создать простую систему наблюдения за такими "приманками".

1️⃣ Создаем honeypot-директорию


mkdir -p /opt/.honeypot
chmod 700 /opt/.honeypot


Можно добавить туда пару "интересных" файлов: passwords.txt, backup.tar.gz.

2️⃣ Скрипт для мониторинга


#!/bin/bash
WATCH_DIR="/opt/.honeypot"
LOG="/var/log/honeypot_access.log"

inotifywait -m -e access,modify,create,delete "$WATCH_DIR" --format '%T %w %f %e' --timefmt '%F %T' |
while read event; do
echo "[ALERT] $event" >> "$LOG"
echo "[ALERT] Honeypot accessed: $event"
# Можно добавить: уведомление в TG, systemd-notify и т.д.
done


Этот скрипт не завершится, пока не остановлен вручную - запускай как systemd-сервис или в screen/tmux.

Почему это полезно?

📍 Выявление локальных злоумышленников или скомпрометированных процессов;
📍 Алерт при попытке доступа даже от root, если забыли, что это ловушка;
📍 Возможность записывать все действия, включая дату, время и тип события;

BashTex 📱 #bash #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Может найдешь время поговорить о Linux?

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13🔥5
Рекурсивная замена в файлах через sed без temp-файлов

Иногда нужно заменить строку или шаблон во всех файлах директории, но без создания временных файлов, лишнего мусора и *.bak. Обычно sed -i решает задачу, но как это сделать рекурсивно, да еще и аккуратно?

▪️ Один-liner: заменить https:// на https:// во всех .conf файлах


find . -type f -name "*.conf" -exec sed -i 's|https://|https://|g' {} +


-i делает замену на месте.
{} - текущий файл, + - запускает sed с пакетами файлов (быстрее, чем по одному).

А если sed без -i (например, BSD/macOS)? Тогда делаем замену через perl:


find . -type f -name "*.conf" -exec perl -pi -e 's|https://|https://|g' {} +


Работает без временных файлов и .bak.

▪️ Хочешь dry-run? Добавь -print в find и убери -i:


find . -type f -name "*.conf" -print -exec grep -H 'https://' {} \;


▪️ Рекурсивная замена с маской и шаблоном


PATTERN="TODO"
REPLACE="Done"

find ./src -type f -name "*.txt" -exec sed -i "s/${PATTERN}/${REPLACE}/g" {} +


⭐️ Можно применять для:

📍 массовая правка конфигов;
📍 удаление старых ссылок;
📍 миграция путей или параметров;
📍 зачистка TODO/DEBUG в исходниках.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Ротация логов с датой и размером: гибридный подход

Стандартные утилиты вроде logrotate умеют ротацию по времени или по размеру, но что если нужно оба условия? Например: хочешь сохранять логи по дате, но если они перевалили за 100 МБ - сразу ротация, не дожидаясь полночи.

Создаем лог-файл вида: myapp_YYYYMMDD.log, и если он >100M - переименовываем с суффиксом _overflow.

🛠 Пример скрипта:


#!/bin/bash
LOG_DIR="/var/log/myapp"
MAX_SIZE=$((100 * 1024 * 1024)) # 100 MB
TODAY=$(date +%Y%m%d)
LOG_FILE="${LOG_DIR}/myapp_${TODAY}.log"

mkdir -p "$LOG_DIR"
touch "$LOG_FILE"

# Проверка размера
if [[ -f "$LOG_FILE" ]]; then
FILE_SIZE=$(stat -c%s "$LOG_FILE")
if (( FILE_SIZE > MAX_SIZE )); then
TS=$(date +%H%M%S)
mv "$LOG_FILE" "${LOG_FILE%.log}_overflow_${TS}.log"
touch "$LOG_FILE"
echo "[INFO] Перемещен переполненный лог-файл: ${LOG_FILE%.log}_overflow_${TS}.log"
fi
fi


▪️ Где использовать? В cron, например:

*/10 * * * * /usr/local/bin/rotate-mixed.sh


В systemd timer для более точного контроля

🌟 В итоге получается, что скрипт не ждет полуночи - реагирует на объем, при этом логи всегда по дате и простой, не требует logrotate.conf

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
А как иначе?

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3🫡3😁2
mapfile + grep + process substitution: тройка для работы с потоками

Когда нужно обработать большой поток данных, отфильтровать его и получить доступ к результатам как к массиву - простого grep уже мало. Тут на сцену выходит связка:


mapfile + grep + <(process substitution)


▪️ Цель: передать данные в массив, фильтруя на лету


mapfile -t matched_lines < <(grep "ERROR" /var/log/syslog)


<(…) - создает временный named pipe
grep фильтрует строки по "ERROR"
mapfile -t читает результат построчно в массив matched_lines

▪️ Применение: разбираем большой лог


for line in "${matched_lines[@]}"; do
echo "Найдено: $line"
done


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

▪️ Расширение: фильтрация по нескольким условиям


mapfile -t critical < <(grep -E "FATAL|PANIC|OOM" /var/log/app.log)


Или постфильтрация:


mapfile -t filtered < <(some_command | grep -v DEBUG | grep -i error)


▪️ Пример из реального скрипта:


mapfile -t bad_ips < <(awk '{print $1}' access.log | sort | uniq -c | awk '$1 > 100 {print $2}')


В массив bad_ips попадают только IP, сделавшие >100 запросов.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Пингование списка хостов с журналом доступности в csv/json

Хочешь следить за доступностью нескольких серверов и записывать статистику? Bash + ping + немного магии - и у тебя реестр доступности в csv или json, пригодный для дальнейшего анализа или графиков.

▪️ Пример списка хостов (hosts.txt):


8.8.8.8
1.1.1.1
bashtex.com
192.168.0.1


▪️ Скрипт пингует все хосты и сохраняет отчет в CSV:


#!/bin/bash
INPUT="hosts.txt"
OUTPUT="ping_log.csv"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

[[ ! -f "$OUTPUT" ]] && echo "timestamp,host,status,latency_ms" > "$OUTPUT"

while read -r host; do
if [[ -n "$host" ]]; then
PING_OUT=$(ping -c 1 -W 1 "$host" 2>/dev/null)
if [[ $? -eq 0 ]]; then
LATENCY=$(echo "$PING_OUT" | awk -F'=' '/time=/{print $4}' | cut -d' ' -f1)
echo "$DATE,$host,UP,$LATENCY" >> "$OUTPUT"
else
echo "$DATE,$host,DOWN,0" >> "$OUTPUT"
fi
fi
done < "$INPUT"


▪️ Пример вывода ping_log.csv:


timestamp,host,status,latency_ms
2025-06-06 12:30:01,8.8.8.8,UP,24.1
2025-06-06 12:30:01,bashtex.com,DOWN,0


▪️ Хочешь в JSON? Добавь это после цикла:


jq -Rn '
[inputs | split(",") | {timestamp: .[0], host: .[1], status: .[2], latency_ms: .[3]}]
' "$OUTPUT" > ping_log.json


(Понадобится jq, либо можно собрать JSON вручную через echo)

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Автоматическая генерация графиков из логов

Хочешь строить графики без excel и браузеров? Bash + gnuplot дают способ визуализировать логи прямо из терминала.

Рассмотрим: у нас есть csv лог доступности хостов, созданный скриптом мониторинга:


timestamp,host,status,latency_ms
2025-08-09 12:30:01,8.8.8.8,UP,24.1
2025-08-09 12:31:01,8.8.8.8,UP,25.4
2025-08-09 12:32:01,8.8.8.8,DOWN,0
...


Наша цель: Построить график пинга по времени; сохранить его в png; все сделать из одного bash-скрипта

🛠 Скрипт генерации графика


#!/bin/bash
INPUT="ping_log.csv"
OUTPUT="latency_plot.png"
HOST="8.8.8.8"

# Отфильтровать строки для нужного хоста и подготовить данные
awk -F',' -v host="$HOST" '
$2 == host && $3 == "UP" {
print $1, $4
}
' "$INPUT" > temp_data.dat

# Сгенерировать график
gnuplot <<EOF
set terminal png size 900,300
set output "$OUTPUT"
set title "Latency for $HOST"
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set format x "%H:%M"
set xlabel "Time"
set ylabel "Latency (ms)"
set grid
plot "temp_data.dat" using 1:2 with linespoints title "Ping latency"
EOF

echo "График сохранен в $OUTPUT"


Если добавить реальный cron - будет наглядная история

🌟 Советы

Можно использовать gnuplot с другими логами: нагрузка CPU, объемы логов, системные метрики;
Можно строить сразу несколько графиков: plot ... title "A", ... title "B";
Поддерживается SVG, PDF, терминал


BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👨‍💻1
Разве нужны еще какие-то аргументы?

BashTex 📱 #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19
Умная упаковка файлов по маске или дате

Сегодня про то, как архивировать файлы выборочно - например, только .log, только старше 3 дней или только те, что совпадают с маской. Будем комбинировать find, xargs и tar.

▪️ Пример 1: Упаковка логов старше 3 дней


find /var/log/myapp -type f -name "*.log" -mtime +3 \
| xargs tar -czf old_logs.tar.gz


find ищет .log, старше 3 дней
xargs передаёт списком в tar
tar упаковывает их в old_logs.tar.gz

▪️ Пример 2: По шаблону имени (например, только report_*.txt)


find ./reports -type f -name "report_*.txt" \
| xargs tar -czf reports_$(date +%Y%m%d).tar.gz


Упакует все отчеты с именами report_*.txt в архив с датой.

▪️ Если имена с пробелами


find . -type f -name "*.csv" -print0 \
| xargs -0 tar -czf data.tar.gz


-print0 и -0 защищают от пробелов и спецсимволов.

▪️ Плюс: Указание имени архива в переменной


ARCHIVE="backup_$(date +%F).tar.gz"
find . -type f -name "*.conf" -mtime -7 \
| xargs tar -czf "$ARCHIVE"


BashTex 📱 #bash
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Реализация цикла с таймаутом ожидания результата и отменой

Polling с таймаутом в bash - когда нужно подождать результат, но не вечно. Идеально подходит для:

📍 Ожидания ответа от API;
📍 Проверки, появился ли файл;
📍 Проверки, поднялся ли сервис;
📍 Паузы перед перезапуском, если условие не выполнено.

1️⃣ Пример: ждать файл не больше 10 секунд


TIMEOUT=10
INTERVAL=1
FILE="/tmp/ready.flag"

for ((i=0; i<TIMEOUT; i+=INTERVAL)); do
if [[ -f "$FILE" ]]; then
echo "Файл найден"
break
fi
sleep "$INTERVAL"
done

if [[ ! -f "$FILE" ]]; then
echo "Таймаут: файл не появился"
fi


2️⃣ Пример: проверка доступности порта (через nc)


HOST="localhost"
PORT=8080
TIMEOUT=15

for ((i=0; i<TIMEOUT; i++)); do
if nc -z "$HOST" "$PORT"; then
echo "Сервис доступен"
break
fi
sleep 1
done

if ! nc -z "$HOST" "$PORT"; then
echo "Сервис не запустился за $TIMEOUT секунд"
fi


3️⃣ Более обобщенная функция


poll_until() {
local timeout=$1
local interval=$2
shift 2
local elapsed=0

while ((elapsed < timeout)); do
if "$@"; then
return 0
fi
sleep "$interval"
((elapsed+=interval))
done
return 1
}


▪️Использование:


poll_until 10 1 curl -sf https://localhost:8080/health || echo "Недоступен"


Polling pattern с ограничением по времени - инструмент, когда “ожидание результата” должно быть контролируемым.

BashTex 📱 #bash #utils
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Генерация временных учёток с автоудалением

Временные учетки в linux с автозапретом - удобный способ:

📍 выдать доступ коллеге или заказчику на пару часов;
📍 дать временный SSH-доступ без ручной чистки;
📍 создать пользователя на ограниченное время (в минутах/часах).

▪️ Пример: учетка на 1 час


USER="tempuser"
PASS="$(openssl rand -base64 12)"
TIMEOUT_MIN=60

# Создание пользователя
useradd -m "$USER"
echo "$USER:$PASS" | chpasswd
echo "Учетка $USER создана. Пароль: $PASS"

# Блокировка через timeout
echo "passwd -l $USER && echo '[INFO] $USER заблокирован'" | at now + "$TIMEOUT_MIN" minutes


▪️ Альтернатива: удаление полностью. Если нужно удалить пользователя, а не только заблокировать:


echo "pkill -u $USER; userdel -r $USER" | at now + "$TIMEOUT_MIN" minutes


▪️ Дополнительно: запрет sudo и ограничение SSH

Не добавляйте пользователя в группы типа sudo. Можно ограничить доступ в sshd_config:


Match User tempuser
ForceCommand echo "Временный доступ завершен"
AllowTcpForwarding no
X11Forwarding no


▪️ Оборачивание в скрипт


#!/bin/bash
USER="temp$RANDOM"
PASS="$(openssl rand -base64 10)"
TIMEOUT_MIN=30

useradd -m "$USER"
echo "$USER:$PASS" | chpasswd
echo "Пользователь $USER создан на $TIMEOUT_MIN минут"
echo "Логин: $USER"
echo "Пароль: $PASS"

echo "userdel -r $USER" | at now + "$TIMEOUT_MIN" minutes


BashTex 📱 #bash #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11