/ usr / local 피해를 반전


-2

http://howtonode.org/introduction-to-npm- 이 자습서를 따르고 / usr / local을 $ USER로 설정했는데 지금은 큰 실수라는 것을 알았습니다.

누구 든지이 변경 사항을 되돌릴 수는 있지만 sudo를 요구하지 않고 Homebrew, Node, Ruby 등을 계속 설치할 수 있습니까?


1
왜 그런 실수 였나요?
Jason Salaz

1
수행 한 실제 단계와 발생한 문제를 설명하십시오.
Gerry

@Gerry : 참조 된 페이지에 running이 언급되어 sudo chown -R $USER /usr/local있습니다. 그것은 같은 페이지에 대한 주석에서 비판됩니다. 이를 취소하는 방법 /usr/local은 이전에 사용한 방법에 따라 다릅니다 .
Harald Hanche-Olsen

답변:


10

질문의 첫 번째 부분은 변경 사항을 되돌릴 수 없으며 Z명령이 없거나 실행 취소 명령이 없지만 이전의 내용을 잘 추측하도록 권한을 설정할 수 있습니다. 아래 첫 번째 글 머리 기호에 대한 자세한 내용.

소프트웨어를 설치하려면 디렉토리 (및 해당 서브 디렉토리)에 쓰기 권한/usr/local 이 있어야합니다 . 이를 달성하는 몇 가지 방법이 있습니다.

  1. 소유자를 자신에게 설정하십시오 . 그게 당신이 한 일입니다 sudo chown -R $USER /usr/local. 내 리눅스 sysadmin 배경은 이것이 표준 방법이 아니라고 말해줍니다. 왜냐하면 /usr/local홈 디렉토리 외부에 있고 당신이 소유해서는 안되기 때문 입니다. 그러나 나는 당신이 돌이킬 수없는 것을 손상 시켰다고 말하지 않을 것입니다.
  2. 를 사용 sudo 하지만 사용 하지 않아도됩니다.

    (내 관점에서 가장 좋은 해결책 . 왜? sudo는 자신을 보호합니다. 입력해야 할 경우 두 번 생각합니다 sudo( http://howtonode.org 의 자습서를 따르지 않는 한 :-)).

  3. ACL을 설정하십시오 . 원래 권한을 추가 된 권한과 분리하는 좋은 방법입니다. ACL에 대한 자세한 내용은 http://en.wikipedia.org/wiki/Access_control_list 를 참조하십시오 .
  4. 그룹을 구성합니다 . 소유 한 그룹에 자신을 추가 /usr/local 하고 권한을 g+rwx/로 변경하십시오 g+rw. 번거로운. 하지마

1. 변경 사항을 되돌리려 고합니다. 2. 원하지 않습니다. 4. 권장하지 않으므로 3을 설명하겠습니다. :

  • 먼저 변경 사항을 "되 돌리십시오". /usr/local아마 user root그룹이 소유했을 것입니다 wheel. 다음과 같이 설정할 수 있습니다.

    $ cd /usr/local
    $ sudo chown -R root:wheel .
  • 모든 권한을 갖도록 ACL을 설정하십시오.

    $ cd /usr/local
    $ sudo chmod -R +a "$USER allow delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,list,search,add_file,add_subdirectory,delete_child,file_inherit,directory_inherit" .

    (자세한 내용 man chmod은 섹션 ACL MANIPULATION OPTIONS을 참조하십시오.)

  • 모든 파일에 +추가 된 ls -eACL이 표시됩니다.

    $ cd /usr/local
    $ ls -la .
    total 0
    drwxr-xr-x+ 11 root  wheel   374 Oct 10 21:57 .
    drwxr-xr-x+ 12 root  wheel   442 Sep 22 13:44 ..
    drwxr-xr-x+  3 root  wheel  3774 Oct 10 21:57 bin
    -rw-r--r--+  1 jaume wheel    0  Oct 25 14:53 myACLtestfile
    drwxr-xr-x+  3 root  wheel   136 Jul 26 18:55 include
    drwxr-xr-x+  4 root  wheel   442 Jul 26 18:55 lib
    (...)
    $ ls -led bin
    drwxr-xr-x+ 3 root  wheel  3774 Oct 10 21:57 bin
     0: user:jaume allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit
    $ ls -le myACLtestfile 
    -rw-r--r--+ 1 jaume  wheel  0 Oct 25 14:53 myACLtestfile
     0: user:jaume inherited allow read,write,execute,delete,append,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown

(I 위의 명령을 테스트했지만, 나는 오타가있을 수 있습니다. 마찬가지로 가장 좋은 방법은 당신이 테스트 디렉토리에 위의 명령을 실행하는 것이 좋습니다 . 당신은 할 수있는 mkdir ~/tmpacl그런. cd ~/tmpacl그리고 sudo rsync -av /usr/local/ .의 내용을 복사 할 /usr/local대상을 ~/tmpacl건너 다음. cd /usr/local모든에 에 명령을 적용하는 위의 섹션 ~/tmpacl. 작업이 완료되면, rm -rf ~/tmpacl.)

지금 당신은 소프트웨어를 설치 (또는 그 문제에 대해 아무것도 할)에서 할 수 /usr/local없이 sudo.

당신이 만드는 모든 파일을 알 수 있습니다 /usr/local(당신에 속하는 것입니다 myACLtestfile일부 파일을 소유하는 것을 볼 수 있으므로, 위의 목록에서) root당신에 의해 다른 사람.

(마음이 바뀌고 멋진 세계로 돌아가려면 sudo다음과 같이 ACL을 삭제하십시오.

sudo chmod -R -N /usr/local

권한을 root:wheel다음으로 설정하십시오 .

sudo chown -R root:wheel /usr/local

)


** 편집하다 **

설치하려는 소프트웨어의 설정 루틴을 사용/usr/bin/install 하는 경우 훨씬 간단한 솔루션 일 수 있습니다. 더하다:

alias install="sudo /usr/bin/install"

~/.bashrc. 그런 다음 . ~/.bashrc변경 사항을 적용하십시오.

그런 다음 /etc/sudoerscommand로 편집 하고 다음을 sudo visudo추가하십시오.

<your username> ALL=(ALL) NOPASSWD:/usr/bin/install

로 파일을 저장하고 닫습니다 :x.

( installGNU 설치와 같이 파일 시스템의 다른 곳에서 다른 명령 을 사용하는 경우 위의 경로를 적절하게 변경하십시오.)

이것이 작동하려면 소프트웨어를 사용해야합니다 /usr/bin/install. 일반적으로의 경우입니다 make install.

** /편집하다 **


정말 좋은 답변입니다. 투표를 두 번 할 수 있으면 좋겠습니다.
JamiePatt

@Matty F : "스 도리스 (sudo-less)"설치를 달성하기 위해 훨씬 간단한 방법을 추가했습니다 (조건 : /usr/bin/install사용해야 함). 내 답변 맨 아래에서 확인하십시오.
jaume

1

복구 HD로 부팅하고 터미널을 사용하여 Mac HD / usr / local을 직접 수정하는지 아니면 편리한 백업에서 복원 하려는지 확인하십시오.

Mac은 / usr / local에 존재하는 것이 필요하지 않기 때문에 sudo 또는 시스템에 중요한 시스템이 어떤 영향을 받는지 보지 못하므로 상황을 이해하지 못할 수도 있습니다.

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