Как мне сказать 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

Ответы:


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
}


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 ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.