10

Я недавно обновился до снежного барса. Я заметил, что некоторые файлы, написанные 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

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

Defaults umask_override

5 ответов5

6

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

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

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

Defaults umask_override
Defaults umask=0022
3

как насчет:

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

С вашим .bashrc

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .