Como eu digo ao sudo para gravar arquivos com uma umask de 0022?

11

Recentemente, atualizei para o Snow Leopard. Notei que alguns arquivos escritos por MacPorts são instalados com a permissão errada - eles são escritos com uma umask de 0077. Acho que reduzi o problema:

  1. O portcomando é chamado via sudo.
  2. Meu .bashrcarquivo especifica uma umask de 0077.
  3. Nas versões mais antigas do OS X (10.5 e abaixo), o sudo usava o umask do usuário raiz (que era 0022); no entanto, agora ele usa minha umask de 0077.

Existe alguma maneira de sudousar o comportamento antigo? Agora, é uma espécie de chato, porque eu tenho que usar sudopara executar comandos simples, como port installed, port outdated, etc.

(O problema é descrito em mais detalhes neste tíquete do MacPorts .)

Editar

Eu descobri a umaskopção para sudo e /etc/sudoersadicionei a seguinte linha:

Defaults umask=0022

No entanto, isso não funcionou como desejado, porque o umask real usado por sudoé a união da máscara do usuário com essa máscara padrão. Para substituir o comportamento de sudoumask e usar o padrão diretamente (ou seja, não a união do usuário e da máscara sudo padrão), pode-se adicionar o seguinte:

Defaults umask_override
mipadi
fonte

Respostas:

7

O Mac OS X 10.7 (Lion) finalmente possui uma versão do sudo que suporta umask_override. Para o registro, isso funciona para mim:

Defaults umask_override
Defaults umask=0022
Alec Thomas
fonte
1
Você pode fazer isso funcionar por comando? Gostaria de umask 0022 normalmente, mas invoque umask 0006 em uma única circunstância, mas o que foi dito acima ignora isso.
Michael
6

Acabei adicionando o seguinte ao meu .bashrcscript de configuração:

# Mimic old behavior of `sudo` on OS X Snow Leopard
sudo() {
    old=$(umask)
    umask 0022
    command sudo "$@"
    umask $old
}
mipadi
fonte
3

e quanto a:

sudo22() {
   local UMASK=`umask`;
   umask 22;
   sudo "$@";
   umask $UMASK
}
akira
fonte
2

Com o seu .bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi
Darren Hall
fonte
2
Boa ideia! Infelizmente, uma pequena investigação mostra que o Snow Leopard na sudoverdade não é (re) fonte .bashrc, mas herda a configuração atual do usuário que chamou o sudo.
Mipadi 7/12/2009
Você precisará usar a solução alternativa conforme listada na outra resposta.
6119 Darren Hall
2

Para o registro: a versão atual do sudo como uma nova opção 'umask_override', que deve impedir que as umask sejam mescladas, para que você também possa abaixá-las. Infelizmente, o Mac OS X 10.6.6 não parece exibir esta versão do sudo ...

Gabriel
fonte