/ usr / local /에 대한 내 권한이 맞습니까?


88

포트 요구 사항에 대해 HomeBrew 를 사용하고 있습니다 (MacPorts보다“깨끗합니다”).

나는 sudoing 없이 설치할 수 있지만 (위대한 것) man 연결 단계는 그것을 필요로하는 것 같습니다 ( /usr/local/share/man/man3소유 root). 가이드 내가 찾은 재귀 I을 제시 수행하여
chown /usr/local

sudo chown -R `whoami` /usr/local

안전한가요? 아니면 Bad Idea ™입니까?

또한 : 내 권한이 맞습니까?

$ pwd
/usr/local/share/man
$ ls -lah
total 32
drwxrwxr-x    8 root  staff   272B  4 Set 11:02 .
drwxrwxr-x    9 root  staff   306B 10 Set 11:27 ..
drwxr-xr-x    3 root  wheel   102B  4 Ago  2009 de
drwxrwxr-x  163 root  staff   5,4K 10 Set 11:27 man1
drwxr-xr-x   11 root  wheel   374B 10 Set 11:27 man3
drwxr-xr-x    7 ago   staff   238B 10 Set 11:39 man5
drwxr-xr-x   11 ago   staff   374B 10 Set 11:39 man7
-rw-r--r--    1 root  staff    13K  4 Set 11:02 whatis

5
이것이 Homebrew가 사용되는 방식입니다. 어떤 사람들은 의견이 맞지 않을 수도 있지만 수석 개발자는 그런 식으로 일한다고 말합니다.
Mike McQuaid

1
당신의 chown에 대한 약간 더 나은 대안 : sudo chown -R :admin /usr/local. 이 방법으로 컴퓨터의 모든 관리자에게 동일하게 작동합니다. sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+그룹이 사용자와 동일한 쓰기 액세스 권한을 갖도록 실행해야 할 수도 있습니다 .
슬립 D. 톰슨

12
"홈브류를 사용하고, macports보다 깨끗하게 느껴집니다. 아,이 정의 된 권한 엉망을보세요. Stack Overflow를 확인하겠습니다. 아, 여기 Unix 모범 사례와 OS 업데이트 시도에 대한 빠른 해킹이 있습니다. 완벽하게! " 몇 달 후 : "이 맬웨어는 어떻게 설치 되었습니까?"
hmijail

이 접근 방식의 문제점은 Homebrew를 설치하는 사용자 계정 만 사용할 수 있다는 것입니다. 직장 프로젝트를 집 프로젝트와 분리하는 데 사용하는 여러 계정이있는 Mac이 있습니다 (예 :). 잘못된 계정으로 로그인하면 BREW 설치를 사용할 수 없습니다. 루트를 사용하는 위험을 피하기 위해이 경로를 사용했지만 이것이 최선의 방법이라고 확신하지는 않습니다.
Auspice

@MikeMcQuaid 나는 / usr / 지방에 기본 권한을 복원했다, 흥미 브루 마침내이에 오류를 인정하고 새로운 버전의 두 주 전에 출시했습니다 것을 발견
oemb1905

답변:


37

일반적으로 사용 권한을 최대한 엄격하게 유지하는 것이 좋습니다. 유지 /usr/local소유 root로 실행 프로세스 만 수단 root/ sudo(또는 애플 인증 대화 상자를 통해 관리 사용자 요청)이이 영역에 쓸 수 있습니다. 따라서 프로세스 다운로드는 파일을 손상시키기 전에 암호를 요구해야합니다.

그러나 당신이 말했듯이, 그것은 새로운 프로그램을 추가하는 것을 어렵게 만듭니다.

나는 sudo당신이 그것들을 실행하는 것보다 덜 자주 설치하기 때문에 running으로 괜찮지 만 빌드 프로세스가 아무것도 변경하지 않는다는 것을 믿어야합니다.

sudo를 피하려면 Homebrew를 설치 ~/usr/local하고 경로, manpath 등을 변경하여 그 아래에 디렉토리를 포함시킵니다.

