Homebrew를 루트로 어떻게 실행합니까?


11

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

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


3
호기심 때문에 왜 brew루트 로 달리고 싶 습니까? 또한 sudo귀하의 목적에 충분하지 않습니까?
Allan

2
@Allan sudo은 루트로 실행하며 동일한 "매우 위험한"오류를 발생시킵니다. 특히 Homebrew를 통해 설치되지 않은 항목이있는 경우 (예 :를 통해 pip) 특정 패키지를 설치하는 데 문제가 있기 때문에 루트로 실행하고 싶습니다 . 나는 그 길을 여러 번 내려 갔다. 또한 루트로 모든 것을 설치하지 않으면 이상한 해결 방법없이 여러 사용자에게 제대로 작동하지 않습니다.
sudo

$ su-> $ brew youwant?
StrawHara

1
root위험한 소프트웨어 패키지 빌드 . 패키지 관리자없이 패키지를 빌드하더라도 권한이없는 사용자 (자신)로 패키지를 빌드 한 후 다음 root과 같이 패키지를 설치하십시오 sudo. Fink 및 MacPorts와 같은 패키지 관리자는 모두 비 권한 사용자와 함께 빌드 한 다음로 설치합니다 root. Homebrew에는 그러한 메커니즘이 없습니다.
fd0

1
흠, brew.sh파일을 수정하고 brew명령 을 실행 한 후 파일이 되돌려 지는 문제는 보이지 않습니다 . 그래서 실행할 수 sudo brew whateverbrew whatever잘 연동된다. 내 brew --version결과는 다음과 같습니다. Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28) 참고로 함수의 brew.sh모든 줄을 주석 처리하도록 파일을 수정하고 대신 함수의 맨 위에 check-run-command-as-root단일 return문을 배치했습니다 .
GDP2

답변:


2

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

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

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


나는 또한 Jason에 동의합니다. 양조를 루트로 실행하지 말라고하는 이유가 있습니다. 대부분은 개발자이기 때문에 소프트웨어로 신뢰합니다. 또한 마지막으로 확인한 macports와 달리 brew에는 루트 권한이 필요하지 않거나 루트 권한이 필요하지 않으므로 무언가를 망쳐 놓으면 전체 시스템을 손상시키지 않을 수 있습니다. 모든 것이 사용자 계정에 포함되어 있으며 sudo를 망칠 필요가 없습니다.
user9950573

1
작동 확인, 감사합니다. 처음 업데이트를 시도하는 데 시간이 걸리지 만 나중에 sudo brew install정상적으로 실행됩니다.
sudo

1
Mac에 설치할 패키지로 시스템을 엉망으로 만들고 사용할 수 없게 만드는 것은 그리 많지 않습니다. 어쨌든 30 분 이내에 시스템을 복원 할 수 있습니다. 위의 주석에서 설명했듯이 사용자 전체를 정리하는 것이 훨씬 어렵고 시스템 전체에 설치하지 않으면 많은 작업이 제대로 작동하지 않습니다.
sudo

1

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

두 가지 문제 :

  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이 설치되어 사용자 권한을 에스컬레이션 할 수 있지만 이러한 솔루션은 빠른 답변을 위해 약간 깊습니다.

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