Bagaimana paket Debian harus membuat akun pengguna?

33

Paket qqq.debmenginstal program qqqyang harus dijalankan dari uqqqakun pengguna. Paket terdiri dari qqqprogram, qqq.conffile konfigurasi dan /etc/init.d/qqqskrip init.

Bagaimana seharusnya paket mengelola pembuatan pengguna uqqq? Apakah ada praktik terbaik atau pedoman resmi tentang ini?

  1. Cukup buat pengguna secara otomatis uqqqdi postinst;
  2. Buat pengguna secara otomatis pada startup pertama dari /etc/init.d/qqqskrip;
  3. Buat pengguna secara otomatis pada startup pertama qqqprogram (tanpa argumen)
  4. Jangan membuat akun pengguna apa pun, menolak memulai kecuali jika pengguna dibuat secara eksplisit oleh administrator (misalnya, menggunakan qqq --create-user);
  5. Jangan membuat akun pengguna apa pun, jalankan secara tidak aman dari root secara default;
  6. Tanyakan secara interaktif di postinst, skrip init.d atau qqqdirinya sendiri apakah akan membuat pengguna.

Haruskah paket menghapus akun pengguna ketika dihapus?

Vi.
sumber
7
Cara termudah untuk mendapatkan jawaban dari pertanyaan ini adalah dengan melihat skrip pra / pasca instalasi paket resmi Debian. Jalankan saja grep adduser /var/lib/dpkg/info/*.postinstpada sistem berbasis Debian untuk mendapatkan banyak contoh.
jofel
Ketika adduserdigunakan, itu juga harus bergantung pada paket. Lihat: lintian.debian.org/tags/…
Lekensteyn

Jawaban:

22

Wiki Debian memiliki beberapa panduan yang lebih komprehensif dan spesifik daripada Manual Kebijakan Debian yang telah disebutkan. Lihat AccountHandlingInMaintainerScripts :

Program adduser melakukan hal yang benar jika dipanggil dengan opsi --system. Karena itu biasanya hanya perlu menelepon

adduser --system $ USERNAME

di postinst Anda untuk membuat akun dengan login dinonaktifkan, grup utama nogroup dan direktori home di / home. Jika Anda ingin opsi lain, tambahkan sesuai keinginan.

Seharusnya tidak perlu untuk memeriksa silang dengan getent apakah akun sudah ada sejak adduser --sistem umumnya melakukan hal yang benar. Jika tidak, harap laporkan bug terhadap adduser agar skrip pengelola Anda tetap sederhana.

Saran yang diberikannya pada penghapusan akun tidak dapat disimpulkan. Namun, saya akan perhatikan bahwa saran yang sesuai untuk fedora tidak berdalih.

Jangan hapus pengguna atau grup. Kami tidak pernah menghapus pengguna atau grup yang dibuat oleh paket. Tidak ada cara yang masuk akal untuk memeriksa apakah file yang dimiliki oleh pengguna / grup tersebut tertinggal (dan bahkan jika ada, apa yang akan kita lakukan dengan mereka?) Dan meninggalkan file-file tersebut dengan kepemilikan yang menunjuk ke sekarang bahwa pengguna / grup yang tidak ada dapat mengakibatkan masalah keamanan ketika pengguna / grup yang tidak terkait secara semantik dibuat kemudian dan menggunakan kembali UID / GID. Juga, dalam beberapa pengaturan menghapus pengguna / grup mungkin tidak mungkin atau / atau tidak diinginkan (misalnya ketika menggunakan database pengguna / grup bersama, remote). Pembersihan pengguna / grup yang tidak digunakan diserahkan kepada administrator sistem untuk menangani jika mereka menginginkannya.

fuzzyBSc
sumber
12

Sebagai administrator yang menginstal paket, saya berharap paket saya secara otomatis membuat pengguna yang mereka butuhkan baik sebelum atau sesudahnya, sehingga file apa pun yang diperlukan untuk dimiliki oleh pengguna dapat dibuat sebelum program dijalankan.

Program Anda seharusnya hanya dijalankan sebagai root jika perlu (mis. Ikat ke port privilege) dan idealnya harus menghapus privilege-nya setelah selesai melakukan apa yang diperlukan root.

Anda dapat melihat bagaimana paket lain (yang diinstal) menangani ini dengan menggunakan

grep -l adduser /var/lib/dpkg/info/*postinst /var/lib/dpkg/info/*preinst

dan membaca file yang terdaftar (kebanyakan mengambil lebih dari satu baris opsi).

Anehnya, semua kecuali satu dari paket terinstal saya yang membuat penggunaan pengguna adduseruntuk menambahkan pengguna, tetapi paket adduser bukan paket yang diperlukan, jadi paket Anda harus dibangun untuk bergantung padanya. The useraddProgram digunakan oleh paket libuuid1, dan merupakan bagian dari passwdpaket yang merupakan paket yang dibutuhkan.

DerfK
sumber
1
Itu mengerikan, periksa cara yang tepat untuk menghasilkan skrip preinst daripada meretas secara manual.
LtWorf
yang --quietpendekatan tampaknya sangat populer
vidstige
6

Bagian 10.9. Izin dan pemilik dalam Manual Kebijakan Debian memiliki apa yang Anda cari (dari "versi 3.9.5.0, 2013-10-28"):

Jika Anda perlu membuat pengguna atau grup baru untuk paket Anda, ada dua kemungkinan. Pertama, Anda mungkin perlu membuat beberapa file dalam paket biner dimiliki oleh pengguna atau grup ini, atau Anda mungkin perlu mengkompilasi id pengguna atau grup (bukan hanya nama) ke dalam biner (meskipun yang terakhir ini harus dihindari jika mungkin, karena dalam hal ini Anda memerlukan id yang dialokasikan secara statis).

Jika Anda memerlukan id yang dialokasikan secara statis, Anda harus meminta id pengguna atau grup dari paket base-passwd' maintainer, and must not release the package until you have been allocated one. Once you have been allocated one you must either make the package depend on a version of thebase-passwd dengan id yang ada di /etc/passwd' or / etc / group ', atau mengatur paket Anda untuk membuat pengguna atau grup itu sendiri dengan yang benar id (menggunakan adduser') in itspreinst 'atau postinst'. (Doing it in thepostinst' lebih disukai jika memungkinkan, jika tidak diperlukan pre-dependensi pada paket `adduser '.)

Catatan: Daftar debian-devel cukup aktif dan menjawab pertanyaan seperti itu juga (meskipun contohnya adalah dari tahun 2003).

Clay B
sumber
3
Jadi, jawaban singkat yang disederhanakan adalah "Gunakan adduserdalam postinst".
Vi.