Compare commits
No commits in common. "7ca246db3f644dd1e989b62a39eab3ad35da3442" and "810e6ec436f333900a9be6173ca8ca3cccf483d9" have entirely different histories.
7ca246db3f
...
810e6ec436
@ -1,56 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Настройки
|
|
||||||
CERT_DIR="$HOME/certs"
|
|
||||||
CA_NAME="myrootca"
|
|
||||||
DAYS=3650 # 10 лет
|
|
||||||
|
|
||||||
# Цвета
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
NC='\033[0m'
|
|
||||||
|
|
||||||
echo "Генерация корневого сертификата (Root CA)..."
|
|
||||||
|
|
||||||
# 1. Создание директории
|
|
||||||
mkdir -p "$CERT_DIR"
|
|
||||||
cd "$CERT_DIR" || exit 1
|
|
||||||
|
|
||||||
# Проверка: если CA уже существует, предупреждаем
|
|
||||||
if [ -f "${CA_NAME}.crt" ] && [ -f "${CA_NAME}.key" ]; then
|
|
||||||
echo -e "${RED}Внимание!${NC} Файлы ${CA_NAME}.crt и ${CA_NAME}.key уже существуют."
|
|
||||||
read -p "Перезаписать их? (это аннулирует все ранее выданные сертификаты) [y/N]: " confirm
|
|
||||||
if [[ ! $confirm =~ ^[Yy]$ ]]; then
|
|
||||||
echo "Отменено."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Генерация приватного ключа (4096 бит)
|
|
||||||
echo "Генерация приватного ключа..."
|
|
||||||
openssl genrsa -out "${CA_NAME}.key" 4096 2>/dev/null
|
|
||||||
chmod 600 "${CA_NAME}.key" # Защита ключа
|
|
||||||
|
|
||||||
# 3. Генерация самоподписанного сертификата
|
|
||||||
echo "Генерация корневого сертификата..."
|
|
||||||
openssl req -x509 -new -nodes \
|
|
||||||
-key "${CA_NAME}.key" \
|
|
||||||
-sha256 \
|
|
||||||
-days ${DAYS} \
|
|
||||||
-out "${CA_NAME}.crt" \
|
|
||||||
-subj "/C=RU/ST=State/L=City/O=MyOrg/CN=TrueNAS Root CA"
|
|
||||||
|
|
||||||
# Проверка результата
|
|
||||||
if [ -f "${CA_NAME}.crt" ]; then
|
|
||||||
echo -e "${GREEN}Успешно!${NC}"
|
|
||||||
echo "Файлы созданы в: $CERT_DIR"
|
|
||||||
echo " Ключ: ${CA_NAME}.key (храните в секрете!)"
|
|
||||||
echo " Серт: ${CA_NAME}.crt (установите этот файл на все клиентские устройства)"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Информация о сертификате:"
|
|
||||||
openssl x509 -in "${CA_NAME}.crt" -noout -subject -dates
|
|
||||||
else
|
|
||||||
echo -e "${RED}Ошибка при создании сертификата.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Настройки
|
|
||||||
CERT_DIR="$HOME/certs"
|
|
||||||
CA_KEY="$CERT_DIR/truenasrootca.key"
|
|
||||||
CA_CRT="$CERT_DIR/truenasrootca.crt"
|
|
||||||
|
|
||||||
# Цвета для вывода
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
# Функция для вывода ошибок
|
|
||||||
error() {
|
|
||||||
echo -e "${RED}[ERROR]${NC} $1" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Функция для вывода успеха
|
|
||||||
success() {
|
|
||||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Проверка аргументов
|
|
||||||
if [ "$#" -ne 3 ]; then
|
|
||||||
echo "Использование: $0 <имя_сертификата> <DNS_имя> <IP_адрес>"
|
|
||||||
echo "Пример: $0 truenas truenas.local 192.168.0.137"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
CERT_NAME="$1"
|
|
||||||
DNS_NAME="$2"
|
|
||||||
IP_ADDR="$3"
|
|
||||||
|
|
||||||
# Переход в директорию сертификатов
|
|
||||||
mkdir -p "$CERT_DIR"
|
|
||||||
cd "$CERT_DIR" || error "Не удалось перейти в директорию $CERT_DIR"
|
|
||||||
|
|
||||||
# 1. Проверка наличия корневого CA
|
|
||||||
if [ ! -f "$CA_KEY" ] || [ ! -f "$CA_CRT" ]; then
|
|
||||||
error "Корневой сертификат не найден! ($CA_CRT / $CA_KEY)"
|
|
||||||
echo "Сначала создайте Root CA или убедитесь, что файлы лежат в $CERT_DIR"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${YELLOW}Генерация сертификата для: ${CERT_NAME}${NC}"
|
|
||||||
echo "DNS: $DNS_NAME"
|
|
||||||
echo "IP: $IP_ADDR"
|
|
||||||
|
|
||||||
# 2. Генерация приватного ключа сервера
|
|
||||||
# (Пересоздаем ключ, если он уже есть, чтобы не было конфликтов)
|
|
||||||
openssl genrsa -out "${CERT_NAME}.key" 4096 2>/dev/null || error "Не удалось создать ключ"
|
|
||||||
chmod 600 "${CERT_NAME}.key" # Защита ключа
|
|
||||||
|
|
||||||
# 3. Создание файла расширений (v3.ext) динамически
|
|
||||||
cat > "${CERT_NAME}.ext" << EOF
|
|
||||||
authorityKeyIdentifier=keyid,issuer
|
|
||||||
basicConstraints=CA:FALSE
|
|
||||||
keyUsage = digitalSignature, keyEncipherment
|
|
||||||
subjectAltName = @alt_names
|
|
||||||
|
|
||||||
[alt_names]
|
|
||||||
DNS.1 = ${DNS_NAME}
|
|
||||||
IP.1 = ${IP_ADDR}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# 4. Создание CSR (Certificate Signing Request)
|
|
||||||
openssl req -new -key "${CERT_NAME}.key" -out "${CERT_NAME}.csr" \
|
|
||||||
-subj "/CN=${DNS_NAME}" 2>/dev/null || error "Не удалось создать CSR"
|
|
||||||
|
|
||||||
# 5. Подпись сертификата корневым CA
|
|
||||||
openssl x509 -req -in "${CERT_NAME}.csr" \
|
|
||||||
-CA "$CA_CRT" -CAkey "$CA_KEY" -CAcreateserial \
|
|
||||||
-out "${CERT_NAME}.crt" -days 3650 -sha256 \
|
|
||||||
-extfile "${CERT_NAME}.ext" 2>/dev/null || error "Не удалось подписать сертификат"
|
|
||||||
|
|
||||||
# 6. Очистка временных файлов (CSR и ext)
|
|
||||||
# Если вам нужен CSR для других целей, закомментируйте следующую строку
|
|
||||||
rm -f "${CERT_NAME}.csr" "${CERT_NAME}.ext"
|
|
||||||
|
|
||||||
# 7. Финальный вывод
|
|
||||||
success "Сертификат успешно создан!"
|
|
||||||
echo "Файлы:"
|
|
||||||
echo " Ключ: $CERT_DIR/${CERT_NAME}.key"
|
|
||||||
echo " Серт: $CERT_DIR/${CERT_NAME}.crt"
|
|
||||||
echo "Подписан с помощью: (использовать для установки доверия на клиентах)"
|
|
||||||
|
|
||||||
# Проверка содержимого
|
|
||||||
echo ""
|
|
||||||
echo "Информация о сертификате:"
|
|
||||||
openssl x509 -in "${CERT_NAME}.crt" -noout -text | grep -A1 "Subject Alternative Name"
|
|
||||||
|
|
||||||
@ -1,142 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Совместим с TrueNAS CORE (FreeBSD) и SCALE (Linux)
|
|
||||||
# Безопасен при перенаправленном stdin
|
|
||||||
|
|
||||||
# Проверка наличия терминала для интерактивного режима
|
|
||||||
if [[ -t 0 ]]; then
|
|
||||||
INTERACTIVE=1
|
|
||||||
else
|
|
||||||
INTERACTIVE=0
|
|
||||||
echo "Внимание: stdin не подключён к терминалу. Режим подтверждения отключён."
|
|
||||||
echo "Используйте флаг --force для автоматического выполнения."
|
|
||||||
if [[ "$*" != *"--force"* ]]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Цвета (только если вывод в терминал)
|
|
||||||
if [[ -t 1 ]]; then
|
|
||||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
|
|
||||||
else
|
|
||||||
RED=''; GREEN=''; YELLOW=''; BLUE=''; NC=''
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Проверка аргумента
|
|
||||||
if [[ $# -lt 1 ]] || [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
|
|
||||||
echo "Использование: $0 [--force] <путь_к_директории>"
|
|
||||||
echo " --force Пропустить подтверждение (для автоматизации)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Обработка флага --force
|
|
||||||
FORCE=0
|
|
||||||
if [[ "$1" == "--force" ]]; then
|
|
||||||
FORCE=1
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
|
|
||||||
TARGET_DIR="$1"
|
|
||||||
|
|
||||||
# Проверка директории
|
|
||||||
if [[ ! -d "$TARGET_DIR" ]]; then
|
|
||||||
echo -e "${RED}Ошибка:${NC} Директория не существует: $TARGET_DIR" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Нормализация пути
|
|
||||||
TARGET_DIR="$(cd "$TARGET_DIR" 2>/dev/null && pwd || echo "$TARGET_DIR")"
|
|
||||||
|
|
||||||
echo -e "${BLUE}========================================${NC}"
|
|
||||||
echo -e "${BLUE}Подготовка к обработке Windows-файлов${NC}"
|
|
||||||
echo -e "${BLUE}========================================${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "Директория: ${YELLOW}${TARGET_DIR}${NC}"
|
|
||||||
echo -e "Расширения: ${YELLOW}.exe .bat .cmd .com${NC} (любой регистр)"
|
|
||||||
echo -e "Права: ${YELLOW}ug+x${NC} (владелец + группа)"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Подсчёт файлов (безопасный метод для BSD)
|
|
||||||
FILE_COUNT=0
|
|
||||||
while IFS= read -r -d '' file 2>/dev/null; do
|
|
||||||
((FILE_COUNT++)) 2>/dev/null || FILE_COUNT=$((FILE_COUNT + 1))
|
|
||||||
done < <(find "$TARGET_DIR" -type f \( -iname "*.exe" -o -iname "*.bat" -o -iname "*.cmd" -o -iname "*.com" \) -print0 2>/dev/null || true)
|
|
||||||
|
|
||||||
echo -e "Найдено файлов: ${GREEN}${FILE_COUNT}${NC}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
if [[ $FILE_COUNT -eq 0 ]]; then
|
|
||||||
echo -e "${YELLOW}Не найдено подходящих файлов. Обработка не требуется.${NC}"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Предпросмотр (только если интерактивно)
|
|
||||||
if [[ $INTERACTIVE -eq 1 ]]; then
|
|
||||||
echo -e "${BLUE}Примеры найденных файлов (первые 10):${NC}"
|
|
||||||
COUNT_PREVIEW=0
|
|
||||||
while IFS= read -r -d '' file 2>/dev/null; do
|
|
||||||
echo " • $file"
|
|
||||||
COUNT_PREVIEW=$((COUNT_PREVIEW + 1))
|
|
||||||
[[ $COUNT_PREVIEW -ge 10 ]] && break
|
|
||||||
done < <(find "$TARGET_DIR" -type f \( -iname "*.exe" -o -iname "*.bat" -o -iname "*.cmd" -o -iname "*.com" \) -print0 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [[ $FILE_COUNT -gt 10 ]]; then
|
|
||||||
echo " ... и ещё $((FILE_COUNT - 10)) файлов"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Подтверждение (только если интерактивно и не --force)
|
|
||||||
if [[ $INTERACTIVE -eq 1 && $FORCE -eq 0 ]]; then
|
|
||||||
echo -e "${YELLOW}Внимание:${NC} Будут изменены права ${GREEN}ТОЛЬКО${NC} для владельца и группы (ug+x)"
|
|
||||||
echo -n "Продолжить? (y/n) [n]: "
|
|
||||||
read -r CONFIRM || CONFIRM="n"
|
|
||||||
|
|
||||||
case "${CONFIRM,,}" in
|
|
||||||
y|yes|д|да)
|
|
||||||
echo -e "\n${GREEN}Подтверждено. Начинаем обработку...${NC}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "\n${YELLOW}Операция отменена.${NC}"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo ""
|
|
||||||
elif [[ $FORCE -eq 1 ]]; then
|
|
||||||
echo -e "${YELLOW}Режим --force: подтверждение пропущено.${NC}"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Обработка файлов
|
|
||||||
SUCCESS=0
|
|
||||||
FAILED=0
|
|
||||||
TOTAL=0
|
|
||||||
|
|
||||||
while IFS= read -r -d '' file 2>/dev/null; do
|
|
||||||
TOTAL=$((TOTAL + 1))
|
|
||||||
if chmod ug+x "$file" 2>/dev/null; then
|
|
||||||
BASENAME="${file##*/}"
|
|
||||||
echo -e "[${GREEN}OK${NC}] $BASENAME"
|
|
||||||
SUCCESS=$((SUCCESS + 1))
|
|
||||||
else
|
|
||||||
BASENAME="${file##*/}"
|
|
||||||
echo -e "[${RED}FAIL${NC}] $BASENAME (нет прав?)"
|
|
||||||
FAILED=$((FAILED + 1))
|
|
||||||
fi
|
|
||||||
done < <(find "$TARGET_DIR" -type f \( -iname "*.exe" -o -iname "*.bat" -o -iname "*.cmd" -o -iname "*.com" \) -print0 2>/dev/null || true)
|
|
||||||
|
|
||||||
# Итог
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}========================================${NC}"
|
|
||||||
echo -e "${BLUE}Итог обработки${NC}"
|
|
||||||
echo -e "${BLUE}========================================${NC}"
|
|
||||||
echo -e "Успешно: ${GREEN}${SUCCESS}${NC}"
|
|
||||||
echo -e "Ошибок: ${RED}${FAILED}${NC}"
|
|
||||||
echo -e "Всего: ${BLUE}${TOTAL}${NC}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
if [[ $FAILED -gt 0 ]]; then
|
|
||||||
echo -e "${YELLOW}Внимание:${NC} Некоторые файлы не обработаны (возможно, нет прав на запись)."
|
|
||||||
echo "Проверьте: mount -v | grep '${TARGET_DIR%/*}' — возможно, ФС смонтирована как read-only."
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}Готово.${NC}"
|
|
||||||
Loading…
x
Reference in New Issue
Block a user