Проверка sudoers
~ sudo visudo -c
[sudo] пароль для ......
/etc/sudoers: успешно обработан
/etc/sudoers.d/05_proxy: некорректные права доступа, должны быть 0440
Настораживает последняя строка. Или можно проглотить это. sudo работает нормально.
Может кто сталкивался с этим явлением.
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"
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.
С таким сценарием вы всегда соблюдёте права доступа, которые вы почему-то забыли.
Непосредственно редактируется безопасная копия,
что предотвращает конфликт на работающей машине, когда вы сохраняете промежуточный результат.
Для каждой цели (sudoers, www, ftp, ssh, email, ...) сделайте файл с характерным именем и
укажите в нём заранее права и путь к папке.
#!/bin/bash
## Параметром служит целевой файл.
# --- Настройки ---
DEST_DIR="/etc/sudoers.d/" # Пример защищенной директории, укажите свою.
PERMS="0440" # укажите права здесь
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 root:root "$DEST_PATH"
fi
echo "Выполнено: $DEST_PATH"
Cкрытый текст
НАСТРОЙКИ: В этой части задаются глобальные переменные.
Вы можете изменить DEST_DIR для смены папки назначения или PERMS для управления доступом.
ИНИЦИАЛИЗАЦИЯ: Скрипт принимает ровно один параметр — имя файла. Если параметр пуст, выполнение прекращается.
ПРОВЕРКА_SUDO: Скрипт проверяет идентификатор пользователя (EUID).
Если это не 0 (root), работа прерывается, так как установка владельца и запись в системные папки требуют высших прав.
ПОДГОТОВКА_КОПИИ: С помощью конструкции case проверяется код возврата команды test -f.
При успехе (0) содержимое оригинала копируется в /tmp, при отсутствии (1) создается пустой временный файл.
РЕДАКТИРОВАНИЕ: Запускается выбранный редактор для правки именно временной копии.
Это защищает оригинальный файл от повреждения в процессе записи.
ВАЛИДАЦИЯ: Проверка флагом -s. Если после выхода из редактора файл оказался пустым, скрипт считает это ошибкой и не заменяет оригинал.
ЗАВЕРШЕНИЕ: Финальный этап.
Скрипт принудительно устанавливает владельца и права на временный файл,
после чего атомарно перемещает его в целевую директорию.
и красиво оформленный вариант с документацией,
улучшения предлагайте пожалуйста
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.
Создал пустой текстовый файл sysctl в /etc/sudoers.d/. Опять при проверке sudo visudo -c ошибка "некорректные права доступа, должны быть 0440".
Решил поробывать pkexec chmod 0440 /etc/sudoers.d/sysctl.
Помогло. Ошибка при проверке исчезла. Вопрос уже в другом: почему этот глюк с правами доступа происходит? Хотя система продолжает отлично работать и ошибка, по сути, видна только при проверке синтаксиса. Пока ответа в инете не нашёл.
Вам виднее,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.
А как обозвать скрипт, где его расположить, как запускать (автозагрузка при запуске, или ещё как)????? И наконец: Каков источник сего?BendalfRU: со скриптом https://archlinux.com.ru/forum/viewtopi ... 326#p12326
вам не надо беспокоится или отдельные команды, он всё помнит и делает за вас,
когда вы сделали как написано.
измените путь и права в скрипте, имя скрипта, если у вас другое местоrutgerg: А как обозвать скрипт, где его расположить, как запускать (автозагрузка при запуске, или ещё как)????? И наконец: Каков источник сего?
К примеру, вы редактируете что0то в /etc/sudoers.d/, :
*обзовите его sudo-edit.sh или как нравится , дайте права на исполнение chmod +x ./sudo-edit.sh ;
*общепринятое место для таких вещей /usr/local/bin/ , тогда вам не надо указывать путь при запуске, только имя;
*имя скрипта руками в терминал вводите и сразу после имени скрипта
укажите желаемое имя файла вот так,
sudo-edit 05_proxy*если вам непременно надо pkexec, то допишите его в скрипте ;
*если вам необходим автоматический запуск, то пригодится задание cron или сервис systemd ;
*источник я, сам написал;
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.