Проверка sudoers

Системные сервисы и системы инициализации: systemd, sysvinit и другие


rutgerg
Сообщения: 140
Зарегистрирован: 04.09.2022

#

Добрый вечер. Система работает нормально, но при проверке синтаксиса sudoers выдаёт:
~  sudo visudo -c
[sudo] пароль для ......
/etc/sudoers: успешно обработан
/etc/sudoers.d/05_proxy: некорректные права доступа, должны быть 0440


Настораживает последняя строка. Или можно проглотить это. sudo работает нормально.
Может кто сталкивался с этим явлением.
rutgerg
Сообщения: 140
Зарегистрирован: 04.09.2022

#

Извините, ложная тревога. Разобрался. В папке /etc/sudoers.d/ создался пустой текстовый файл 05_proxy. Видимо остаток от прошлых "танцев с бубном".
После его удаления всё нормализовалось.
BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

Во избежание ошибок в будущем делюсь двумя сценариями:

Вариант1. Версия 1.0
1. проверяет существование заданного файла;
2. если существует, то открывает его временную копию, ;
3. иначе создаёт целевой файл и открывает его временную копию ;
4. выставляет правильные права, перемещает в целевую директорию.

параметром служит целевой файл.
остальные переменные забиты в заголовке сценария.
#!/bin/bash

# --- Настройки ---
##/etc/sudoers.d/
DEST_DIR="/path/to/target"  # Целевая директория
PERMS="0440"                 # Права доступа
EDITOR_BIN="nano"           # Редактор (vim, nano, gedit)

# --- Логика ---
TARGET_FILE="$1"
DEST_PATH="$DEST_DIR/$TARGET_FILE"

if [ -z "$TARGET_FILE" ]; then
    echo "Ошибка: укажите имя файла."
    exit 1
fi

# Создаем временный файл
TMP_FILE=$(mktemp /tmp/workfile.XXXXXX)

# Проверяем существование оригинала
if [ -f "$DEST_PATH" ]; then
    cp "$DEST_PATH" "$TMP_FILE"
else
    touch "$TMP_FILE"
fi

# Открываем копию для редактирования
$EDITOR_BIN "$TMP_FILE"

# Установка прав и перемещение в целевую директорию
chmod "$PERMS" "$TMP_FILE"
mkdir -p "$DEST_DIR"
mv "$TMP_FILE" "$DEST_PATH"

echo "Готово: $DEST_PATH"

Последний раз редактировалось BendalfRU 23.04.2026 19:01, всего редактировалось 4 раза.

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

Вариант2. Версия 1.4
Более гибкий вариант и можно вшить любые действия прямо в тело или чз include другого сценария.

С таким сценарием вы всегда соблюдёте права доступа, которые вы почему-то забыли.
Непосредственно редактируется безопасная копия,
что предотвращает конфликт на работающей машине, когда вы сохраняете промежуточный результат.
#!/bin/bash
## Параметром служит целевой файл.
# --- Настройки ---
DEST_DIR="/etc/sudoers.d/"  # Пример защищенной директории, укажите свою.
PERMS="0440" # укажите права здесь
OWNER="root:root"
EDITOR_BIN="nano"  # ваш любимый редактор nano, vim, orbiton, mcedit, helix, ...

# --- Логика ---
TARGET_FILE="$1"
DEST_PATH="$DEST_DIR/$TARGET_FILE"

[[ -z "$TARGET_FILE" ]] && { echo "Использование: $0 имя_файла"; exit 1; }

TMP_FILE=$(mktemp /tmp/workfile.XXXXXX)

# Проверка существования через case
case $(test -f "$DEST_PATH"; echo $?) in
    0)
        cp "$DEST_PATH" "$TMP_FILE"
        ;;
    1)
        touch "$TMP_FILE"
        ;;
esac

# Редактируем (права sudo здесь не нужны, файл в /tmp принадлежит вам)
$EDITOR_BIN "$TMP_FILE"

# Устанавливаем права заранее
chmod "$PERMS" "$TMP_FILE"

