Como definir umask para um usuário do sistema?


14

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

Respostas:


14

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

  1. Situado UMASKem/etc/login.defs
  2. Adicione pam_umask.soà sua configuração do PAM em/etc/pam.d
  3. Coloque-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 sentido.

Mas suponho 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ê está executando um daemon, ele nunca efetua login. Ele é iniciado pelo init, então é executado como root ou é setuidexecutado como o usuário do sistema especificado por você. .

Suas principais opções são:

  1. coloque umaskno seu script init (faça um grep umask /etc/init.d/*por exemplo)
  2. configure init para iniciar o programa com umask customizada ( systemd.exec upstart umask )
  3. se estiver usando start-stop-daemon, passe a opção umask
  4. modificar o próprio programa para chamar a função umask ou a chamada do sistema

Você sabe como definir uma umask para SSHFS (sftp-server) no Arch Linux (que usa systemd)? Como você apontou, as 3 primeiras opções listadas não têm efeito.
MountainX-para-Monica

2

Os usuários do sistema diferem dos 'normais' de três maneiras: expiração de senha, diretório inicial (os usuários do sistema não têm um) e UID (os usuários do sistema geralmente estão abaixo de um 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 o PAM distinguir entre usuários de 'sistema' e 'não pertencentes ao sistema'. Isso deixa você com duas opções:

  • Você pode usar o PAM para definir o umask para todos (por exemplo, fazer check-in /etc/login.defs) e definir explicitamente o umask para usuários que não são do sistema /etc/bash.bashrc(ou similares);

  • Ou você escreve seu próprio módulo PAM para fazer isso. Eu acho que isso seria bem-vindo por muitas pessoas, pois definir o umask é uma solicitação comum.

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


1
Já existe um módulo PAM chamado pam_umask . O problema é que ele só funciona no momento do login.
11262 Mikel

Ah, eu acho que você sabia pam_umask, mas talvez não pam_succeed_if. Com pam_succeed_if , você pode aplicar qualquer outro módulo apenas a um determinado usuário ou grupo. Mas ainda acho que o PAM não ajudará aqui.
12111 Mikel

1

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

Cheguei a esta pergunta procurando como definir o umask para a conta _www no MacOS. Embora isso seja difícil, como as respostas acima sugerem, achei que poderia resolvê-lo configurando o serviço apache como (nesse 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 na Library / LaunchDaemons /), mas com a ajuda de: http://krypted.com/mac-security/apache2-umasks / descobri que o apache possui seu próprio script de ambiente específico.

$ sudo vim /usr/sbin/envvars
    umask 002

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


Mas como você conseguiu escrever "umask 002" nesse arquivo?!?!? Eu recebo um erro de permissão negada, mesmo que root / sudo e, de acordo com a apple, mesmo as raízes não possam escrever / alterar nada no diretório / usr / sbin support.apple.com/pt-br/HT204899
Schurik
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.