Wie kann ich sudo anweisen, Dateien mit einer Umask von 0022 zu schreiben?

11

Ich habe kürzlich ein Upgrade auf Snow Leopard durchgeführt. Ich habe festgestellt, dass einige von MacPorts geschriebene Dateien mit der falschen Berechtigung installiert wurden - sie wurden mit einer Umask von 0077 geschrieben. Ich glaube, ich habe das Problem eingegrenzt:

  1. Der portBefehl wird über aufgerufen sudo.
  2. Meine .bashrcDatei gibt eine Umask von 0077 an.
  3. In älteren Versionen von OS X (10.5 und niedriger) verwendete sudo die Umask des Root- Benutzers (0022). Jetzt wird jedoch meine Umask von 0077 verwendet.

Gibt es sowieso sudodas alte Verhalten zu nutzen? Gerade jetzt, es ist ein bisschen ärgerlich , weil ich verwende, um sudoeinfache Befehle wie auszuführen port installed, port outdatedusw.

(Das Problem wird in diesem MacPorts-Ticket ausführlicher beschrieben .)

Bearbeiten

Ich habe die umaskOption für sudo entdeckt und /etc/sudoersdie folgende Zeile hinzugefügt:

Defaults umask=0022

Dies funktionierte jedoch nicht wie gewünscht, da die von verwendete echte Umask sudodie Vereinigung der Benutzermaske mit dieser Standardmaske ist. Um das Verhalten von sudo's umask zu überschreiben und den Standard direkt zu verwenden (dh nicht die Vereinigung des Benutzers und der Standard-Sudo-Maske), kann Folgendes hinzugefügt werden:

Defaults umask_override
Mipadi
quelle

Antworten:

7

Mac OS X 10.7 (Lion) hat endlich eine Version von sudo, die umask_override unterstützt. Für die Aufzeichnung funktioniert dies für mich:

Defaults umask_override
Defaults umask=0022
Alec Thomas
quelle
1
Können Sie diese Funktion auf Befehlsbasis ausführen? Ich möchte 0022 normalerweise umaskieren, aber dann umask 0006 unter einem einzigen Umstand aufrufen, aber das Obige ignoriert das.
Michael
6

Am Ende habe ich meinem .bashrcKonfigurationsskript Folgendes hinzugefügt :

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

wie wäre es mit:

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

Mit Ihrem .bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi
Darren Hall
quelle
2
Gute Idee! Leider zeigt eine kleine Untersuchung, dass Snow Leopard's sudonicht wirklich (neu) bezieht .bashrc, sondern die aktuelle Einstellung von dem Benutzer erbt, der sudo aufgerufen hat.
Mipadi
Sie müssen dann die in der anderen Antwort aufgeführte Funktionsumgehung verwenden.
Darren Hall
2

Für den Datensatz: Die aktuelle Version von sudo als neue Option 'umask_override', die verhindern soll, dass die umask zusammengeführt werden, sodass Sie auch die umask senken können sollten. Leider scheint Mac OS X 10.6.6 diese Version von sudo nicht zu bieten ...

Gabriel
quelle