Как мне сказать sudo писать файлы с umask 0022?

11

Я недавно перешел на Snow Leopard. Я заметил, что некоторые файлы, написанные MacPorts, установлены с неправильным разрешением - они написаны с использованием маски umask 0077. Я думаю, что я сузил проблему:

  1. Команда portвызывается через sudo.
  2. В моем .bashrcфайле указан umask 0077.
  3. В более старых версиях OS X (10.5 и ниже) sudo использовал umask пользователя root (0022); однако теперь он использует мой umask 0077.

Есть ли способ sudoиспользовать старое поведение? Сейчас это немного раздражает, потому что мне приходится использовать sudoпростые команды, такие как port installed, port outdatedи т. Д.

(Проблема описана более подробно в этом билете MacPorts .)

редактировать

Я обнаружил umaskопцию для sudo и /etc/sudoersдобавил следующую строку:

Defaults umask=0022

Однако это не сработало должным образом, потому что настоящая используемая маска sudo- это объединение пользовательской маски с этой маской по умолчанию. Чтобы переопределить поведение sudoumask и напрямую использовать значение по умолчанию (т. Е. Не объединение пользователя и маску sudo по умолчанию), можно добавить следующее:

Defaults umask_override
mipadi
источник

Ответы:

7

В Mac OS X 10.7 (Lion) наконец-то появилась версия sudo, которая поддерживает umask_override. Для справки, это работает для меня:

Defaults umask_override
Defaults umask=0022
Алек Томас
источник
1
Можете ли вы сделать эту работу для каждой команды? Я хотел бы, чтобы umask 0022 нормально, но затем вызвать umask 0006 в одном случае, но вышеупомянутое игнорирует это.
Майкл
6

В итоге я добавил следующее в свой .bashrcконфигурационный скрипт:

# Mimic old behavior of `sudo` on OS X Snow Leopard
sudo() {
    old=$(umask)
    umask 0022
    command sudo "$@"
    umask $old
}
mipadi
источник
3

как насчет:

sudo22() {
   local UMASK=`umask`;
   umask 22;
   sudo "$@";
   umask $UMASK
}
Акира
источник
2

С вашим .bashrc

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi
Даррен Холл
источник
2
Отличная идея! К сожалению, небольшое исследование показывает, что Snow Leopard на sudoсамом деле не (повторно) .bashrcполучает исходный код , а наследует текущие настройки от пользователя, который вызвал sudo.
Mipadi
Вам придется использовать обходной путь функции, как указано в другом ответе.
Даррен Холл
2

Для справки: текущая версия sudo как новая опция 'umask_override', которая должна препятствовать слиянию umask, так что вы также должны иметь возможность уменьшить umask. К сожалению, Mac OS X 10.6.6 не поддерживает эту версию sudo ...

Габриель
источник