Come faccio a dire a sudo di scrivere file con un umask di 0022?


11

Di recente ho effettuato l'aggiornamento a Snow Leopard. Ho notato che alcuni file scritti da MacPorts sono installati con un'autorizzazione sbagliata - sono scritti con un umask di 0077. Penso di aver ristretto il problema:

  1. Il portcomando viene invocato tramite sudo.
  2. Il mio .bashrcfile specifica un umask di 0077.
  3. Nelle versioni precedenti di OS X (10.5 e precedenti), sudo utilizzava l'umask dell'utente root (che era 0022); tuttavia, ora usa la mia umask di 0077.

Esiste un modo per sudousare il vecchio comportamento? In questo momento, è una specie di fastidioso perché devo usare sudoper eseguire comandi semplici come port installed, port outdatedecc

(Il problema è descritto in modo più dettagliato in questo ticket MacPorts .)

modificare

Ho scoperto l' umaskopzione per sudo e in /etc/sudoersho aggiunto la seguente riga:

Defaults umask=0022

Tuttavia, ciò non ha funzionato come desiderato, poiché la vera umask utilizzata da sudoè l' unione della maschera utente con questa maschera predefinita. Per sovrascrivere il comportamento di sudoumask e usare direttamente il default (cioè non l' unione dell'utente e la maschera sudo predefinita), si può aggiungere quanto segue:

Defaults umask_override

Risposte:


7

Mac OS X 10.7 (Lion) ha finalmente una versione di sudo che supporta umask_override. Per la cronaca, questo funziona per me:

Defaults umask_override
Defaults umask=0022

1
Puoi farlo funzionare su una base per comando? Vorrei umask 0022 normalmente, ma poi invocare umask 0006 in una singola circostanza, ma quanto sopra lo ignora.
Michael,

6

Ho finito per aggiungere quanto segue al mio .bashrcscript di configurazione:

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

3

che ne dite di:

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

2

Con il tuo .bashrc

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

2
Buona idea! Sfortunatamente, una piccola indagine mostra che Snow Leopard's in sudorealtà non (ri) fonte .bashrc, ma eredita l'impostazione corrente dall'utente che ha invocato sudo.
mipadi,

Dovrai quindi utilizzare la funzione alternativa come elencato nell'altra risposta.
Darren Hall,

2

Per la cronaca: l'attuale versione di sudo come nuova opzione 'umask_override', che dovrebbe impedire l'unione delle umask, quindi dovresti essere in grado di abbassare anche umask. Purtroppo, Mac OS X 10.6.6 non sembra sfoggiare questa versione di sudo ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.