Керування обліковими записами послуг у специфікації RPM


16

Мені дали частково повну специфікацію RPM для послуги, про яку ми пишемо. Це стосується створення необхідних каталогів, копіювання файлів, налаштування дозволів тощо, але це не робить необхідного системного облікового запису, під яким працюватиме служба. Мені сказали, що RPM найкраще подбати про це, тому я додав

Requires(pre): /usr/sbin/useradd

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

Це вдається створити обліковий запис користувача (та пов’язану з ним групу), тому пізніше, коли він намагається встановити права власності / дозволи на файли сервісу, це також успішно.

Моя поточна проблема полягає в: а) якщо обліковий запис користувача вже існує, установка RPM не працює, оскільки useraddне працює (оскільки користувач вже існує); і b) я не знаю, як 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: dangerous-command-in-% 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.