Проверка sudoers
~ sudo visudo -c
[sudo] пароль для ......
/etc/sudoers: успешно обработан
/etc/sudoers.d/05_proxy: некорректные права доступа, должны быть 0440
Настораживает последняя строка. Или можно проглотить это. sudo работает нормально.
Может кто сталкивался с этим явлением.
Вариант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"
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.
Более гибкий вариант и можно вшить любые действия прямо в тело или чз 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*Если вам непременно надо 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.
Создал пустой текстовый файл 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
вам не надо беспокоится или отдельные команды, он всё помнит и делает за вас,
когда вы сделали как написано.
Инструкции и сам код , описания https://archlinux.com.ru/forum/viewtopi ... 326#p12326rutgerg: А как обозвать скрипт, где его расположить, как запускать (автозагрузка при запуске, или ещё как)????? И наконец: Каков источник сего?
*источник я;
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: Если кому-то интересно, давайте сделаем более продвинутый
и красиво оформленный вариант с документацией,
улучшения предлагайте пожалуйста.
Это инструкция - как из двух простых команд сделать монструозный комбайн??
sudo nano /anyfile; sudo chmod 440 /anyfilecool_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"
}Вроде как и слова умные. Но абсолютно бесполезные. Если файл занят процессом - то при последующем cp/mv всё равно будет отлуп "нельзя, файл занят другим процессом".BendalfRU: что предотвращает конфликт на работающей машине, когда вы сохраняете промежуточный результат.
И зачем эти танцы с 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
Cкрытый текст
Добрый день коллега, когда вырегистрировались, то согласились соблюдать правила https://archlinux.com.ru/forum/viewtopic.php?t=33ALiEN: что предотвращает конфликт на работающей машине, когда вы сохраняете промежуточный результат.
Вроде как и слова умные. Но абсолютно бесполезные. Если файл занят процессом -
А именно "Никакого троллинга #" , "Никакого флейма #" , "Неэффективная дискуссия"
Сейчас вы занялись развитием негатива, провокацией. Прошу вас откорректировать вашу публикацию на соотвествие правилам
Давайте пожалуйста конструктивную критику:
"Критикуя предлагайте" и просьба была "Если кому-то интересно, давайте сделаем более продвинутый
и красиво оформленный вариант с документацией,
улучшения предлагайте пожалуйста."
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:Давайте пожалуйста конструктивную критику:
Постарайтесь предельно чётко ответить на два вопроса:
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
Это не понятно как пришить к исходному тексту по переменным и куда это вставлять.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.
Я не спрашиваю про код скрипта. Я спрашиваю - зачем вообще нужен этот скрипт?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
В моей публикации уже описан ответ на данный вопрос и на два предыдущих.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.
Не надо юлить. Просил же: Постарайтесь предельно чётко ответить на два вопроса: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
Сообщение под спойлером. Причины и разъяснения для схожей ситуации приведены здесь https://archlinux.com.ru/forum/viewtopi ... 399#p12399BendalfRU:Добрый день коллега, когда вырегистрировались,
Расширю вопрос. Для чего создавать скрипты "на каждый чих"? Вы на этом форуме весьма часто предлагаете решение вопросов с помощью скриптов. Это общее личное впечатление.ALiEN: Постарайтесь предельно чётко ответить на два вопроса:
1. Чем ваш скрипт лучше двух команд в терминале?
Для типовых ситуаций с учётом ньюансов: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: Вопрос уже в другом: почему этот глюк с правами доступа происходит? Хотя система продолжает отлично работать и ошибка, по сути, видна только при проверке синтаксиса. Пока ответа в инете не нашёл.