sudo에게 0022의 umask로 파일을 쓰도록하려면 어떻게해야합니까?


11

최근에 Snow Leopard로 업그레이드했습니다. MacPorts가 작성한 일부 파일이 잘못된 권한으로 설치되어 있음을 알았습니다. 0077의 umask로 작성되었습니다. 문제의 범위를 좁혔습니다.

  1. port명령을 통해 호출됩니다 sudo.
  2. .bashrc파일은 0077의 umask를 지정합니다.
  3. 이전 버전의 OS X (10.5 이하)에서 sudo는 루트 사용자 의 umask (0022)를 사용했습니다. 그러나, 지금은 사용 0077의 umask를합니다.

어쨌든 sudo예전 행동 을 사용해야할까요? 내가 사용하기 때문에 지금, 그것은 일종의 성가신의의 sudo와 같은 간단한 명령 실행 port installed, port outdated

(문제는이 MacPorts 티켓에 자세히 설명되어 있습니다 .)

편집하다

umasksudo 옵션을 발견하고 /etc/sudoers다음 줄을 추가했습니다.

Defaults umask=0022

그러나 사용되는 실제 umask 가이 기본 마스크와 사용자 마스크 sudo결합 이므로 원하는대로 작동하지 않았습니다 . 의 행동을 무시하기 위해 sudo의의 umask를 직접 기본값을 사용 (예 아니라 노동 조합 은 사용자와 기본 sudo는 마스크의), 하나는 다음을 추가 할 수 있습니다 :

Defaults umask_override

답변:


7

Mac OS X 10.7 (Lion)에는 마침내 umask_override를 지원하는 sudo 버전이 있습니다. 기록적으로 이것은 나를 위해 작동합니다.

Defaults umask_override
Defaults umask=0022

1
명령별로이 작업을 수행 할 수 있습니까? 0022를 정상적으로 umask하고 싶지만 단일 상황에서 umask 0006을 호출하지만 위의 내용은 무시합니다.
Michael

6

.bashrc구성 스크립트에 다음을 추가했습니다 .

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

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는 실제로 (재) 소싱하지 않지만 .bashrcsudo를 호출 한 사용자의 현재 설정을 상속합니다.
mipadi 2009

그런 다음 다른 답변에 나열된 기능 해결 방법을 사용해야합니다.
Darren Hall

2

레코드의 경우 : 현재 버전의 sudo는 새로운 옵션 'umask_override'로 umask가 병합되는 것을 방지하므로 umask도 낮출 수 있습니다. 안타깝게도 Mac OS X 10.6.6은이 버전의 sudo를 사용하지 않는 것 같습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.