더 나은 방법은 다른 사용자를 작성 homebrew하고 해당 사용자가 소유 한 디렉토리를 작성하는 것입니다. 그런 다음를 사용하여 설치하십시오 sudo -U homebrew. 다른 사용자는 다른 파일을 실행하지 않고 root 다른 프로그램이 homebrew에 영향을 줄 수 없기 때문에 다른 파일을 덮어 쓸 수 없다는 이점이 있습니다. (저는 "다중 사용자 환경"에있는 경우 Homebrew FAQ 에서이 새로운 사용자를 제안합니다. macOS를 포함한 모든 Unix 시스템은 다중 사용자 환경이라고합니다.)

그러나 Homebrew Wiki는 레시피가 모든 사례를 찾아서 /usr/local선택한 디렉토리로 바꾸지는 않는다고 말합니다 /usr/local.


1
권한을 엄격하게 유지 $PATH하고 $MANPATH사용자 디렉토리를 변경 및 포함 하기 위해 +1 설치된 프로그램에 시스템 전체 설치가 필요하지 않은 경우 훨씬 더 나은 대안입니다.
zneak

3
"가능한 한 엄격한 권한 유지"에 대한 +1 및 수락 된 답변 이렇게하면 brew doctor(아래 제안) 난 단지 공유 남자 디렉토리 ... 나를 위해 충분히 안전을 chown하지에있는 나에게 말했다.
Agos

1
최소한 관리자 권한으로 항상 실행하기에 충분하지 않은 보안을 원하는 사람들에게는 타협 솔루션은 그룹 소유권과 권한을 변경하여 관리자 만 / usr / local에 쓸 수 있도록하는 것입니다. kenorb의 답변을 참조하십시오.
hmijail

2
@ 마크 나는 그것이 흥미 브루 마침내이와 새 버전에서 오류를, / usr / 지방에 대한 기본 사용 권한을 복원 한 두 주 전에 발표 인정한 것을 발견
oemb1905

48

나는 Homebrew도 사용하고 있으며 완전히 안전하다는 것을 확인할 수 있습니다. 공식 Homebrew FAQ 에서 설치 페이지 인용 :

호의를 베풀고 고르세요 /usr/local


  1. /usr/local/bin이미 더 쉽습니다PATH .


  2. 종속성이 / usr 또는 / usr / local에 없으면 톤 빌드 스크립트 가 더 쉬워집니다 . 우리는 Homebrew 공식에 대해이 문제를 해결하지만 (항상 테스트하지는 않지만) 많은 RubyGems 및 Python 설정 스크립트가 제어 할 수없는 것입니다.

  3. Apple이 POSIX를 준수하고 우리를 위해이 디렉토리를 떠난 것이 안전
    합니다. 즉 /usr/local, 기본적으로 디렉토리가 없으므로 기존 도구를 엉망으로 만들 걱정이 없습니다.

양조장에 의존하는 보석을 설치하려면 번거 로움을 저장하고 설치하십시오 /usr/local!

gem이 비표준 디렉토리에서 헤더와 dylib를 찾도록 지시하는 것은 쉬운 일이 아닙니다. 를 선택 /usr/local하면 모든 것이“그냥 작동합니다!”

난 그냥 추가 할 것입니다 루트는 아주 나쁜 생각으로 일을 일을 그렇게 chown보내고 /usr/local뿐만 아니라하는 것은 (그것이 OSX의 시스템 디렉토리 아니다) 나에게 합리적인 것처럼 보이지만 제정신 .

귀하의 권한이 올바르지 않습니다 (아직). 나열된 명령을 실행하면 괜찮을 것입니다.

다른 문제가 있다면 기억해 두십시오 brew doctor.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
bmike

7
대화가 사라졌습니다. 동정입니다. 따라서 역사가 반복 될 위험이 있으므로 여기에 의견을 남길 것입니다. 이것이 완료되었다고해서 이것이 안전하다는 의미는 아닙니다.
hmijail

4
차트의 요점은 이것이 Homebrew가 이것이 왜 틀린지에 대한 이유가 있다고 제안하는 것이지만
user151019

