In che modo il pacchetto Debian dovrebbe creare account utente?


33

Il pacchetto qqq.debinstalla il programma qqqche dovrebbe essere eseguito dall'account uqqqutente. Il pacchetto è composto da qqqprogramma, qqq.conffile di configurazione e /etc/init.d/qqqinitscript.

In che modo il pacchetto dovrebbe gestire la creazione dell'utente uqqq? Ci sono delle migliori pratiche o linee guida ufficiali al riguardo?

  1. Basta creare l'utente automaticamente uqqqin postinst;
  2. Crea automaticamente l'utente al primo avvio dallo /etc/init.d/qqqscript;
  3. Crea automaticamente l'utente al primo avvio del qqqprogramma (senza argomenti)
  4. Non creare alcun account utente, rifiuta di iniziare a meno che l'utente non sia stato esplicitamente creato dall'amministratore (ad esempio, utilizzando qqq --create-user);
  5. Non creare alcun account utente, eseguito in modo non sicuro dalla radice per impostazione predefinita;
  6. Chiedi in modo interattivo in postinst, script init.d o qqqse stesso se creare un utente.

Il pacchetto deve rimuovere l'account utente quando viene disinstallato?


7
Il modo più semplice per ottenere le risposte a questa domanda è guardare gli script pre / post installazione dei pacchetti Debian ufficiali. Basta eseguire grep adduser /var/lib/dpkg/info/*.postinstsu qualsiasi sistema basato su Debian per ottenere molti esempi.
jofel,

Quando adduserviene utilizzato, deve anche dipendere dal pacchetto. Vedi: lintian.debian.org/tags/…
Lekensteyn,

Risposte:


22

Il wiki di Debian ha una guida più completa e specifica rispetto al già citato Manuale delle politiche di Debian. Vedi Script AccountHandlingInMaintainer :

Il programma adduser fa la cosa giusta se chiamato con l'opzione --system. Di solito è quindi solo necessario chiamare

adduser --system $ USERNAME

nel tuo postinst per creare l'account con accessi disabilitati, un gruppo primario di nogroup e una home directory in / home. Se vuoi altre opzioni, aggiungile come vuoi.

Normalmente non dovrebbe essere necessario effettuare un controllo incrociato con getent se esiste già un account poiché adduser --system generalmente fa la cosa giusta. In caso contrario, segnala un bug contro adduser per semplificare gli script del manutentore.

Il consiglio che fornisce sull'eliminazione degli account è inconcludente. Tuttavia, noterò che il consiglio corrispondente per fedora non equivale.

Non rimuovere utenti o gruppi Non rimuoviamo mai utenti o gruppi creati dai pacchetti. Non c'è modo sano di controllare se i file di proprietà di quegli utenti / gruppi vengono lasciati indietro (e anche se ci fossero, cosa faremmo con loro?) E lasciarli indietro con proprietà che indicano utenti / gruppi ora inesistenti può causare problemi di sicurezza quando un utente / gruppo semanticamente non correlato viene creato in un secondo momento e riutilizza l'UID / GID. Inoltre, in alcune configurazioni l'eliminazione dell'utente / del gruppo potrebbe non essere possibile o / o auspicabile (ad es. Quando si utilizza un database utente / gruppo condiviso, remoto). La pulizia di utenti / gruppi inutilizzati è lasciata agli amministratori di sistema che se ne occupano se lo desiderano.


12

Come amministratore che installa i pacchetti, mi aspetto che i miei pacchetti creino automaticamente gli utenti richiesti in pre o postinst, in modo che tutti i file che devono essere di proprietà dell'utente possano essere creati in modo da eseguire il programma.

Il tuo programma dovrebbe essere eseguito come root solo se necessario (ad es. Associare alla porta privilegiata) e idealmente dovrebbe abbandonare i suoi privilegi una volta terminato di fare ciò che è richiesto root.

Puoi vedere come altri pacchetti (installati) hanno gestito questo usando

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

e leggendo i file elencati (la maggior parte richiede più di una riga di opzioni).

Stranamente, tutti tranne uno dei miei pacchetti installati che creano un utente utilizzano adduserper aggiungere utenti, ma il pacchetto adduser non è un pacchetto richiesto, quindi il pacchetto dovrà essere costruito per dipendere da esso. Il useraddprogramma è utilizzato dal pacchetto libuuid1 ed è parte del passwdpacchetto che è un pacchetto richiesto.


1
È terribile, controlla il modo corretto di generare gli script preinst piuttosto che hackerarne uno manualmente.
Tenworf,

l' --quietapproccio sembra molto popolare
vidstige

6

Sezione 10.9 I permessi e i proprietari nel Manuale delle politiche di Debian ha quello che stai cercando (dalla "versione 3.9.5.0, 28-10-2013"):

Se devi creare un nuovo utente o gruppo per il tuo pacchetto, ci sono due possibilità. In primo luogo, potrebbe essere necessario rendere alcuni file nel pacchetto binario di proprietà di questo utente o gruppo, oppure potrebbe essere necessario compilare l'id utente o del gruppo (anziché solo il nome) nel file binario (sebbene quest'ultimo debba essere evitato se possibile, come in questo caso è necessario un ID assegnato staticamente).

Se hai bisogno di un ID allocato staticamente, devi richiedere un ID utente o di gruppo dal 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 the'pacchetto base-passwd' con l'id presente in /etc/passwd' or / etc / group ', oppure fare in modo che il tuo pacchetto crei l'utente o il gruppo stesso con il corretto id (usare adduser') in itspreinst 'o postinst'. (Doing it in thepostinst' è preferibile se possibile, altrimenti sarà necessaria una pre-dipendenza sul pacchetto `adduser ').

Nota: La lista debian-devel è molto attiva e risposte a domande troppo (anche se questo esempio è a partire dal 2003).


3
Quindi, la risposta semplificata breve è "Usa adduserin postinst".
Vi.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.