Homebrew를 루트로 어떻게 실행합니까? 기능을 제거했습니다.

몇 년 전만해도 brew뿌리를 내리는 것만으로 루트로 도망 갈 수 brew있었지만 그들은 그 기능을 제거했습니다. 그래서 Homebrew 1.1.6에서는 /usr/local/Homebrew/Library/Homebrew/brew.sh루트 체크 ( “매우 위험하다”)를 제거하여 루트 brew로 실행할 수 있도록 편집 했습니다 .

최신 버전의 Homebrew는 여전히 작동하지만 brew.sh파일을 실행 brew하더라도 실행 후마다 파일을 계속 되돌 chmod 500립니다. 스크립트를 작성하여 변경 한 다음 brew자동으로 실행할 수 는 있지만 이것이 항상 작동하고 기회를 원하지 않는지는 확실하지 않습니다. 누구든지 Homebrew를 루트로 실행하는 다른 방법을 찾았습니까?



답변

스크립트를 변경 한 후 brew.sh에서 변경 불가능한 플래그를 설정하십시오.

chflags uchg /usr/local/Homebrew/Library/Homebrew/brew.sh

나는 테스트하지 않았습니다. 일반적으로 개발자가 요구하지 않는 응용 프로그램에 뿌리를 두지 않습니다.


답변

일반적인 사용자는이 작업을 수행해서는 안되지만 일반적이지 않습니까?

두 가지 문제 :

  1. 당신은 뿌리를 멈출 수 없습니다. root 사용을 고집하면 root는 brew.sh무엇이든 덮어 쓸 수 있습니다 .

  2. brew결국 멈출 수는 없습니다 brew.

우리는 그 일을 할 것입니다. 복사하고 brew.sh실행 하도록 별칭을 설정합시다 brew.

alias brew='cp /<modified>/brew.sh /<actuall>/brew.sh; /usr/local/bin/brew'

(시스템과 일치하도록 경로를 수정하십시오).

이제해야 할 일은 :

sudo brew <arguments>

(루트가되어 복사 하여 루트로 brew.sh실행 brew하고 인수를 사용하여 루트로 실행 하면 나중에 brew덮어 쓰므로 brew.sh다시 할 준비가됩니다.)

참고 : sudo별명도 입력 할 수 있지만 매번 암호를 입력하라는 메시지가 표시되므로이 방법이 더 좋습니다.

일반적으로 보안을 위해 setuid( chmod u+s)를 사용 하여 쉘 스크립트에서 루트 할 수 없습니다 . Perl에는 별도의 프로그램 suidperl이 설치되어 사용자 권한을 에스컬레이션 할 수 있지만 이러한 솔루션은 빠른 답변을 위해 약간 깊습니다.