# Проверка прав на запись в целевую директорию
if [ -w "$DEST_DIR" ] || [ ! -d "$DEST_DIR" ]; then
    mkdir -p "$DEST_DIR"
    mv "$TMP_FILE" "$DEST_PATH"
else
    echo "Требуются права суперпользователя для записи в $DEST_DIR"
    sudo mkdir -p "$DEST_DIR"
    sudo mv "$TMP_FILE" "$DEST_PATH"
    # Восстанавливаем владельца (опционально, обычно root при sudo)
    
    sudo chown "$OWNER" "$DEST_PATH" 
fi

echo "Выполнено: $DEST_PATH"
ОПИСАНИЕ РАБОТЫ СЦЕНАРИЯ
Cкрытый текст
ОПИСАНИЕ РАБОТЫ СЦЕНАРИЯ
НАСТРОЙКИ: В этой части задаются глобальные переменные.
Вы можете изменить DEST_DIR для смены папки назначения или PERMS для управления доступом.

ИНИЦИАЛИЗАЦИЯ: Скрипт принимает ровно один параметр — имя файла. Если параметр пуст, выполнение прекращается.

ПРОВЕРКА_SUDO: Скрипт проверяет идентификатор пользователя (EUID).
Если это не 0 (root), работа прерывается, так как установка владельца и запись в системные папки требуют высших прав.

ПОДГОТОВКА_КОПИИ: С помощью конструкции case проверяется код возврата команды test -f.
При успехе (0) содержимое оригинала копируется в /tmp, при отсутствии (1) создается пустой временный файл.

РЕДАКТИРОВАНИЕ: Запускается выбранный редактор для правки именно временной копии.
Это защищает оригинальный файл от повреждения в процессе записи.

ВАЛИДАЦИЯ: Проверка флагом -s. Если после выхода из редактора файл оказался пустым, скрипт считает это ошибкой и не заменяет оригинал.

ЗАВЕРШЕНИЕ: Финальный этап.
Скрипт принудительно устанавливает владельца и права на временный файл,
после чего атомарно перемещает его в целевую директорию.
Инструкция по использованию
Cкрытый текст
Инструкция по использованию
*Для каждой цели (sudoers, www, ftp, ssh, email, ...)
сделайте файл с характерным именем и ;
*Измените путь и права в скрипте, имя скрипта, если у вас другая папка;

*К примеру, вы редактируете что0то в /etc/sudoers.d/ :
*Обзовите его sudo-edit.sh или как нравится , дайте права на исполнение chmod +x ./sudo-edit.sh ;

*Общепринятое место для таких вещей /usr/local/bin/ , тогда вам не надо указывать путь при запуске, только имя;

*Имя скрипта руками в терминал вводите и сразу после имени скрипта
укажите желаемое имя файла вот так,
sudo-edit 05_proxy
, жмите enter кнопку;

*Если вам непременно надо pkexec, то допишите его в скрипте ;
*Если вам необходим автоматический запуск, то пригодится задание cron или сервис systemd .

Если кому-то интересно, давайте сделаем более продвинутый
и красиво оформленный вариант с документацией,
улучшения предлагайте пожалуйста.

Правки: добавлены Описание, инструкция, комментарии в коде.
Последний раз редактировалось BendalfRU 23.04.2026 19:02, всего редактировалось 9 раз.

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

rutgerg
Сообщения: 140
Зарегистрирован: 04.09.2022

#

BendalfRU, спасибо конечно за помощь, но я попробывал немного полегче вариант.
Создал пустой текстовый файл sysctl в /etc/sudoers.d/. Опять при проверке sudo visudo -c ошибка "некорректные права доступа, должны быть 0440".
Решил поробывать pkexec chmod 0440 /etc/sudoers.d/sysctl.
Помогло. Ошибка при проверке исчезла. Вопрос уже в другом: почему этот глюк с правами доступа происходит? Хотя система продолжает отлично работать и ошибка, по сути, видна только при проверке синтаксиса. Пока ответа в инете не нашёл.
BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

