¿Cómo debe crear el paquete Debian cuentas de usuario?

33

El paquete qqq.debinstala el programa qqqque debe ejecutarse desde uqqqla cuenta de usuario. El paquete consta del qqqprograma, el qqq.confarchivo de configuración y el /etc/init.d/qqqinitscript.

¿Cómo debe gestionar el paquete la creación del usuario uqqq? ¿Existen mejores prácticas o pautas oficiales sobre esto?

  1. Simplemente cree el usuario automáticamente uqqqen postinst;
  2. Cree el usuario automáticamente en el primer inicio desde el /etc/init.d/qqqscript;
  3. Cree el usuario automáticamente en el primer inicio del qqqprograma (sin argumentos)
  4. No cree ninguna cuenta de usuario, rechace comenzar a menos que el usuario haya sido creado explícitamente por el administrador (por ejemplo, usando qqq --create-user);
  5. No cree cuentas de usuario, ejecute de forma segura desde la raíz de forma predeterminada;
  6. Pregunte interactivamente en postinst, script init.d o el qqqmismo si crear un usuario.

¿Debería el paquete eliminar la cuenta de usuario cuando se desinstala?

Vi.
fuente
77
La forma más fácil de obtener las respuestas a esta pregunta es mirar los scripts previos / posteriores a la instalación de los paquetes oficiales de Debian. Simplemente ejecute grep adduser /var/lib/dpkg/info/*.postinsten cualquier sistema basado en Debian para obtener muchos ejemplos.
jofel
Cuando adduserse usa, también debe depender del paquete. Ver: lintian.debian.org/tags/…
Lekensteyn

Respuestas:

22

El wiki de Debian tiene una guía más completa y específica que el Manual de políticas de Debian ya mencionado. Ver AccountHandlingInMaintainerScripts :

El programa adduser hace lo correcto si se llama con la opción --system. Por lo tanto, generalmente solo es necesario llamar

adduser --sistema $ USERNAME

en su postinst para crear la cuenta con inicios de sesión deshabilitados, un grupo primario de nogroup y un directorio de inicio en / home. Si desea otras opciones, agréguelas como desee.

Normalmente no debería ser necesario verificar con getent si ya existe una cuenta ya que adduser --system generalmente hace lo correcto. De lo contrario, informe un error contra adduser para que sus secuencias de comandos de mantenimiento sean simples.

El consejo que brinda para eliminar cuentas no es concluyente. Sin embargo, notaré que el consejo correspondiente para fedora no se equivoca.

No elimine usuarios o grupos Nunca eliminamos usuarios o grupos creados por paquetes. No hay una forma sensata de verificar si los archivos que pertenecen a esos usuarios / grupos se quedan atrás (e incluso si así fuera, ¿qué haríamos con ellos?) Y dejar a aquellos atrás con propiedades que apuntan a usuarios / grupos ahora inexistentes puede dar lugar a problemas de seguridad cuando un usuario / grupo semánticamente no relacionado se crea más tarde y reutiliza el UID / GID. Además, en algunas configuraciones, eliminar el usuario / grupo podría no ser posible o deseable (por ejemplo, cuando se utiliza una base de datos compartida de usuarios / grupos remotos). La limpieza de los usuarios / grupos no utilizados se deja a los administradores del sistema para que se encarguen si así lo desean.

fuzzyBSc
fuente
12

Como administrador que instala paquetes, esperaría que mis paquetes creen automáticamente los usuarios que requieren en pre o postinst, de modo que cualquier archivo que deba ser propiedad del usuario se pueda crear antes de que se ejecute el programa.

Su programa solo debe ejecutarse como root si es necesario (por ejemplo, vincularse a un puerto privilegiado) e idealmente debería abandonar sus privilegios una vez que haya terminado de hacer lo que se requiere root.

Puede ver cómo otros paquetes (instalados) han manejado esto usando

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

y leer los archivos enumerados (la mayoría toma más de una línea de opciones).

Por extraño que parezca, todos menos uno de mis paquetes instalados que crean un usuario usan adduserpara agregar usuarios, pero el paquete adduser no es un paquete obligatorio, por lo que su paquete tendrá que construirse para depender de él. El useraddprograma es utilizado por el paquete libuuid1, y es parte del passwdpaquete que es un paquete requerido.

DerfK
fuente
1
Eso es terrible, verifique la forma correcta de generar los scripts de preinst en lugar de piratear uno manualmente.
LtWorf
el --quietenfoque parece muy popular
vidstige
6

Sección 10.9. Los permisos y propietarios en el Manual de políticas de Debian tienen lo que está buscando (de "versión 3.9.5.0, 2013-10-28"):

Si necesita crear un nuevo usuario o grupo para su paquete, hay dos posibilidades. En primer lugar, es posible que deba hacer que algunos archivos en el paquete binario sean propiedad de este usuario o grupo, o puede que necesite compilar el ID de usuario o grupo (en lugar de solo el nombre) en el binario (aunque este último debe evitarse si posible, ya que en este caso necesita una identificación asignada estáticamente).

Si necesita una identificación asignada estáticamente, debe solicitar una identificación de usuario o grupo del 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'paquete base-passwd con la identificación presente en /etc/passwd' or / etc / group', o hacer los arreglos para que su paquete cree el usuario o grupo con el correcto id (es adduser') in itspreferible usar preinst 'o postinst'. (Doing it in thepostinst' si es posible; de ​​lo contrario, se necesitará una dependencia previa en el paquete `adduser ').

Nota: La lista debian-devel es bastante activa y responde a esas preguntas también (aunque ese ejemplo es de 2003).

Arcilla b
fuente
3
Entonces, la respuesta corta y simplificada es "Usar adduseren postinst".
Vi.