Verwalten von Dienstkonten in einer RPM-Spezifikation

16

Ich habe eine teilweise vollständige RPM-Spezifikation für einen Dienst erhalten, den wir schreiben. Es reicht nicht aus, die erforderlichen Verzeichnisse zu erstellen, Dateien zu kopieren, Berechtigungen festzulegen usw. Es wird jedoch nicht das erforderliche Systemkonto erstellt, unter dem der Dienst ausgeführt wird. Mir wurde gesagt, dass es am besten ist, wenn sich das RPM darum kümmert, also habe ich hinzugefügt

Requires(pre): /usr/sbin/useradd

%pre
useradd -r -d /path/to/program -s /bin/false myservice

Auf diese Weise wird das Benutzerkonto (und die zugeordnete Gruppe) erfolgreich erstellt. Wenn später versucht wird, den Besitz / die Berechtigungen für die Dateien des Dienstes festzulegen, ist dies ebenfalls erfolgreich.

Mein aktuelles Problem ist: a) Wenn das Benutzerkonto bereits vorhanden ist, schlägt die RPM-Installation fehl, da dies useraddfehlschlägt (weil der Benutzer bereits vorhanden ist). und b) Ich weiß nicht, wie ich rpm -e myserviceden zugehörigen Benutzer und die zugehörige Gruppe entfernen soll.

Coderer
quelle
// Würden Sie FPM in Betracht ziehen?
Nathan Basanese

Antworten:

18

Ich habe das tatsächlich unabhängig gelöst, indem ich mir andere RPM-Spezifikationen angesehen habe, die ähnliche Dinge taten. Wenn Sie nur (bedingt) einen Benutzer hinzufügen möchten, verwenden Sie den Link von Ignacio. Ich war das:

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin myservice

%postun
/usr/sbin/userdel myservice

Dies stellt sicher, dass das RPM "nach sich selbst bereinigt", aber dennoch die Möglichkeit zur Installation bietet, selbst wenn das Konto bereits vorhanden ist.

Coderer
quelle
13
Obwohl dies die Frage beantwortet, ist es wert , die Notiz in dem Fedora - Link zu lesen Link gepostet von Ignacio darüber , warum das Entfernen der Benutzer / Gruppe nicht erwünscht ist.
CoverosGene
1
Es gibt ein Problem bei der Wiederverwendung von UIDs und GIDs (wenn der gelöschte Benutzer die höchste UID / GID hat), das eine automatisierte Verwendung von userdel zu einer schlechten Idee macht.
Bruno9779,
1
Auf meinem CentOS 6.7 habe ich den Befehl / usr / sbin / groupadd entfernt, da der Befehl useradd die Gruppe selbst erstellt. Außerdem wird der Benutzer add mit einem Fehler beendet, wenn bereits eine gleichnamige Gruppe existiert.
Raffael
rpmlint report "W: gefährlich-befehl-in% postun userdel", wenn Sie es verwenden
Rfraile
5

Eine der beiden vorherigen Antworten ist produktionsbereit, da diese Methoden den Benutzer löschen, wenn das Paket aktualisiert wird. Yum installiert das neue Paket und entfernt dann das alte Paket. Dadurch bleiben Sie ohne Benutzer. Nicht cool!

Verwenden Sie stattdessen diese Methode:

%postun
case "$1" in
   0) # This is a yum remove.
      /usr/sbin/userdel myservice
   ;;
   1) # This is a yum upgrade.
      # do nothing
   ;;
 esac
Steven
quelle
4

Die Antwort von Coderer ist gut, aber der zweite Vorbefehl gibt mir auf Centos 7 einen Fehler. Die Gruppe muss angegeben werden.

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice > /dev/null || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice > /dev/null || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin -g myservice myservice

%postun
/usr/sbin/userdel myservice

Ich habe auch die Umleitung zu / dev / null hinzugefügt, um unerwünschte Echos zu ignorieren.

Tabinol
quelle