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

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

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
}

3

e quanto a:

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

2

Com o seu .bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi

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 ...

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.