Wie füge ich sudoers.d von einem benutzerdefinierten RPM hinzu?

1039
Youn Elan

Ich habe ein benutzerdefiniertes RPM erstellt, das sudoers Einträge hinzufügen muss, damit ich meinem RPM eine Datei hinzugefügt /etc/sudoers.d/mypackageund meine Sudo-Befehle dort einfügen kann .

Die Dateien werden hinzugefügt und das RPM wird generiert. Wenn ich versuche, das Paket zu installieren, beschwert es sich leider:

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 

Das RPM wird gut installiert, wenn ich es mit --force installiere, beispielsweise:

rpm -Uvh --force mypackage.rpm 

Ich könnte den Inhalt der sudoers-Datei wahrscheinlich in echo setzen, /etc/sudoers.daber ich würde es vorziehen, wenn die sudoers-Datei mit dem RPM verfolgt wird.

Wie füge ich Sudoers Einträge aus einem benutzerdefinierten RPM hinzu, ohne dass sich Sudo beschwert?

BEARBEITEN: Um meinen Beitrag etwas zu klären, habe ich ein Dutzend Verzeichnisse mit Dateien:

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

Da ich die Liste der Verzeichnisse nicht im Voraus habe und diese Liste sich ändern kann, habe ich Folgendes versucht:

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

Zu diesem Zeitpunkt werden Dateien in sudoers.d jedoch nicht eingeschlossen. Wenn ich Verzeichnisse einzeln erwähnen wollte, müsste ich diese Verzeichnisliste dynamisch generieren

Wie vorgeschlagen, habe ich versucht rpm -qf /etc/sudoers.dund es sagt es sudo-1.8.5.el7_2.x86_64. Wenn ich das tue rpm -qf /etc/systemd/system, sagt es zwar, systemd-219-19.el7_2.x86_64aber rpm beschwert sich nicht, wenn ich versuche, die Drehzahl zu installieren

1

1 Antwort auf die Frage

2
Chris Maes

Dies liegt wahrscheinlich daran, dass Sie in dem %filesAbschnitt Folgendes haben:

%files /etc/sudoers.d/ 

Dadurch enthält Ihr Paket nicht nur die Dateien in /etc/sudoers.d; aber auch das Verzeichnis selbst. Sie können dies mit überprüfen rpm -qlp <generated-rpm>.

rpmerlaubt nicht, dass unterschiedliche Pakete dieselbe Datei oder dasselbe Verzeichnis bereitstellen. Die Lösung besteht darin, die Dateien nur in diesem Verzeichnis zu packen:

%files /etc/sudoers.d/* 
Ich hatte eigentlich / etc / * und ich habe dich gewählt, aber wenn ich das tue, verschwindet mein Problem. Mein Problem ist jedoch, dass ich möglicherweise eine unterschiedliche Anzahl von Verzeichnissen in / etc habe. Aus diesem Grund habe ich / etc / * verwendet. Ich habe versucht, einen Ausschluss /etc/sudoers.d hinzuzufügen, und dann eine Direktive /etc/sudoers.d/* hinzuzufügen, aber die darin enthaltenen Dateien waren nicht enthalten. Gibt es eine Möglichkeit, alle etc-Unterverzeichnisse einzuschließen, ohne sie einzeln aufzuführen und trotzdem funktionieren? Youn Elan vor 8 Jahren 0
Das interessante daran ist, dass es nur mit /etc/sudoers.d funktioniert. Das macht man nicht mit /etc/httpd/conf.d/etc/profile.d / etc / systemd / system etc Youn Elan vor 8 Jahren 0
warum machst du einen "ausschluss"? Sie können einfach jede Ihrer Dateien manuell angeben (/etc/sudoers.d/file1 usw.); Entweder die Zeile, die ich vorgeschlagen habe: /etc/sudoers.d/*. Sie können anschließend mit `rpm -qlp` überprüfen, was genau in Ihrem RPM enthalten ist. Chris Maes vor 8 Jahren 0
Es ist logisch, dass dies bei /etc/httpd/conf.d/ etc nicht der Fall ist. Das liegt daran, dass niemand diese Verzeichnisse bereitstellt. Sie können überprüfen, wer ** eine bestimmte Datei oder ein bestimmtes Verzeichnis ** besitzt, indem Sie `rpm -qf / path / to / dir / oder / file` verwenden Chris Maes vor 8 Jahren 0
Ich habe den Beitrag zur Klarstellung bearbeitet: Ja, er gehört Sudo, aber dasselbe gilt für `/ etc / systemd / system` (bereitgestellt von systemd) und` / etc / httpd / conf.d` (bereitgestellt von httpd) dort passiert keine Warnung Youn Elan vor 8 Jahren 0
Am Ende schrieb ich ein Skript, das die Liste der Ordner generiert. Nicht genau das, worauf ich gehofft hatte, aber ich denke, es funktioniert. Danke für die Hilfe Youn Elan vor 8 Jahren 0
Ok, das funktioniert, aber es ist einfacher, wenn Sie '/ etc / *' entfernen und eine Liste aller Dateien hinzufügen, die Ihr rpm bereitstellt. Das ist der Weg zu gehen ... Chris Maes vor 8 Jahren 0