Comment dire à sudo d'écrire des fichiers avec un umask de 0022?

11

J'ai récemment mis à niveau vers Snow Leopard. J'ai remarqué que certains fichiers écrits par MacPorts sont installés avec la mauvaise autorisation - ils sont écrits avec un umask de 0077. Je pense que j'ai résolu le problème:

  1. La portcommande est invoquée via sudo.
  2. Mon .bashrcfichier spécifie un umask de 0077.
  3. Sur les anciennes versions d'OS X (10.5 et inférieures), sudo utilisait le umask de l' utilisateur root (qui était 0022); cependant, maintenant il utilise mon umask de 0077.

Existe-t-il de toute façon d' sudoutiliser l'ancien comportement? En ce moment, il est un peu ennuyeux parce que je dois utiliser sudopour exécuter des commandes simples comme port installed, port outdated, etc.

(Le problème est décrit plus en détail dans ce ticket MacPorts .)

Éditer

J'ai découvert l' umaskoption pour sudo et /etc/sudoersj'ai ajouté la ligne suivante:

Defaults umask=0022

Cependant, cela n'a pas fonctionné comme souhaité, car le vrai umask utilisé par sudoest l' union du masque utilisateur avec ce masque par défaut. Afin de remplacer le comportement de sudoumask et d'utiliser directement la valeur par défaut (c'est-à-dire, pas l' union de l'utilisateur et le masque sudo par défaut), on peut ajouter ce qui suit:

Defaults umask_override
mipadi
la source

Réponses:

7

Mac OS X 10.7 (Lion) a enfin une version de sudo qui prend en charge umask_override. Pour mémoire, cela fonctionne pour moi:

Defaults umask_override
Defaults umask=0022
Alec Thomas
la source
1
Pouvez-vous faire ce travail sur une base par commande? Je voudrais umask 0022 normalement, mais invoquer ensuite umask 0006 dans une seule circonstance, mais ce qui précède l'ignore.
Michael
6

J'ai fini par ajouter ce qui suit à mon .bashrcscript de configuration:

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

que diriez-vous:

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

Avec votre .bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi
Darren Hall
la source
2
Bonne idée! Malheureusement, une petite enquête montre que Snow Leopard sudone fait pas (re) source .bashrc, mais hérite du paramètre actuel de l'utilisateur qui a appelé sudo.
mipadi
Vous devrez alors utiliser la solution de contournement de fonction indiquée dans l'autre réponse.
Darren Hall
2

Pour mémoire: la version actuelle de sudo en tant que nouvelle option 'umask_override', qui devrait empêcher la fusion des umask, vous devriez donc être en mesure de baisser également le umask. Malheureusement, Mac OS X 10.6.6 ne semble pas arborer cette version de sudo ...

Gabriel
la source