Jak mam powiedzieć sudo, aby zapisywało pliki z umaską 0022?

11

Niedawno uaktualniłem do Snow Leopard. Zauważyłem, że niektóre pliki napisane przez MacPorts są instalowane z niewłaściwym pozwoleniem - są zapisywane z umaską 0077. Wydaje mi się, że zawęziłem problem:

  1. portKomenda jest wywoływana poprzez sudo.
  2. Mój .bashrcplik określa umask 0077.
  3. W starszych wersjach OS X (10.5 i niższych) sudo używał umask użytkownika root (który był 0022); jednak teraz używa mojego umask 0077.

Czy w ogóle można sudoskorzystać ze starego zachowania? Teraz, to trochę denerwujące bo muszę użyć sudodo uruchomienia prostych poleceń, takich jak port installed, port outdateditp

(Problem opisano bardziej szczegółowo w tym bilecie MacPorts .)

Edytować

Odkryłem umaskopcję sudo i /etc/sudoersdodałem następujący wiersz:

Defaults umask=0022

Jednak nie działało to zgodnie z oczekiwaniami, ponieważ prawdziwym umask jest używane sudopołączenie unii maski użytkownika z tą domyślną maską. Aby zastąpić zachowanie sudoumask i użyć domyślnej wartości domyślnej (tj. Nie zjednoczenia użytkownika i domyślnej maski sudo), można dodać:

Defaults umask_override
mipadi
źródło

Odpowiedzi:

7

Mac OS X 10.7 (Lion) ma wreszcie wersję sudo, która obsługuje umask_override. Dla przypomnienia, to działa dla mnie:

Defaults umask_override
Defaults umask=0022
Alec Thomas
źródło
1
Czy możesz sprawić, by działało to na zasadzie polecenia? Chciałbym umaskować 0022 normalnie, ale następnie przywołać umask 0006 w jednym przypadku, ale powyższe to ignoruje.
Michael
6

Skończyło się na dodaniu do mojego .bashrcskryptu konfiguracji:

# Mimic old behavior of `sudo` on OS X Snow Leopard
sudo() {
    old=$(umask)
    umask 0022
    command sudo "$@"
    umask $old
}
mipadi
źródło
3

Co powiesz na:

sudo22() {
   local UMASK=`umask`;
   umask 22;
   sudo "$@";
   umask $UMASK
}
akira
źródło
2

Z Twoim .bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi
Darren Hall
źródło
2
Dobry pomysł! Niestety, małe dochodzenie pokazuje, że Snow Leopard sudofaktycznie nie (re) źródła .bashrc, ale dziedziczy bieżące ustawienia od użytkownika, który wywołał sudo.
mipadi
Będziesz wtedy musiał skorzystać z obejścia funkcji wymienionego w drugiej odpowiedzi.
Darren Hall,
2

Dla przypomnienia: aktualna wersja sudo jako nowa opcja „umask_override”, która powinna uniemożliwić scalenie umask, więc powinieneś być w stanie obniżyć umask. Niestety, Mac OS X 10.6.6 nie wydaje się mieć tej wersji sudo ...

Gabriel
źródło