É possível definir umask
para um usuário do sistema (criado com useradd --system username
)?
Responder1
Existem três maneiras normais de definir umask de um usuário.
- Definir
UMASK
/etc/login.defs
- Adicione
pam_umask.so
à sua configuração PAM em/etc/pam.d
- 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 setuid
para ser executado como o usuário do sistema que você especifica .
Suas principais opções são:
- coloque
umask
seu script de inicialização (faça umgrep umask /etc/init.d/*
exemplo) - configure o init para iniciar o programa com uma umask personalizada (systemd.exec iniciante umask)
- se estiver usando
start-stop-daemon
, passe oopção umask - 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.