Управление учетными записями служб в спецификации RPM


16

Мне дали частично полную спецификацию RPM для сервиса, который мы пишем. Он позволяет создавать необходимые каталоги, копировать файлы, устанавливать разрешения и т. Д., Но не создает системную учетную запись, под которой будет работать служба. Мне сказали, что RPM лучше всего позаботиться об этом, поэтому я добавил

Requires(pre): /usr/sbin/useradd

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

Это позволяет создать учетную запись пользователя (и связанную группу), поэтому позже, когда он пытается установить права доступа / права на файлы службы, это также успешно выполняется.

Моя текущая проблема заключается в следующем: а) если учетная запись пользователя уже существует, установка RPM завершится неудачно из-за useraddсбоя (поскольку пользователь уже существует); и б) я не знаю, как rpm -e myserviceтакже удалить соответствующего пользователя и группу.


//, рассмотрите возможность использования FPM?
Натан Басанезе

Ответы:


18

Я на самом деле решил это самостоятельно, посмотрев на другие спецификации RPM, которые делали подобные вещи. Если вы просто хотите добавить пользователя (условно), воспользуйтесь ссылкой Игнасио. Я сделал это:

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

Это гарантирует, что RPM «очищается после себя», но все же предоставляет возможность установки, даже если учетная запись уже существует.


13
Хотя это отвечает на вопрос, стоит прочитать заметку в ссылке на ссылку Fedora, опубликованную Игнасио, о том, почему удаление пользователя / группы нежелательно.
CoverosGene

1
Существует проблема повторного использования UID и GID (когда удаленный пользователь имеет самый высокий UID / GID), что делает любое автоматическое использование userdel плохой идеей.
Bruno9779

1
В моем CentOS 6.7 я удалил команду / usr / sbin / groupadd, так как команда useradd создаст саму группу. Также useradd завершит работу с ошибкой, когда группа с таким именем уже существует.
Рафаэль

rpmlint отчет «W: опасная команда в% postun userdel», если вы его используете
Rfraile

5

Любой из двух предыдущих ответов готов к работе, так как эти методы удаляют пользователя, если пакет обновляется. Yum устанавливает новый пакет, а затем удаляет старый пакет. Это оставит вас без пользователя. Не круто!

Используйте этот метод вместо:

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

4

Ответ от Coderer хороший, но вторая предварительная команда выдает ошибку на Centos 7. Группу необходимо указать.

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

Я также добавил перенаправление в / dev / null, чтобы игнорировать нежелательные эхо.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.