1
brew doctor단순히 굉장합니다.
Utku

5
@Carmine의 Paolino I가 흥미 브루 마침내이와 새 버전에서 오류가 한 두 주 전에 발표 인정한 것을 발견은, / usr / 지방에 기본 권한을 복원 한
oemb1905

9

Homebrew를 사용하는 경우 특정 그룹 ( admin또는 staff)에 쓰기 권한을 부여하여 해당 그룹에 속한 사용자간에 파일을 공유 할 수 있습니다.

예를 들면 다음과 같습니다.

sudo chgrp -R admin /usr/local /Library/Caches/Homebrew
sudo chmod -R g+w /usr/local /Library/Caches/Homebrew

그런 다음 brew명령에 액세스해야하는 사용자 를 해당 그룹에 지정하십시오 (을 통해 그룹을 확인하십시오 id -Gn).

그런 다음로 작업 brew할 때는로 실행하지 마십시오 sudo.

여전히 일부 권한 문제가 brew doctor있는 경우 문제 해결을 위해 실행 하십시오.


실제로 완료되지 않더라도 실제로 더 나은 행동을하는 솔루션을 제공하는 +1 예를 들어 : BSD 레벨에서 관리자 그룹에 사용자를 추가 하시겠습니까? OS X의 관리 사용자 개념이 엉망이되지 않습니까?
hmijail

기록을 위해이 지침을 따랐지만 CLI의 그룹에 사람을 추가하는 대신 기존 OS X GUI로 만든 관리자를 사용했습니다. 그것은 작동합니다 : 양조 명령을 실행하려면 먼저해야 su myAdminUser하며 모든 것이 의도 한대로 작동합니다. 그러나 물론이 솔루션은 어쨌든 이미 관리자 사용자를 이미 실행중인 사람들에게는 보안을 제공하지 않습니다.
hmijail

이것은 아마도 가장 좋은 방법 일 것입니다. @kenorb에 동의합니다
pixel 67

7

그만한 가치가 있기 때문에 /usr/localOS X에서는 "시스템"폴더로 간주되지 않으며 새로운 Snow Leopard 설치에서는 해당 폴더가 비어 있습니다.

해당 폴더의 루트 소유 항목은 sudo make install다른 소프트웨어 의 결과 .pkg이거나을 (를) 덤프하려는 파일을 두 번 클릭 한 후 비밀번호를 제공 한 결과입니다 /usr/local.

/usr/local1 년 넘게 2 대의 기계를 소유 하고 있습니다.

한 가지 문제는 Homebrew를 사용하지 않고 MySQL을 설치하고 파일을 숨기면 더 이상 데이터베이스를 볼 수 없을 것입니다 (따라서 MySQL이 실행중인 모든 사용자에게 다시 가져 와야합니다 .)


5
이 시스템에 영향 않도록 GCC 및 기타 개발 도구가 자동으로 / usr / 지방에서 중요시
user151019

11
문제는 그것이 "시스템"폴더라는 것이 아닙니다. "시스템 전체"폴더입니다. 아무 것도 없어도 /usr/local/bin여전히 기본값 $PATH이며, 거기에 넣은 것은 다른 사용자도 사용할 있으며 신뢰할 수 있어야합니다 . 전체 /usr/local/디렉토리에 /usr/local/share/man현재 OP의 설정 과 동일한 권한이있는 경우 누구나 스크립트를 사용하여 바이너리를 변경하고 변경할 수 있습니다 rm -rf ~.
zneak

1
너무 위험하다 : 조만간 MySQL을 설치할 것이다.
Agos

2
@Agos : HomeBrew를 사용하여 MySQL을 항상 설치할 수 있습니다.이 경우 아무런 문제가 없습니다 :)
Carmine Paolino

1
@Agos 전혀 위험하지 않습니다. 주의 사항은 Homebrew 전에 MySQL을 설치 한 경우에만 적용됩니다. 나중에 수행하면 사용 권한에 문제 /usr/local가 없습니다. (그러나 어쨌든 Postgres를 사용할 것입니다. :))
Marnen Laibow-Koser

