Como o pacote Debian deve criar contas de usuários?

30

O pacote qqq.deb instala o programa qqq que deve ser executado a partir da conta de usuário uqqq . O pacote consiste no programa qqq , qqq.conf config e /etc/init.d/qqq initscript.

Como o pacote deve gerenciar a criação do usuário uqqq ? Existem melhores práticas ou diretrizes oficiais sobre isso?

  1. Basta criar o usuário automaticamente uqqq in postinst;
  2. Crie o usuário automaticamente na primeira inicialização do script /etc/init.d/qqq ;
  3. Crie o usuário automaticamente na primeira inicialização do programa qqq (sem argumentos)
  4. Não crie contas de usuário, recuse-se a iniciar a menos que o usuário seja explicitamente criado pelo administrador (por exemplo, usando qqq --create-user );
  5. Não crie contas de usuário, executadas de forma insegura na raiz, por padrão;
  6. Peça interativamente no script postinst, init.d ou no próprio qqq se deseja criar um usuário.

O pacote deve remover a conta do usuário quando desinstalado?

    
por Vi. 06.08.2012 / 19:34

3 respostas

19

O wiki do Debian tem uma orientação mais abrangente e específica do que o já mencionado Manual de Políticas Debian. Consulte AccountHandlingInMaintainerScripts :

The adduser program does the right thing if called with the --system option. It is thus usually only necessary to call

adduser --system $USERNAME

in your postinst to create the account with logins disabled, a primary group of nogroup and a home directory under /home. If you want other options, add them as you want to.

It should normally not be necessary to cross-check with getent whether an account already exists since adduser --system generally does the right thing. If not, please report a bug against adduser to keep your maintainer scripts simple.

O conselho que ele fornece sobre a exclusão de contas é inconclusivo. No entanto, observarei que o aconselhamento correspondente para o fedora não equivoca.

Do not remove users or groups We never remove users or groups created by packages. There's no sane way to check if files owned by those users/groups are left behind (and even if there would, what would we do with them?) and leaving those behind with ownerships pointing to now nonexistent users/groups may result in security issues when a semantically unrelated user/group is created later and reuses the UID/GID. Also, in some setups deleting the user/group might not be possible or/nor desirable (eg. when using a shared, remote user/group database). Cleanup of unused users/groups is left to the system administrators to take care of if they so desire.

    
por 29.07.2014 / 04:28
11

Como administrador da instalação de pacotes, eu esperaria que meus pacotes criassem automaticamente os usuários que eles precisam em pré ou postinst, de modo que qualquer arquivo necessário para pertencer ao usuário possa ser feito antes que o programa seja executado.

Seu programa só deve ser executado como root se necessário (por exemplo, vincular-se a uma porta privilegiada) e, idealmente, deve abandonar seus privilégios quando terminar de executar o que é necessário.

Você pode ver como outros pacotes (instalados) lidaram com isso usando

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

e lendo os arquivos listados (a maioria usa mais de uma linha de opções).

Curiosamente, todos menos um dos meus pacotes instalados que criam um usuário usam adduser para adicionar usuários, mas o pacote adduser não é um pacote requerido, então seu pacote terá que ser construído para depender dele. O programa useradd é usado pelo pacote libuuid1 e faz parte do pacote passwd , que é um pacote obrigatório.

    
por 06.08.2012 / 20:10
6

Seção 10.9. Permissões e proprietários no Debian Policy Manual tem o que você está procurando (da "versão 3.9.5.0, 2013-10-28"):

If you need to create a new user or group for your package there are two possibilities. Firstly, you may need to make some files in the binary package be owned by this user or group, or you may need to compile the user or group id (rather than just the name) into the binary (though this latter should be avoided if possible, as in this case you need a statically allocated id).

If you need a statically allocated id, you must ask for a user or group id from the 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' package with the id present in /etc/passwd' or /etc/group', or arrange for your package to create the user or group itself with the correct id (using adduser') in itspreinst' or postinst'. (Doing it in thepostinst' is to be preferred if it is possible, otherwise a pre-dependency will be needed on the 'adduser' package.)

Nota: A lista debian-devel é bastante ativa e responde a tais questões too (embora esse exemplo seja de 2003).

    
por 11.04.2014 / 02:36