¿Cómo le digo a sudo que escriba archivos con una máscara de 0022?

11

Recientemente actualicé a Snow Leopard. Me di cuenta de que algunos archivos escritos por MacPorts se instalan con un permiso incorrecto; están escritos con una máscara de 0077. Creo que he reducido el problema:

  1. El portcomando se invoca a través de sudo.
  2. Mi .bashrcarchivo especifica una umask de 0077.
  3. En versiones anteriores de OS X (10.5 y versiones inferiores), sudo usaba la umask del usuario root (que era 0022); sin embargo, ahora usa mi umask de 0077.

¿Hay alguna forma de sudousar el viejo comportamiento? En este momento, es un poco molesto porque tengo que utilizar sudopara ejecutar comandos simples como port installed, port outdated, etc.

(El problema se describe con más detalle en este ticket de MacPorts ).

Editar

Descubrí la umaskopción para sudo, y /etc/sudoersagregué la siguiente línea:

Defaults umask=0022

Sin embargo, esto no funcionó como se deseaba, porque la máscara de usuario real utilizada por sudoes la unión de la máscara de usuario con esta máscara predeterminada. Para anular el comportamiento de sudoumask y usar el valor predeterminado directamente (es decir, no la unión del usuario y la máscara de sudo predeterminada), se puede agregar lo siguiente:

Defaults umask_override
mipadi
fuente

Respuestas:

7

Mac OS X 10.7 (Lion) finalmente tiene una versión de sudo que admite umask_override. Para el registro, esto funciona para mí:

Defaults umask_override
Defaults umask=0022
Alec Thomas
fuente
1
¿Puedes hacer que esto funcione por comando? Me gustaría umask 0022 normalmente, pero luego invocar umask 0006 en una sola circunstancia, pero lo anterior ignora eso.
Michael
6

Terminé agregando lo siguiente a mi .bashrcscript de configuración:

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

qué tal si:

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

Con tu .bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi
Darren Hall
fuente
2
¡Buena idea! Desafortunadamente, una pequeña investigación muestra que Snow Leopard's en sudorealidad no (re) fuente .bashrc, pero hereda la configuración actual del usuario que invocó sudo.
mipadi
Tendrá que usar la solución alternativa de la función como se enumera en la otra respuesta.
Darren Hall
2

Para el registro: la versión actual de sudo como una nueva opción 'umask_override', que debería evitar que las umask se fusionen, por lo que también debería poder bajar la umask. Lamentablemente, Mac OS X 10.6.6 no parece tener esta versión de sudo ...

Gabriel
fuente