6

Homebrew 1.0.0에서와 같이 :

Homebrew는 더 이상 / usr / local의 소유권을 가질 필요가 없습니다. 원하는 경우 sudo chown root : wheel / usr / local을 사용하여 / usr / local을 기본 소유권으로 되돌릴 수 있습니다.


1
현재를 사용하여 Brew를 업데이트 brew update하고 있는데 여전히 소유권이 필요합니다 /usr/local. 나중에 권한을 복원 해 보겠습니다.
Joshua Pinter

이것은 정말 좋은 정보입니다! Homebrew (<1.0)에서 지정한대로 perms를 설정했으며 업데이트 후 다시 설정하는 방법에 대한 지침을 제공했습니다.
mortona42

0

나는 사용자가 갖는 것이 확인 생각 쓰기 권한/usr/local결국, 즉 사용하지 않는 것을 의미 - sudo모든 빌드 스크립트를합니다. 나는 일반 사용자 소유 라는 아이디어가 마음에 들지 않습니다 /usr/local. root (또는 이와 유사한) own을 선호 /usr/local하지만 사용자 (또는 최소한 권한있는 그룹)가 쓸 수 있도록 권한을 변경하십시오. 그것은 개념적으로 올바른 접근법처럼 보입니다.


7
여기서 문제는 /usr/local/bin대부분의 사용자에게 $ PATH 앞에있을 수 있다는 것입니다. 디렉토리를 세계 쓰기 가능으로 설정하면 많은 보안 허점이 생깁니다.
nohillside

@patrix 따라서 경로를 변경하십시오. :) 모호한 명령 경로로 인해 보안 허점이있는 스크립트가있는 경우 권한이 아닌 스크립트를 비난합니다. 스크립트에서 호출 된 명령은 일반적으로 정확히 이런 이유로 정규화되어야합니다. 어쨌든 더 나은 해결책은 없습니다. 관리자 계정에 안전하지 않은 umask를 제공하거나로 모든 빌드 스크립트를 실행 sudo하거나 일부 사용자에게에 대한 쓰기 권한을 부여하십시오 /usr/local. 더 나은 방법을 모른다면 세 번째를 가장 덜 위험하다고 생각합니다.
Marnen Laibow-Koser 2016 년

흠. 이것에 대해 좀 더 생각하면 Homebrew가 RVM이 기본적으로하는 일을하도록하는 것이 더 좋습니다. 모든 것을 설치하십시오 ~/brew. 그러나 문제는 꽤 독립적 인 Ruby와 달리 많은 * nix 유틸리티들이 서로를 찾을 것으로 예상한다는 것입니다 /usr/local.
Marnen Laibow-Koser

3
나는 내 /usr/local세계가 쓸 수 없다고 언급 하지 않았다. 오히려 homebrew쓰기 권한 이있는 신뢰할 수있는 그룹 (관리자가 아닌)이 있습니다 ( 0: group:homebrew allow add_file,delete,add_subdirectory,delete_child,file_inherit,directory_inherit완전히 록 과 같은 확장 된 권한 ). 이것은 내가 알아낼 수 있었던 최선의 타협 sudo입니다. 빌드 스크립트는 없지만 일부는 제어 할 수 /usr/local있습니다.
Marnen Laibow-Koser 2016 년

@ MarnenLaibow-Koser 나는이 방법의보다 깊이있는 설명 (쓰기 권한을 가진 사용자의 신뢰할 수있는 그룹을 만들어보고 싶어요 /usr/local). SO 및 기타 사이트에서 많은 트롤링을 수행하면서 논쟁이 다시 나타납니다 : Homebrew를 사용자의 홈 폴더로 이동 대 유지 /usr/local, 소유자 및 / 또는 그룹 변경 /usr/local여부 등 ... 어떤 것이 있는지 말하기가 어렵습니다. 보편적으로 수용 가능한 솔루션. 이것에 대한 블로그 게시물이나 기사가 있습니까?
Gabriel L.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.