Mengelola akun layanan dalam spesifikasi RPM

16

Saya telah diberi spesifikasi RPM yang sebagian lengkap untuk layanan yang kami tulis. Sejauh ini membuat direktori yang diperlukan, menyalin file, mengatur izin, dll, tetapi itu tidak membuat akun sistem yang diperlukan bahwa layanan akan berjalan di bawah. Saya diberi tahu bahwa yang terbaik bagi RPM untuk mengurus ini, jadi saya menambahkan

Requires(pre): /usr/sbin/useradd

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

Ini berhasil membuat akun pengguna (dan grup terkait), jadi nanti ketika mencoba untuk mengatur kepemilikan / izin pada file layanan, yang berhasil juga.

Masalah saya saat ini adalah, a) jika akun pengguna sudah ada, instalasi RPM gagal karena useraddgagal (karena pengguna sudah ada); dan b) saya tidak tahu bagaimana untuk memiliki rpm -e myservicejuga menghapus pengguna terkait dan kelompok.

Pembuat kode
sumber
//, Apakah Anda ingin menggunakan FPM?
Nathan Basanese

Jawaban:

18

Saya benar-benar menyelesaikan ini secara mandiri, dengan melihat spesifikasi RPM lain yang melakukan hal serupa. Jika Anda hanya ingin menambahkan pengguna (syarat), gunakan tautan Ignacio. Saya melakukan ini:

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

Ini memastikan bahwa RPM "membersihkan sendiri" tetapi masih menyediakan kemampuan untuk menginstal bahkan jika akun sudah ada.

Pembuat kode
sumber
13
Meskipun ini menjawab pertanyaan, ada baiknya membaca catatan di tautan tautan Fedora yang diposting oleh Ignacio tentang mengapa menghapus pengguna / grup tidak diinginkan.
CoverosGene
1
Ada masalah penggunaan kembali UID dan GID (ketika pengguna yang dihapus memiliki UID / GID tertinggi), yang membuat penggunaan otomatis dari pengguna menjadi ide yang buruk.
Bruno9779
1
Pada CentOS 6.7 saya menghapus perintah / usr / sbin / groupadd karena perintah useradd akan membuat grup itu sendiri. Useradd juga akan keluar dengan kesalahan ketika grup dengan nama yang sama sudah ada.
Raffael
rpmlint laporkan "W: berbahaya-perintah-dalam% postun userdel" jika Anda menggunakannya
Rfraile
5

Salah satu dari dua jawaban sebelumnya adalah produksi siap karena metode-metode itu akan menghapus pengguna jika paket ditingkatkan. Yum menginstal paket baru kemudian menghapus paket lama. Ini akan membuat Anda tanpa pengguna. Tidak keren!

Gunakan metode ini sebagai gantinya:

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

Respons dari Coderer baik tetapi perintah pre kedua memberi saya kesalahan pada Centos 7. Grup harus ditentukan.

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

Saya menambahkan juga redirect ke / dev / null untuk mengabaikan gema yang tidak diinginkan.

Tabinol
sumber