Подробный гайд как создать скрипт в Астра Линукс

Пошаговый гайд по созданию и настройке bash-скриптов в Astra Linux. Разбор синтаксиса, прав доступа, отладки и особенностей защиты ОС.

2026.05.03                  


Подробный гайд как создать скрипт в Астра ЛинуксПодробный гайд как создать скрипт в Астра Линукс

1. Введение

В Linux (и в Astra Linux в частности) скрипт — это обычный текстовый файл, содержащий последовательность команд для интерпретатора. По умолчанию используется bash, но можно использовать python3, sh, zsh и др. Astra Linux основана на Debian, поэтому все стандартные практики работы со скриптами применимы, но есть нюансы, связанные с мандатным контролем доступа (MAC) и политиками безопасности.


2. Подготовка окружения

  1. Откройте терминал (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