Как мне добавить в sudoers.d пользовательский RPM

969
Youn Elan

У меня есть собственный RPM, который я создал, который должен добавлять записи в sudoers, поэтому я добавил записи в файл RPM /etc/sudoers.d/mypackageи добавил туда свои команды sudo.

Файлы добавляются, и RPM генерируется. К сожалению, когда я пытаюсь установить пакет, он жалуется:

file /etc/sudoers.d from install of mypackage-1.0.0-1.x86_64 conflicts with file from sudo-1.8.6p7016.el7.x86_64 

Rpm установится нормально, если я установлю его с --force, например:

rpm -Uvh --force mypackage.rpm 

Возможно, я мог бы перенести содержимое файла sudoers в файл, /etc/sudoers.dно я бы предпочел, чтобы файл sudoers отслеживался с помощью rpm.

Как добавить записи в sudoers с пользовательского RPM без жалоб sudo?

РЕДАКТИРОВАТЬ: Чтобы уточнить мой пост, у меня есть дюжина каталогов, заполненных файлами:

/etc/sudoers.d /etc/httpd/conf.d/ /etc/systemd/system /etc/cron.d ... 

Поскольку у меня нет заранее списка каталогов, и этот список может измениться, я попытался сделать это:

%files /etc/* %exclude /etc/sudoers.d /etc/sudoers.d/* 

но в этот момент файлы в sudoers.d не включаются. Если бы я хотел упомянуть каталоги, один за другим, мне пришлось бы динамически генерировать этот список каталогов.

Как и было предложено, я попытался сделать, rpm -qf /etc/sudoers.dи это говорит sudo-1.8.5.el7_2.x86_64. Если я это сделаю rpm -qf /etc/systemd/system, он говорит, systemd-219-19.el7_2.x86_64но RPM не жалуется, когда я пытаюсь установить RPM

1

1 ответ на вопрос

2
Chris Maes

Это, вероятно, потому что в %filesразделе у вас есть что-то вроде этого:

%files /etc/sudoers.d/ 

Это делает ваш пакет не только включает файлы в /etc/sudoers.d; но и сам каталог. Вы можете проверить это, используя rpm -qlp <generated-rpm>.

rpmне позволяет различным пакетам предоставлять один и тот же файл или каталог. Решение состоит в том, чтобы только упаковать файлы в этом каталоге:

%files /etc/sudoers.d/* 
У меня на самом деле был / etc / *, и я проголосовал за тебя, но потому что, если я это сделаю, моя проблема исчезнет. Тем не менее, моя проблема в том, что у меня потенциально есть различное количество каталогов в / etc, и поэтому я сделал / etc / *. Я попытался добавить исключение /etc/sudoers.d, затем добавить директиву /etc/sudoers.d/*, но файлы там оказались не включены. Есть ли способ включить все подкаталоги и т. Д., Не перечисляя их по одному и все еще работать? Youn Elan 7 лет назад 0
Интересно то, что он делает это только с /etc/sudoers.d. Это не делается с помощью /etc/httpd/conf.d /etc/profile.d / etc / systemd / system и т. Д. Youn Elan 7 лет назад 0
почему вы делаете "исключить"? Вы можете просто указать вручную каждый из ваших файлов (/etc/sudoers.d/file1 и т. Д.); либо предложенную мной строку: /etc/sudoers.d/*. После этого вы можете проверить, что именно было включено в ваш rpm, используя `rpm -qlp`. Chris Maes 7 лет назад 0
Логично, что он этого не делает с /etc/httpd/conf.d/ и т. Д .; это потому, что никто, кажется, не предоставляет эти каталоги. Вы можете проверить, кому ** принадлежит ** определенный файл или каталог, используя `rpm -qf / path / to / dir / или / file` Chris Maes 7 лет назад 0
Я отредактировал пост, чтобы уточнить: да, он принадлежит sudo, но то же самое относится и к `/ etc / systemd / system` (предоставлено systemd) и` / etc / httpd / conf.d` (предоставлено httpd), но там не происходит никаких предупреждений Youn Elan 7 лет назад 0
В итоге я написал скрипт, который генерирует список папок. Не совсем то, на что я надеялся, но я думаю, что это работает. Спасибо за помощь Youn Elan 7 лет назад 0
Хорошо, это работает, но это проще, если вы удалите '/ etc / *' и добавите список всех файлов, которые предоставляет ваш rpm. Это путь ... Chris Maes 7 лет назад 0

Похожие вопросы