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.