Подробный гайд как создать скрипт в Астра Линукс
1. Введение
В Linux (и в Astra Linux в частности) скрипт — это обычный текстовый файл, содержащий последовательность команд для интерпретатора. По умолчанию используется bash, но можно использовать python3, sh, zsh и др. Astra Linux основана на Debian, поэтому все стандартные практики работы со скриптами применимы, но есть нюансы, связанные с мандатным контролем доступа (MAC) и политиками безопасности.
2. Подготовка окружения
- Откройте терминал (
Fly-меню → Система → ТерминалилиCtrl+Alt+T).
2. Убедитесь, что установлен bash (по умолчанию присутствует):
bash --version
3. Выберите место для хранения скриптов:
- Личные:
~/bin/или~/.local/bin/(рекомендуется добавить в$PATH) - Системные:
/usr/local/bin/(требуются праваroot) - Проектные:
/opt/scripts/или/srv/scripts/
Если папки ~/bin нет, создайте её:
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
3. Создание и наполнение скрипта
3.1. Создание файла
nano ~/bin/my_script.sh
(можно использовать vim, mousepad, gedit)
3.2. Обязательные элементы
#!/bin/bash
# Имя: my_script.sh
# Описание: Краткое назначение
# Автор: Денис Сергеевич
# Дата: 2026-05-04
# Строгие настройки bash (рекомендуется)
set -euo pipefail
#!/bin/bash(shebang) указывает интерпретатор. Альтернатива:#!/usr/bin/env bash(портативнее).set -e→ выход при ошибке любой команды.set -u→ ошибка при использовании неопределённых переменных.set -o pipefail→ ошибка, если любая команда в конвейере|вернула код ≠ 0.
3.3. Практический пример
#!/bin/bash
set -euo pipefail
LOG_DIR="/var/log/my_scripts"
LOG_FILE="${LOG_DIR}/update_$(date +%F).log"
mkdir -p "$LOG_DIR"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "Начало выполнения скрипта"
# Проверка наличия apt (для Astra Common/SE)
if ! command -v apt-get &>/dev/null; then
log "ОШИБКА: apt-get не найден. Скрипт предназначен для Debian-based систем."
exit 1
fi
log "Обновление списков пакетов..."
sudo apt-get update -y >> "$LOG_FILE" 2>&1 || { log "ОШИБКА обновления списков"; exit 1; }
log "Установка доступных обновлений..."
sudo apt-get upgrade -y >> "$LOG_FILE" 2>&1 || log "ОШИБКА установки пакетов (продолжение)"
log "Удаление неиспользуемых зависимостей..."
sudo apt-get autoremove -y >> "$LOG_FILE" 2>&1
log "Скрипт завершён успешно"
4. Назначение прав доступа
Скрипт не запустится без флага выполнения:
chmod +x ~/bin/my_script.sh
Рекомендуемые права:
700(rwx------) → только владелец (безопасно для личных скриптов)750(rwxr-x---) → владелец + группа (для командных задач)755(rwxr-xr-x) → все пользователи (только если скрипт публичный и не содержит чувствительных данных)
5. Запуск и отладка
5.1. Запуск
# По относительному пути (если вы в ~/bin)
./my_script.sh
# По абсолютному пути
~/bin/my_script.sh
# Без прав на выполнение (интерпретатор указывается явно)
bash ~/bin/my_script.sh
5.2. Отладка
Добавьте в начало скрипта или запускайте с флагом:
bash -x ~/bin/my_script.sh # вывод каждой выполняемой команды
Используйте shellcheck для статического анализа:
sudo apt install shellcheck
shellcheck ~/bin/my_script.sh
6. Особенности Astra Linux
| Функция | Описание | Рекомендация |
|---|---|---|
| Мандатный контроль (MAC/PARSEC) | В Astra Linux Special Edition (Смоленск/Воронеж) включён по умолчанию. Файлы имеют метки конфиденциальности. | Убедитесь, что скрипт и его директория имеют совместимые метки. Проверка: ls -Z. При необходимости: chcon -t user_script_t ~/bin/my_script.sh |
sudo vs pkexec |
В некоторых сборках sudo отключён политикой безопасности. |
Используйте pkexec my_script.sh или настройте политику через fly-admin-sec / polkit |
| Сетевые порты/сервисы | ufw/iptables могут блокировать исходящие/входящие соединения. |
Перед автоматизацией сетевых задач проверьте правила: sudo iptables -L -n |
| Целостность файлов | В защищённых контурах может работать система контроля изменений. | Не редактируйте системные скрипты в /bin, /usr/bin. Используйте /usr/local/bin или ~/bin |
7. Автоматизация запуска
7.1. Cron (периодические задачи)
crontab -e
Пример: запуск каждый день в 02:00
0 2 * * * /home/$(whoami)/bin/my_script.sh >> /home/$(whoami)/cron.log 2>&1
7.2. systemd (фоновые/долгие задачи)
Создайте файл /etc/systemd/system/my_script.service:
[Unit]
Description=My Custom Script
After=network.target
[Service]
Type=oneshot
ExecStart=/home/user/bin/my_script.sh
User=user
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Активация:
sudo systemctl daemon-reload
sudo systemctl enable --now my_script.service
sudo systemctl status my_script.service
8. Чек-лист безопасности
- [ ] Не храните пароли/токены в открытом виде. Используйте
~/.netrc,keyringили переменные окружения. - [ ] Используйте абсолютные пути для критичных команд:
/usr/bin/apt-get, а неapt-get. - [ ] Проверяйте входные данные:
if [[ ! "$1" =~ ^[a-zA-Z0-9_-]+$ ]]; then ... - [ ] Не используйте
evalбез строгой валидации. - [ ] Перед запуском от
rootтестируйте от обычного пользователя. - [ ] В Astra SE проверяйте контексты MAC:
ls -lZ ~/bin/my_script.sh