rutgerg:Решил поробывать pkexec chmod 0440 /etc/sudoers.d/sysctl.
Вам виднее,
со скриптом https://archlinux.com.ru/forum/viewtopi ... 326#p12326
вам не надо беспокоится или отдельные команды, он всё помнит и делает за вас,
когда вы сделали как написано.

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

rutgerg
Сообщения: 140
Зарегистрирован: 04.09.2022

#

BendalfRU: со скриптом https://archlinux.com.ru/forum/viewtopi ... 326#p12326
вам не надо беспокоится или отдельные команды, он всё помнит и делает за вас,
когда вы сделали как написано.
А как обозвать скрипт, где его расположить, как запускать (автозагрузка при запуске, или ещё как)????? И наконец: Каков источник сего?
BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

rutgerg: А как обозвать скрипт, где его расположить, как запускать (автозагрузка при запуске, или ещё как)????? И наконец: Каков источник сего?
Инструкции и сам код , описания https://archlinux.com.ru/forum/viewtopi ... 326#p12326

*источник я;
Последний раз редактировалось BendalfRU 23.04.2026 18:55, всего редактировалось 5 раз.

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

rutgerg
Сообщения: 140
Зарегистрирован: 04.09.2022

#

BendalfRU, спасибо. Будем посмотреть. Позже, если что, отпишусь.
ALiEN
Аватара пользователя
Сообщения: 531
Зарегистрирован: 23.08.2022

#

