{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "M9K blog: заметки с тегом Astra",
    "_rss_description": "Заметки обо всём: devops, lifestyle, культура.",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/blog.m9k.space\/tags\/astra\/",
    "feed_url": "https:\/\/blog.m9k.space\/tags\/astra\/json\/",
    "icon": "https:\/\/blog.m9k.space\/pictures\/userpic\/userpic@2x.jpg?1769095194",
    "authors": [
        {
            "name": "M",
            "url": "https:\/\/blog.m9k.space\/",
            "avatar": "https:\/\/blog.m9k.space\/pictures\/userpic\/userpic@2x.jpg?1769095194"
        }
    ],
    "items": [
        {
            "id": "244",
            "url": "https:\/\/blog.m9k.space\/all\/sozdanie-polzovateley-v-debian-i-astra-linux\/",
            "title": "Создание пользователей в Debian и Astra Linux",
            "content_html": "<p>Cкрипт для создания локальных пользователей с настройкой passwordless sudo.<br \/>\nОпределяет дистрибутив через \/etc\/os-release. Для Astra Linux дополнительно выполняет pdpl-user -l 0:63 -i 63.<br \/>\nПроверяет наличие утилит, не пересоздаёт существующих пользователей и не изменяет их пароли. Конфигурация sudo проверяется через visudo. Поддерживает повторный запуск.<br \/>\nЗапуск:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">.\/create-users.sh user1 user2 user3<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\nset -Eeuo pipefail\n\nDEFAULT_USERS=(user1 user2 user3)\n\nSUDOERS_DIR=&quot;\/etc\/sudoers.d&quot;\nSUDOERS_MODE=&quot;0440&quot;\nUSER_SHELL=&quot;\/bin\/bash&quot;\n\nASTRA_PDPL_LEVEL=&quot;0:63&quot;\nASTRA_INTEGRITY=&quot;63&quot;\n\nTEMP_FILE=&quot;&quot;\n\nlog() {\n    printf &#039;[INFO] %s\\n&#039; &quot;$*&quot;\n}\n\ndie() {\n    printf &#039;[ERROR] %s\\n&#039; &quot;$*&quot; &gt;&amp;2\n    exit 1\n}\n\ncleanup() {\n    if [[ -n &quot;$TEMP_FILE&quot; &amp;&amp; -f &quot;$TEMP_FILE&quot; ]]; then\n        rm -f -- &quot;$TEMP_FILE&quot;\n    fi\n}\n\ntrap cleanup EXIT\n\n# Проверка привилегий.\nif [[ &quot;$EUID&quot; -ne 0 ]]; then\n    die &quot;Скрипт необходимо запускать от root.&quot;\nfi\n\n# Определение дистрибутива.\nOS_RELEASE=&quot;\/etc\/os-release&quot;\n\nif [[ ! -r &quot;$OS_RELEASE&quot; ]]; then\n    OS_RELEASE=&quot;\/usr\/lib\/os-release&quot;\nfi\n\nif [[ ! -r &quot;$OS_RELEASE&quot; ]]; then\n    die &quot;Не найден файл os-release.&quot;\nfi\n\nunset ID PRETTY_NAME\n\n. &quot;$OS_RELEASE&quot;\n\ncase &quot;${ID:-}&quot; in\n    debian)\n        OS_TYPE=&quot;debian&quot;\n        ;;\n    astra)\n        OS_TYPE=&quot;astra&quot;\n        ;;\n    *)\n        die &quot;Неподдерживаемая ОС: ${ID:-unknown}&quot;\n        ;;\nesac\n\nlog &quot;ОС: ${PRETTY_NAME:-$OS_TYPE}&quot;\nlog &quot;Тип: $OS_TYPE&quot;\n\n# Проверка необходимых компонентов.\nREQUIRED_COMMANDS=(\n    useradd\n    passwd\n    getent\n    mktemp\n    visudo\n    chmod\n    chown\n    mv\n)\n\nif [[ &quot;$OS_TYPE&quot; == &quot;astra&quot; ]]; then\n    REQUIRED_COMMANDS+=(pdpl-user)\nfi\n\nfor cmd in &quot;${REQUIRED_COMMANDS[@]}&quot;; do\n    if ! command -v &quot;$cmd&quot; &gt;\/dev\/null 2&gt;&amp;1; then\n        die &quot;Не найдена команда: $cmd&quot;\n    fi\ndone\n\nif [[ ! -x &quot;$USER_SHELL&quot; ]]; then\n    die &quot;Не найден shell: $USER_SHELL&quot;\nfi\n\nif [[ ! -f \/etc\/sudoers || ! -d &quot;$SUDOERS_DIR&quot; ]]; then\n    die &quot;Не найдена конфигурация sudo.&quot;\nfi\n\n# Проверка существующей конфигурации sudo.\nif ! visudo -c &gt;\/dev\/null; then\n    die &quot;Обнаружена ошибка в существующей конфигурации sudo.&quot;\nfi\n\n# Выбор пользователей.\nif [[ &quot;$#&quot; -gt 0 ]]; then\n    USERS=(&quot;$@&quot;)\nelse\n    USERS=(&quot;${DEFAULT_USERS[@]}&quot;)\nfi\n\n# Предварительная проверка имён.\nfor user in &quot;${USERS[@]}&quot;; do\n    if [[ ! &quot;$user&quot; =~ ^[a-z_][a-z0-9_-]*$ ]]; then\n        die &quot;Некорректное имя пользователя: $user&quot;\n    fi\ndone\n\n# Создание и настройка пользователей.\nfor user in &quot;${USERS[@]}&quot;; do\n\n    log &quot;Обработка пользователя: $user&quot;\n\n    # Создание пользователя.\n    if getent passwd &quot;$user&quot; &gt;\/dev\/null; then\n        log &quot;Пользователь $user уже существует.&quot;\n    else\n        log &quot;Создание пользователя $user&quot;\n\n        useradd \\\n            -m \\\n            -s &quot;$USER_SHELL&quot; \\\n            &quot;$user&quot; \\\n            || die &quot;Не удалось создать пользователя $user&quot;\n\n        # Пароль устанавливается только новому пользователю.\n        log &quot;Установка пароля для $user&quot;\n\n        if ! passwd &quot;$user&quot;; then\n            die &quot;Ошибка установки пароля $user. Пользователь создан, задайте пароль вручную.&quot;\n        fi\n    fi\n\n    # Настройка мандатных атрибутов Astra Linux.\n    if [[ &quot;$OS_TYPE&quot; == &quot;astra&quot; ]]; then\n\n        log &quot;Настройка мандатных атрибутов: $user&quot;\n\n        pdpl-user \\\n            -l &quot;$ASTRA_PDPL_LEVEL&quot; \\\n            -i &quot;$ASTRA_INTEGRITY&quot; \\\n            &quot;$user&quot; \\\n            || die &quot;Ошибка pdpl-user для $user&quot;\n    fi\n\n    # Создание временного файла sudoers.\n    SUDOERS_FILE=&quot;${SUDOERS_DIR}\/${user}&quot;\n\n    TEMP_FILE=$(mktemp &quot;${SUDOERS_DIR}\/.${user}.XXXXXX&quot;) \\\n        || die &quot;Не удалось создать временный sudoers.&quot;\n\n    printf &#039;%s ALL=(ALL) NOPASSWD: ALL\\n&#039; &quot;$user&quot; &gt; &quot;$TEMP_FILE&quot;\n\n    chown root:root &quot;$TEMP_FILE&quot;\n    chmod &quot;$SUDOERS_MODE&quot; &quot;$TEMP_FILE&quot;\n\n    # Проверка синтаксиса перед установкой.\n    if ! visudo -cf &quot;$TEMP_FILE&quot; &gt;\/dev\/null; then\n        die &quot;Некорректная конфигурация sudo для $user&quot;\n    fi\n\n    # Установка проверенной конфигурации.\n    mv -f -- &quot;$TEMP_FILE&quot; &quot;$SUDOERS_FILE&quot;\n    TEMP_FILE=&quot;&quot;\n\n    log &quot;Sudo настроен для $user&quot;\n\ndone\n\n# Финальная проверка.\nvisudo -c &gt;\/dev\/null \\\n    || die &quot;Ошибка итоговой проверки sudoers.&quot;\n\nlog &quot;Все пользователи успешно обработаны.&quot;<\/code><\/pre>",
            "summary": "Cкрипт для создания локальных пользователей с настройкой passwordless sudo",
            "date_published": "2026-09-23T09:51:16+07:00",
            "date_modified": "2026-09-24T00:04:42+07:00",
            "tags": [
                "Astra",
                "debian",
                "linux",
                "системное администрирование"
            ],
            "_date_published_rfc2822": "Wed, 23 Sep 2026 09:51:16 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "244",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4199,
    "_e2_ua_string": "Aegea 11.5 (v4199)"
}