Вставьте строку NOPASSWD в нужном месте в sudoers, где бы она ни находилась - PullRequest
3 голосов
/ 05 апреля 2019

Я новичок в сценариях. Мне нужно запланировать работу на нескольких серверах и вставить NOPASSWD в нужное место в файлах sudoers. Условия - пропуск строк, где присутствует PASSWD и колесо присутствует.

Я успешно с нижеприведенным awk извлекаю строки, соответствующие моему выражению, но с помощью sed я не могу вставить или заменить требуемое.

awk '($1 ~ "%" && !/PASSWD/ && !/wheel/) {print}' sudoers

Сед:

sed '/NOPASSWD/b; s/ALL\=\(ALL\)[[:space:]].* ALL/ALL\=\(ALL\)[[:space:]].*NOPASSWD\: ALL/g' sudoers

Не работает и также не помогает, если команды отличаются от ВСЕХ.

Существующие: -

%<<group 1>>       ALL=(ALL)      /bin/su - oracle12
%<<group 2>>    ALL=(ALL)       ALL

Ожидаемая: -

%<<group 1>>       ALL=(ALL)      NOPASSWD: /bin/su - oracle12
%<<group 2>>    ALL=(ALL)       NOPASSWD: ALL

Любая помощь высоко ценится. Если есть какая-либо другая тема, которая решает подобную проблему, перенаправьте меня.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Кажется, ваша существующая команда awk с небольшими изменениями работает:

$ awk '($1 ~ "%" && !/PASSWD/ && !/wheel/) {$2 = $2 FS "NOPASSWD:"; print }' sudoers
0 голосов
/ 08 апреля 2019

Благодаря Гупте ... Теперь проблема решена.

ниже приведен скриптлет, который выполняет задание.Дайте мне знать, если кому-то понадобится объяснение.

awk '($ 1 ~ "%" &&! / PASSWD / &&! / Wheel /) {$ 2 = $ 2 FS "NOPASSWD:";print} '/ etc / sudoers> / tmp / temp_sudoers

во время чтения Line do First = echo $Line | cut -d' ' -f1;sed -i "s? ^ $ {Первый}. *? $ {Line}? g" / etc / sudoers done </ tmp / temp_sudoers </p>

@ gupta еще раз спасибо.

...