ฉันจะรัน Homebrew เป็น root ได้อย่างไร


11

หลายปีที่ผ่านมาคุณสามารถหนีด้วยการทำงานbrewในฐานะรูทเพียงแค่ chowning brewไปที่รูท แต่มันก็ลบฟีเจอร์นั้นออก ดังนั้นใน Homebrew 1.1.6 ฉันเคยแก้ไข/usr/local/Homebrew/Library/Homebrew/brew.shเพื่อลบการตรวจสอบรูท (อันที่บอกว่ามัน "อันตรายมาก") ดังนั้นฉันจึงสามารถเรียกใช้brewเป็นรูทได้

เวอร์ชันใหม่กว่าของ Homebrew ยังคงใช้งานได้ แต่จะคืนค่าbrew.shไฟล์กลับมาทุกครั้งหลังจากที่ฉันเรียกใช้brewแม้ว่าฉันchmod 500จะเป็นเช่นนั้นก็ตาม ฉันสามารถเขียนสคริปต์เพื่อเปลี่ยนจากนั้นเรียกใช้brewโดยอัตโนมัติ แต่ฉันไม่แน่ใจว่าสิ่งนี้จะได้ผลเสมอและไม่ต้องการโอกาส มีใครพบวิธีอื่นในการรัน Homebrew เป็น root


3
อยากรู้อยากเห็นทำไมคุณต้องการที่จะทำงานbrewเป็นราก? นอกจากนี้ยังsudoไม่เพียงพอสำหรับวัตถุประสงค์ของคุณ?
อัลลัน

2
@ Allan sudoใช้มันเป็น root และทำให้ฉันมีข้อผิดพลาด "อันตรายมาก" ฉันต้องการเรียกใช้เป็นรูทเนื่องจากมีปัญหาในการติดตั้งแพ็กเกจบางอย่างโดยเฉพาะอย่างยิ่งหากมีสิ่งใดติดตั้งไม่ผ่าน Homebrew (เช่นผ่านpip) ฉันลงเส้นทางนั้นหลายครั้ง นอกจากนี้ยังไม่สามารถทำงานได้อย่างถูกต้องสำหรับผู้ใช้หลายคนโดยไม่มีวิธีการแก้ปัญหาแปลก ๆ ยกเว้นว่าฉันจะติดตั้งทุกอย่างเป็นรูท
sudo

$ su -> $ Brew สิ่งที่ต้องการมากที่สุด?
StrawHara

1
การสร้างซอฟต์แวร์สำเร็จรูปที่rootมีความเสี่ยง แม้การสร้างแพคเกจโดยไม่ต้องจัดการแพคเกจที่คุณจะสร้างแพคเกจเป็นผู้ใช้ที่ไม่ใช่สิทธิพิเศษ (ตัวเอง) แล้วติดตั้งแพคเกจเป็นด้วยroot sudoผู้จัดการแพคเกจเช่นตำรวจและ MacPorts rootทั้งสร้างกับผู้ใช้ที่ไม่ใช่สิทธิ์ของตัวเองแล้วติดตั้งเป็น Homebrew ไม่มีกลไกดังกล่าว
fd0

1
อืมฉันไม่เห็นปัญหาในตอนท้ายของbrew.shไฟล์ที่มีการย้อนกลับหลังจากแก้ไขและเรียกใช้brewคำสั่ง ดังนั้นผมจึงสามารถเรียกใช้sudo brew whateverและbrew whateverควบคู่เพียงแค่ปรับ brew --versionผลลัพธ์ของฉันคือ: Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28) FYI ฉันแก้ไขbrew.shไฟล์เพื่อคอมเม้นต์ทุกบรรทัดในcheck-run-command-as-rootฟังก์ชันและวางreturnคำสั่งเดียวที่ด้านบนของฟังก์ชันแทน
GDP2

คำตอบ:


2

หลังจากทำการเปลี่ยนแปลงสคริปต์แล้วให้ลองตั้งค่าสถานะที่ไม่เปลี่ยนรูปแบบบน brew.sh

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

ฉันยังไม่ได้ทดสอบ ตามกฎทั่วไปฉันไม่ให้รูทแอปพลิเคชันซึ่งนักพัฒนาซอฟต์แวร์ขอร้องไม่ให้ทำ


ฉันเห็นด้วยกับเจสัน มีเหตุผลที่พวกเขาบอกว่าไม่ให้เรียกใช้การหมักเป็นราก ส่วนใหญ่เป็นเพราะพวกเขาเป็น devs และฉันจะไว้วางใจพวกเขาด้วยซอฟต์แวร์ของพวกเขา นอกจากนี้ซึ่งแตกต่างจาก macports ซึ่งครั้งล่าสุดที่ฉันตรวจสอบยังคงต้องการชงไม่ต้องการหรือต้องการสิทธิ์รากดังนั้นถ้าคุณพลาดบางสิ่งบางอย่างมันจะไม่ทำให้ทั้งระบบของคุณ ทุกอย่างมีอยู่ในบัญชีผู้ใช้ของคุณและไม่จำเป็นต้องยุ่งกับ sudo
user9950573

1
ยืนยันการทำงานแล้วขอบคุณ ต้องใช้เวลาสักครู่ในการพยายามอัปเดตในครั้งแรก แต่หลังจากนั้นsudo brew installจะทำงานตามปกติ
sudo

1
มีไม่มากที่จะเลอะและทำให้ระบบใช้ไม่ได้กับแพ็คเกจที่ฉันจะติดตั้งบน Mac อย่างไรก็ตามฉันสามารถกู้คืนระบบภายใน 30 นาที การล้างข้อมูลผู้ใช้ของฉันนั้นยากกว่ามากและหลายสิ่งหลายอย่างที่ไม่สามารถใช้งานได้นอกเสียจากว่าจะติดตั้งทั้งระบบตามที่ฉันอธิบายไว้ในความคิดเห็นด้านบน
sudo

1

ผู้ใช้ทั่วไปไม่ควรทำสิ่งนี้ แต่คุณไม่ใช่คนธรรมดาใช่ไหม

สองประเด็น:

  1. คุณไม่สามารถหยุดรากได้ หากคุณยืนยันในการใช้รูทแล้วรูทสามารถเขียนทับได้brew.shไม่ว่าจะเกิดอะไรขึ้น

  2. คุณไม่สามารถหยุดหลังจากที่ทุกท่านกำลังพูดคุยเกี่ยวกับการทำงานbrewbrew

ดังนั้นเราจะทำงานร่วมกับสิ่งนั้น การติดตั้ง Let 's นามแฝงที่จะคัดลอกไปทำงานแล้วbrew.shbrew

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.