BendalfRU: Если кому-то интересно, давайте сделаем более продвинутый
и красиво оформленный вариант с документацией,
улучшения предлагайте пожалуйста.
У меня мозг взорвался.
Это инструкция - как из двух простых команд сделать монструозный комбайн??
sudo nano /anyfile; sudo chmod 440 /anyfile
Ну или красиво функцией:
cool_edit() {
        [[ $# -ne 2 ]] && {
        echo "Usage: cool_edit <file> <rights>"
        echo "Example: cool_edit /etc/fstab 644"
        return 1
        }
    sudo nano "$1"
    sudo chmod "$2" "$1"
}
BendalfRU: что предотвращает конфликт на работающей машине, когда вы сохраняете промежуточный результат.
Вроде как и слова умные. Но абсолютно бесполезные. Если файл занят процессом - то при последующем cp/mv всё равно будет отлуп "нельзя, файл занят другим процессом".
И зачем эти танцы с mktemp?
Вложения
Буфер обмена-1.png
(11.12 КБ) 0 скачиваний

🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 HP EliteBook 745 G6 :: AMD Ryzen 5 PRO 3500U :: 8 GB DDR4 :: AMD Radeon Vega 8 :: XFCE

BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

Cкрытый текст
ALiEN: что предотвращает конфликт на работающей машине, когда вы сохраняете промежуточный результат.
Вроде как и слова умные. Но абсолютно бесполезные. Если файл занят процессом -
Добрый день коллега, когда вырегистрировались, то согласились соблюдать правила https://archlinux.com.ru/forum/viewtopic.php?t=33
А именно "Никакого троллинга #" , "Никакого флейма #" , "Неэффективная дискуссия"
Сейчас вы занялись развитием негатива, провокацией. Прошу вас откорректировать вашу публикацию на соотвествие правилам

Давайте пожалуйста конструктивную критику:
"Критикуя предлагайте" и просьба была "Если кому-то интересно, давайте сделаем более продвинутый
и красиво оформленный вариант
с документацией,
улучшения предлагайте пожалуйста."

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

ALiEN
Аватара пользователя
Сообщения: 531
Зарегистрирован: 23.08.2022

#

BendalfRU:Давайте пожалуйста конструктивную критику:
А моё сообщение выше это что?

Постарайтесь предельно чётко ответить на два вопроса:
1. Чем ваш скрипт лучше двух команд в терминале?
2. Зачем нужен промежуточный файл?

🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 HP EliteBook 745 G6 :: AMD Ryzen 5 PRO 3500U :: 8 GB DDR4 :: AMD Radeon Vega 8 :: XFCE

BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

ALiEN:А моё сообщение выше это что?
Это не понятно как пришить к исходному тексту по переменным и куда это вставлять.
ALiEN: Не берите на себя функции модератора форума. Вы им уж точно не являетесь.
Я не модерирую, напомнил вам правила. Не хочется вас потерять, вы часто даёте хорошую помощь.
ALiEN: Постарайтесь предельно чётко ответить на два вопроса:
1. Чем ваш скрипт лучше двух команд в терминале?
2. Зачем нужен промежуточный файл?
Может быть вы найдёте силы ознакомться с комментарии в коде, инструкции и обьяснение работы ?
Можете пожалуйста ткнуть пальцем в где пропустил я данные обьяснения?

Вот ссылка, чтобы не листать https://archlinux.com.ru/forum/viewtopi ... 326#p12326

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

ALiEN
Аватара пользователя
Сообщения: 531
Зарегистрирован: 23.08.2022

#

BendalfRU: Может быть вы найдёте силы ознакомться с комментарии в коде, инструкции и обьяснение работы ?
Я не спрашиваю про код скрипта. Я спрашиваю - зачем вообще нужен этот скрипт?

🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 HP EliteBook 745 G6 :: AMD Ryzen 5 PRO 3500U :: 8 GB DDR4 :: AMD Radeon Vega 8 :: XFCE

BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

ALiEN:Я спрашиваю - зачем вообще нужен этот скрипт?
В моей публикации уже описан ответ на данный вопрос и на два предыдущих.

А если не нашли. то пожалуйста укажите место, в котором я это оьяснение пропустил.

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

ALiEN
Аватара пользователя
Сообщения: 531
Зарегистрирован: 23.08.2022

#

BendalfRU: А если не нашли. то пожалуйста укажите место, в котором я это оьяснение пропустил.
Не надо юлить. Просил же: Постарайтесь предельно чётко ответить на два вопроса:
Пока что ответов нет...

🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 HP EliteBook 745 G6 :: AMD Ryzen 5 PRO 3500U :: 8 GB DDR4 :: AMD Radeon Vega 8 :: XFCE

vall
Аватара пользователя
Администрация
Сообщения: 1112
Зарегистрирован: 09.08.2022

#

BendalfRU:Добрый день коллега, когда вырегистрировались,
Сообщение под спойлером. Причины и разъяснения для схожей ситуации приведены здесь https://archlinux.com.ru/forum/viewtopi ... 399#p12399
vall
Аватара пользователя
Администрация
Сообщения: 1112
Зарегистрирован: 09.08.2022

#

ALiEN: Постарайтесь предельно чётко ответить на два вопроса:
1. Чем ваш скрипт лучше двух команд в терминале?
Расширю вопрос. Для чего создавать скрипты "на каждый чих"? Вы на этом форуме весьма часто предлагаете решение вопросов с помощью скриптов. Это общее личное впечатление.
BendalfRU
Сообщения: 347
Зарегистрирован: 07.07.2025

#

vall:Для чего создавать скрипты "на каждый чих"?
Для типовых ситуаций с учётом ньюансов:
* Рабочая ситуация с сервисом/таймером, отчётом, проектом;
* Установкой Арчлинукс или к мануалу с ВИКИ.
* С документацией легко вспомнить и всё учесть.

CPU AMD Phenom(tm) II X4 955 3200МГЦ, 10ГБ ДДР2, GA-MA770-UD3 (Rev. 2.0, bios fj),
АМД Sapphire Radeon HD 4670, hdd ide ata5 120GB+200GB, net rtl8169, audio Creative Labs CA0106.

rutgerg
Сообщения: 140
Зарегистрирован: 04.09.2022

#

Алё, алё, алё!!! Помоему все сильно отошли от темы. Если вернуться к "нашим баранам", то:
rutgerg: Вопрос уже в другом: почему этот глюк с правами доступа происходит? Хотя система продолжает отлично работать и ошибка, по сути, видна только при проверке синтаксиса. Пока ответа в инете не нашёл.
Ответить