Авторский канал для тех, кто хочет глубже погрузиться в мир Linux.
Подойдет для разработчиков, системных администраторов и DevOps
Реклама: @dad_admin
Post #140
926

📈
- 😁 13
- 👍 4
- 🔥 1
- 🫡 1
BA @bash_tex
Showing posts older than #141 · Back to latest

• Перебора паролей (brute force);
• Подборов SSH;
• Атак на веб-серверы.
sudo apt update
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
enabled = true: Включает фильтрацию для SSH.
maxretry = 5: Блокировка после 5 неудачных попыток.
bantime = 600: IP будет заблокирован на 10 минут (600 секунд).
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
ignoreip = 127.0.0.1/8 192.168.0.1
destemail = admin@bashtex.ru
sendername = Fail2Ban
action = %(action_mwl)s
#!/bin/bash
#директория для резервных копий
BACKUP_DIR="/backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
#функция для резервного копирования
backup_service() {
echo "Создание резервной копии..."
cp -r /path/to/service "$BACKUP_DIR"
}
#функция обновления
update_service() {
echo "Обновление сервиса..."
if apt-get update && apt-get install --only-upgrade myservice; then
echo "Обновление успешно завершено"
else
echo "Ошибка при обновлении"
restore_service
fi
}
#функция проверки целостности
check_integrity() {
echo "Проверка целостности..."
if systemctl is-active --quiet myservice; then
echo "Сервис работает корректно"
else
echo "Обнаружены проблемы, выполняется откат"
restore_service
fi
}
#функция отката
restore_service() {
echo "Выполняется откат..."
cp -r "$BACKUP_DIR" /path/to/service
systemctl restart myservice
if systemctl is-active --quiet myservice; then
echo "Откат успешно выполнен"
else
echo "Ошибка при откате, требуется ручное вмешательство"
fi
}
#основной процесс
backup_service
update_service
check_integrity
./update_service.sh
Создание резервной копии...
Обновление сервиса...
Обновление успешно завершено
Проверка целостности...
Сервис работает корректно
Создание резервной копии...
Обновление сервиса...
Ошибка при обновлении
Выполняется откат...
Откат успешно выполнен
Автоматизация: Устраняет необходимость ручного запуска бэкапов.
Консистентность: Гарантирует, что бэкапы выполняются регулярно и в соответствии с установленным графиком.
Мониторинг и уведомления: Уведомления о состоянии бэкапов и возможность быстрого реагирования на сбои.
Версионность: Легкий доступ к нескольким версиям данных для восстановления.
#!/bin/bash
# Переменные
BACKUP_DIR="/backups"
DB_NAME="mydatabase"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$TIMESTAMP.sql.gz"
# Создание резервной копии
mysqldump $DB_NAME | gzip > $BACKUP_FILE
# Уведомление
if [ $? -eq 0 ]; then
echo "Backup successful: $BACKUP_FILE"
else
echo "Backup failed" >&2
fi
stages:
- backup
backup_job:
stage: backup
script:
- chmod +x backup.sh
- ./backup.sh
only:
- main
name: Scheduled Backup
on:
schedule:
- cron: '0 2 * * *' # Ежедневно в 2:00
jobs:
backup:
runs-on: ubuntu-latest
steps:
- name: Run backup script
run: ./backup.sh
Непрерывность: Регулярные и автоматизированные бэкапы.
Масштабируемость: Легко добавлять новые задачи резервного копирования по мере роста данных.
Контроль и прозрачность: История выполнения бэкапов доступна в интерфейсе CI/CD инструмента.
sudo apt update && sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-cli
sudo apt install php-xml php-mbstring php-zip php-gd php-curl php-intl php-bcmath php-imagick
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar -xjf latest.tar.bz2
sudo mv nextcloud /var/www/
sudo nano /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/nextcloud
ServerName your-domain.com
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>
sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl restart apache2
sudo mysql -u root -p
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Активировать HTTPS: Настройте SSL-сертификат с помощью Let's Encrypt.
Настроить файервол: Закройте ненужные порты и оставьте открытыми только те, что необходимы для работы.
Регулярное обновление: Следите за обновлениями Nextcloud и плагинов.
netstat поможет выявить потенциальные угрозы. Рассмотрим, как найти подозрительные соединения с помощью этого инструмента.
netstat -an
netstat -tuln
netstat -an | grep ESTABLISHED
netstat -anp | grep <подозрительный IP>
netstat -anp | grep LISTEN
netstat -anp | awk '{print $7}' | sort | uniq -c | sort -nr
Регулярно проверяйте соединения: Используйте netstat в крон-джобах для регулярного мониторинга.
Настройте оповещения: Интеграция с системами оповещений (например, Zabbix) позволит вам реагировать на аномальные соединения в реальном времени.
Ограничивайте доступ: Используйте файерволы (например, iptables или ufw) для ограничения входящих соединений.
echo '{"name": "Alice", "age": 30, "city": "Paris"}' | jq .
echo '{"name": "Alice", "age": 30}' | jq '.name'
"Alice"
echo '[{"name": "Alice"}, {"name": "Bob"}]' | jq '.[].name'
"Alice"
"Bob"
echo '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 20}]' | jq '.[] | select(.age > 25)'
{"name": "Alice", "age": 30}
echo '{"name": "Alice", "age": 30}' | jq 'to_entries | map({(.key): .value})'
[{"name":"Alice"}, {"age":30}]
echo '[{"name": "Alice", "group": "admin"}, {"name": "Bob", "group": "user"}, {"name": "Charlie", "group": "admin"}]' | jq 'group_by(.group) | map({group: .[0].group, members: .})'
[{"group":"admin","members":[{"name":"Alice","group":"admin"},{"name":"Charlie","group":"admin"}]}, {"group":"user","members":[{"name":"Bob","group":"user"}]}]
jq -s '.[0] * .[1]' file1.json file2.json
curl -s https://api.example.com/data | jq '.items[] | {name: .name, id: .id}'
jq '.store.book[] | select(.price < 10)' books.json
INPUT — фильтрует входящий трафик.
FORWARD — фильтрует трафик, проходящий через сервер.
OUTPUT — фильтрует исходящий трафик.
iptables -A INPUT -s 192.168.1.100 -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "
iptables-save > /etc/iptables/rules.v4
iptables -N my_custom_chain
iptables -A INPUT -j my_custom_chain
iptables -A my_custom_chain -s 192.168.1.100 -j DROP
iptables -I INPUT -s 192.168.1.101 -j DROP
sleep 300
iptables -D INPUT -s 192.168.1.101 -j DROP
iptables предоставляет широкий спектр возможностей для фильтрации и контроля сетевого трафика. Понимание тонкостей и правильное применение правил помогут защитить серверы и сети от угроз, обеспечив безопасную и стабильную работу.
sed 's/старый/новый/g' bigfile.txt
sed '/ошибка/d' bigfile.txt
sed -n '10,20p' bigfile.txt
sed обрабатывает файлы построчно, что делает его идеальным для работы с огромными текстовыми данными.
sed '/^$/d' bigfile.txt > cleaned.txt
sed -i '1i Заголовок' bigfile.txt
sed отлично подходит для автоматизации задач в скриптах. Например, регулярная замена в логах или данных:
#!/bin/bash
for file in /logs/*.log; do
sed -i 's/DEBUG/INFO/g' "$file"
done
Используйте -i для редактирования файла на месте (встроенное изменение).
При работе с огромными файлами добавьте -e для объединения нескольких команд sed в один проход.

sudo apt install gnupg # Для систем на базе Debian/Ubuntu
sudo yum install gnupg # Для CentOS/RHEL
gpg -c secret.txt
gpg -d secret.txt.gpg > secret.txt
gpg --full-generate-key
gpg --export -a "Your Name" > public.key
gpg --encrypt --recipient "Recipient Name" secret.txt
gpg --decrypt secret.txt.gpg > secret.txt
echo "mysecretpassphrase" > passphrase.txt
gpg --batch --yes --passphrase-file passphrase.txt -c secret.txt
chmod 600 passphrase.txt
tar -czf - mydata | gpg -c -o mydata.tar.gz.gpg
Прозрачность: Логирование позволяет отслеживать, что выполняется, и выявлять ошибки.
Своевременность: Уведомления предупреждают о проблемах без необходимости проверки вручную.
Контроль: Вы уверены, что задачи выполняются по расписанию.
* * * * * /path/to/command >> /var/log/cron.log 2>&1
* * * * * /path/to/command > /var/log/cron_output.log 2> /var/log/cron_error.log
MAILTO="your_email@bashtex"
* * * * * /path/to/command || echo "Error in cron task" | mail -s "Cron Error" your_email@bashtex.com
grep CRON /var/log/syslog
* * * * * /usr/bin/time -o /var/log/task_time.log -a /path/to/command
* * * * * /path/to/command || curl -s -X POST https://api.telegram.org/bot<TOKEN>/sendMessage -d chat_id=<CHAT_ID> -d text="Error in cron task"
* * * * * /path/to/command >> /var/log/cron_tasks/task1.log 2>&1
#!/bin/bash
LOG_FILE="/var/log/cron_tasks/task.log"
ERROR_FILE="/var/log/cron_tasks/task_error.log"
{
echo "Task started: $(date)"
/path/to/command
echo "Task completed: $(date)"
} >> "$LOG_FILE" 2>> "$ERROR_FILE" || mail -s "Task Failed" your_email@example.com < "$ERROR_FILE"
* * * * * /path/to/script.sh

tar старого года, чтобы освободить место для нового!
tar -cvf 2024.tar.gz ~/воспоминания/2024
gzip 2024.tar.gz
gunzip -c 2025.tar.gz | tar -xvf -
rm -rf.chmod +x на наши мечты! 🎄Хранит расшифрованные ключи во временном хранилище.
Позволяет подключаться к серверам без повторного ввода пароля.
Устраняет необходимость прямого хранения ключей на диске в незашифрованном виде.
eval "$(ssh-agent -s)"
Agent pid 12345
ssh-add ~/.ssh/id_rsa
ssh-add -l
2048 SHA256:abc12345... user@host (RSA)
ssh-add -D
ssh-add -d ~/.ssh/id_rsa
ssh-add -t 3600 ~/.ssh/id_rsa
if ! pgrep -u "$USER" ssh-agent > /dev/null; then
eval "$(ssh-agent -s)"
fi
ssh user@server
git pull
git push
Host remote-server
ForwardAgent yes
cp требует небольшой хитрости. Разберём, как это сделать и при чём здесь rsync.Чтобы пропустить временные файлы (*.tmp, *.swp).
Чтобы избежать копирования тяжёлых или ненужных данных.
Для создания точных копий без избыточной информации.
cp сам по себе не поддерживает флаг исключений, можно комбинировать его с другими командами, такими как find.
find source_dir -type f ! -name '*.log' -exec cp --parents {} target_dir \;
rsync -av --exclude 'temp/' --exclude '*.log' source_dir/ target_dir/
sending incremental file list
./
file1.txt
file2.txt
sent 125 bytes received 40 bytes 330.00 bytes/sec
total size is 245 speedup is 1.41
*.log
temp/
backup/
rsync -av --exclude-from='exclude.txt' source_dir/ target_dir/
rsync -av --exclude '*.tmp' source_dir/ target_dir/
cp - базовый инструмент, его возможности можно расширить комбинацией с find для сложных задач. Для регулярной работы с исключениями rsync остаётся лидером.
sudo apt update
sudo apt install lynis
sudo yum install lynis
git clone https://github.com/CISOfy/lynis.git
cd lynis
sudo ./lynis audit system
sudo lynis audit system
Проверку конфигурации ядра.
Анализ файлов и папок.
Проверку безопасности сети.
Оценку производительности.
[+] Kernel Hardening
- Enable kernel module loading: OK
- Kernel logging level: OK
- Unused kernel modules: Warning
[+] File Integrity
- Check /etc/passwd: OK
- Check /etc/shadow: OK
Hardening index: 78/100
Suggestions: 5
less /var/log/lynis.log
sudo lynis audit system --tests-from-group ssh
Простой и понятный анализ. Lynis показывает текущие проблемы и предлагает их решения.
Гибкость. Подходит для серверов, десктопов и даже встроенных систем.
Автоматизация. Можно интегрировать в CI/CD для регулярного аудита.
Функция - это именованный блок кода, который можно вызывать многократно. Она определяет действия, выполняемые скриптом, и упрощает повторяющиеся операции.
hello_world() {
echo "Hello, World!"
}
hello_world
calculate_sum() {
echo $(( $1 + $2 ))
}
calculate_sum 5 10 # Вывод: 15
safe_division() {
if [ "$2" -eq 0 ]; then
echo "Ошибка: деление на ноль!"
return 1
fi
echo $(( $1 / $2 ))
}
safe_division 10 0 # Вывод: Ошибка: деление на ноль!
count_files() {
local dir=$1
if [ -d "$dir" ]; then
echo "$(ls "$dir" | wc -l)"
else
echo "Директория $dir не существует."
return 1
fi
}
count_files /etc
cached_command() {
local cache_file="/tmp/command_output"
if [ -f "$cache_file" ]; then
cat "$cache_file"
else
echo "Выполняется команда..."
ls /etc > "$cache_file"
cat "$cache_file"
fi
}
cached_command
process_file() {
echo "Обработка файла $1"
sleep 2 # Эмуляция длительной задачи
}
export -f process_file
find . -type f -name "*.log" | xargs -n 1 -P 4 -I {} bash -c 'process_file "$@"' _ {}
set -x # Включить трассировку
set -e # Завершить скрипт при ошибке
find . -type f | wc -l
my_array=(file1 file2 file3)
for file in "${my_array[@]}"; do
echo "Обрабатывается $file"
done
xargs может стать вашим секретным оружием. Её главное преимущество - возможность запускать команды параллельно, экономя время и ресурсы.xargs берёт стандартный ввод или вывод другой команды, разбивает его на части и передаёт в указанную команду. Это незаменимо для обработки больших объёмов данных.
find /path/to/files -type f -name "*.log" | xargs -P 4 -I {} gzip {}
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
cat hosts.txt | xargs -P 10 -I {} ping -c 3 {}
file1.doc
file2.doc
file3.doc
cat files.txt | xargs -P 3 -I {} cp {} /path/to/destination/
Многозадачность. Вместо обработки задач по очереди, они выполняются параллельно.
Оптимизация ресурсов. Загружаются все ядра процессора.
Гибкость. xargs работает с любыми командами и аргументами.
echo "file1 file2 file3" | xargs -n 2 echo
file1 file2
file3
xargs с параллельной обработкой - это простой способ ускорить выполнение рутинных задач. Сжатие, копирование, сканирование - всё это можно делать быстрее и эффективнее.
select переменная in список_опций; do
команды
done
переменная — переменная, куда записывается выбранная пользователем опция.
список_опций — перечень доступных опций.
команды — действия, которые выполняются в зависимости от выбора.
#!/bin/bash
echo "Выберите действие:"
select option in "Посмотреть время" "Показать директорию" "Выход"; do
case $REPLY in
1) echo "Текущее время: $(date)" ;;
2) echo "Текущая директория: $(pwd)" ;;
3) echo "Выход..."; break ;;
*) echo "Неверный выбор. Попробуйте снова." ;;
esac
done
1) Посмотреть время
2) Показать директорию
3) Выход
#? 1
Текущее время: Tue Dec 19 14:12:45 UTC 2024
#? 3
Выход...
$REPLY: Автоматически содержит номер выбранной опции.
Удобство: Если пользователь вводит неправильный номер, меню просто повторяется.
Гибкость: Подходит для интерактивных сценариев, где требуется выбор.
#!/bin/bash
echo "Выберите файл из списка:"
select file in *; do
if [ -n "$file" ]; then
echo "Вы выбрали: $file"
break
else
echo "Неверный выбор. Попробуйте снова."
fi
done
1) file1.txt
2) file2.log
3) script.sh
#? 2
Вы выбрали: file2.log
Меню управления: Создавайте интерактивные скрипты для настройки окружения.
Обработка файлов: Выбирайте файлы для анализа или обработки.
Автоматизация: Упрощайте выбор действий в автоматизированных системах.
PS3="Введите номер действия: "
Введите номер действия:
select - простой инструмент для создания интуитивно понятных меню в терминале. Она отлично помогает сделать скрипты более интерактивными и удобными.