Acabei de adicionar o seguinte ao meu script de configuração .bashrc
:
# Mimic old behavior of 'sudo' on OS X Snow Leopard
sudo() {
old=$(umask)
umask 0022
command sudo "$@"
umask $old
}
Eu recentemente atualizei para o Snow Leopard. Tenho notado que alguns arquivos escritos por MacPorts são instalados com a permissão errada - eles são escritos com uma máscara de 0077. Acho que reduzi o problema:
port
é chamado por sudo
. .bashrc
especifica uma máscara de 0077. Existe alguma maneira de ter sudo
usando o comportamento antigo? Agora, é meio chato porque eu tenho que usar sudo
para executar comandos simples como port installed
, port outdated
, etc.
(O problema é descrito com mais detalhes neste tíquete MacPorts .)
Eu descobri a opção umask
para o sudo e, em /etc/sudoers
, adicionei a seguinte linha:
Defaults umask=0022
No entanto, isso não funcionou como desejado, porque o real umask usado por sudo
é a union da máscara do usuário com essa máscara padrão. Para sobrescrever o comportamento do umask de sudo
e usar o padrão diretamente (isto é, não a união do usuário e a máscara sudo padrão), pode-se adicionar o seguinte:
Defaults umask_override
O Mac OS X 10.7 (Lion) finalmente tem uma versão do sudo que suporta umask_override. Para o registro, isso funciona para mim:
Defaults umask_override
Defaults umask=0022
que tal:
sudo22() {
local UMASK='umask';
umask 22;
sudo "$@";
umask $UMASK
}
Com o seu .bashrc
if [[ $EUID -eq 0 ]]; then
umask 0022
else
umask 0077
fi
Para o registro: a versão atual do sudo como uma nova opção 'umask_override', que deve impedir que o umask seja mesclado, então você deve ser capaz de reduzir o umask também. Infelizmente, o Mac OS X 10.6.6 não parece ostentar esta versão do sudo ...