Como definir umask para um usuário do sistema?

Como definir umask para um usuário do sistema?

É possível definir umaskpara um usuário do sistema (criado com useradd --system username)?

Responder1

Existem três maneiras normais de definir umask de um usuário.

  1. DefinirUMASK/etc/login.defs
  2. Adicione pam_umask.soà sua configuração PAM em/etc/pam.d
  3. Defina-o nos arquivos de inicialização do shell, por exemplo/etc/profile

Não há diferença entre usuários do sistema e usuários normais nesse aspecto.

Mas presumo que você esteja tentando iniciar um daemon com uma umask personalizada.

O problema é: todas as opções acima acontecem quando um usuário efetua login. Se você estiver executando um daemon, ele nunca efetua login. Ele é iniciado pelo init e é executado como root ou chama setuidpara ser executado como o usuário do sistema que você especifica .

Suas principais opções são:

  1. coloque umaskseu script de inicialização (faça um grep umask /etc/init.d/*exemplo)
  2. configure o init para iniciar o programa com uma umask personalizada (systemd.exec iniciante umask)
  3. se estiver usando start-stop-daemon, passe oopção umask
  4. modifique o próprio programa para chamar oumaskfunção ou chamada de sistema

Responder2

Os usuários do sistema diferem dos 'normais' de três maneiras: expiração da senha, diretório inicial (os usuários do sistema não possuem um) e UID (os usuários do sistema geralmente estão abaixo de algum limite arbitrário).

No caso geral, você está quase totalmente sem sorte. Você pode usar o PAM para definir o umask, mas o PAM seleciona comportamentos com base em outras coisas além dessas três diferenças.

Em outras palavras, você não pode fazer com que o PAM distinga entre usuários do 'sistema' e dos 'não-sistema'. Isso deixa você com duas opções:

  • Você usa o PAM para definir o umask para todos (por exemplo, check in /etc/login.defs) e, em seguida, define explicitamente o umask para usuários que não são do sistema /etc/bash.bashrc(ou similar);

  • Ou você escreve seu próprio módulo PAM para fazer isso. Acho que isso seria bem recebido por muitas pessoas, já que definir umask é uma solicitação comum.

Por favor, aceite esta resposta com uma generosa pitada de sal. Esse tipo de solicitação é bastante comum e eu não ficaria surpreso se existisse uma maneira melhor/adequada agora.

Responder3

Como sugere @Mikel, se você estiver tentando configurar uma conta do sistema que seja um daemon, tente configurar o próprio daemon.

Cheguei a esta questão procurando como definir o umask para a conta _www no MacOS. Embora isso seja difícil, como sugerem as respostas acima, descobri que poderia resolvê-lo configurando o serviço Apache como (neste caso) o usuário == um daemon.

Estranhamente, não consegui encontrar o script de inicialização (normalmente em /etc/init.d/ mas em um Mac em Library/LaunchDaemons/), mas com a ajuda de:http://krypted.com/mac-security/apache2-umasks/descobri que o apache tem seu próprio script de ambiente específico.

$ sudo vim /usr/sbin/envvars
    umask 002

Possivelmente outros daemons possuem métodos semelhantes, o que pode ajudar em casos específicos.

informação relacionada