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

33

O pacote qqq.debinstala o programa qqqque deve ser executado a partir da uqqqconta do usuário. O pacote consiste no qqqprograma, qqq.confarquivo de configuração e /etc/init.d/qqqinitscript.

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

  1. Basta criar o usuário automaticamente uqqqno postinst;
  2. Crie o usuário automaticamente na primeira inicialização do /etc/init.d/qqqscript;
  3. Crie o usuário automaticamente na primeira inicialização do qqqprograma (sem argumentos)
  4. Não crie nenhuma conta de usuário, recuse-se a iniciar, a menos que o usuário seja criado explicitamente pelo administrador (por exemplo, usando qqq --create-user);
  5. Não crie nenhuma conta de usuário, execute sem segurança a partir do root por padrão;
  6. Interativamente, pergunte no postinstinst, no script init.d ou qqqse ele deve criar um usuário.

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

Vi.
fonte
7
A maneira mais fácil de obter as respostas desta pergunta é examinar os scripts de pré / pós-instalação dos pacotes oficiais do Debian. Basta executar grep adduser /var/lib/dpkg/info/*.postinstem qualquer sistema baseado em Debian para obter muitos exemplos.
Jofel
Quando adduseré usado, ele também precisa depender do pacote. Veja: lintian.debian.org/tags/…
Lekensteyn

Respostas:

22

O wiki Debian tem algumas orientações mais abrangentes e específicas do que o já mencionado Manual de Políticas Debian. Consulte AccountHandlingInMaintainerScripts :

O programa adduser faz a coisa certa se chamado com a opção --system. Portanto, geralmente é necessário apenas chamar

adduser --system $ USERNAME

no seu postinst para criar a conta com os logins desativados, um grupo principal de nogroup e um diretório inicial em / home. Se você quiser outras opções, adicione-as como desejar.

Normalmente, não é necessário verificar com a getent se já existe uma conta, pois o adduser --system geralmente faz a coisa certa. Caso contrário, informe um bug no adduser para manter os scripts do mantenedor simples.

Os conselhos que ele fornece sobre a exclusão de contas são inconclusivos. No entanto, observarei que o conselho correspondente para o fedora não equivoca.

Não remova usuários ou grupos Nunca removemos usuários ou grupos criados por pacotes. Não há uma maneira sensata de verificar se os arquivos pertencentes a esses usuários / grupos são deixados para trás (e mesmo se existirem, o que faríamos com eles?) E deixar esses arquivos para trás com propriedades apontando agora para usuários / grupos inexistentes podem resultar em problemas de segurança quando um usuário / grupo semanticamente não relacionado é criado posteriormente e reutiliza o UID / GID. Além disso, em algumas configurações, a exclusão do usuário / grupo pode não ser possível ou / nem desejável (por exemplo, ao usar um banco de dados compartilhado e remoto de usuários / grupos). A limpeza de usuários / grupos não utilizados é deixada para os administradores de sistema, se assim o desejarem.

fuzzyBSc
fonte
12

Como administrador da instalação de pacotes, eu esperaria que meus pacotes criassem automaticamente os usuários necessários no pré ou no postinst, para que todos os arquivos que pertencem ao usuário possam ser criados antes que o programa seja executado.

Seu programa só deve ser executado como root se for necessário (por exemplo, vincular-se à porta privilegiada) e, idealmente, deve abandonar seus privilégios quando terminar de fazer 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 leva mais de uma linha de opções).

Curiosamente, todos, exceto um dos meus pacotes instalados que criam um usuário, usam adduserpara adicionar usuários, mas o pacote adduser não é um pacote necessário, portanto, seu pacote terá que ser construído para depender dele. O useraddprograma é usado pelo pacote libuuid1 e faz parte do passwdpacote, que é um pacote necessário.

DerfK
fonte
1
Isso é terrível, verifique a maneira correta de gerar os scripts de pré-instalação, em vez de invadir manualmente um.
LtWorf
a --quietabordagem parece muito popular
vidstige
6

Seção 10.9. Permissões e proprietários no Manual de Políticas Debian têm o que você está procurando (de "versão 3.9.5.0, 2013-10-28"):

Se você precisar criar um novo usuário ou grupo para o seu pacote, existem duas possibilidades. Em primeiro lugar, pode ser necessário que alguns arquivos no pacote binário sejam de propriedade desse usuário ou grupo, ou pode ser necessário compilar o ID do usuário ou grupo (em vez de apenas o nome) no binário (embora esse último deva ser evitado se possível, pois nesse caso você precisa de um ID alocado estaticamente).

Se você precisar de um ID alocado estaticamente, deverá solicitar um ID de usuário ou grupo no 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 thepacote base-passwd 'com o ID presente em /etc/passwd' or / etc / group' ou providenciar para que o seu pacote crie o usuário ou o grupo com a correta id (usar adduser') in itspreinst 'ou postinst'. (Doing it in thepostinst' deve ser preferido, se possível, caso contrário, será necessária uma pré-dependência no pacote `adduser '.)

Nota: A lista debian-devel é bastante ativa e responde a essas perguntas também (embora esse exemplo seja de 2003).

Argila B
fonte
3
Portanto, a resposta curta e simplificada é "Use adduserin postinst".
Vi.