การอนุญาต Homebrew & ผู้ใช้หลายคนจำเป็นต้องชงการปรับปรุง


79

ฉันใช้Homebrewการจัดการแพคเกจติดตั้งในสิงโต(สิงโตเซิร์ฟเวอร์จริง แต่ไม่ควรเรื่อง)

Homebrew ถูกติดตั้งภายใต้ผู้ใช้หนึ่งคน ตอนนี้ผู้ใช้รายอื่นต้องการเพิ่มแพ็คเกจและ Homebrew ไม่มีความสุข:

$ brew update
fatal: Unable to create '/usr/local/.git/index.lock': Permission denied
Error: Failure while executing: git checkout -q master

สิ่งนี้ถือว่าแย่หรือไม่? ฉันคิดว่าหนึ่งในข้อดีของการใช้สำหรับการติดตั้งของคุณคือการที่คุณไม่จำเป็นต้อง/usr/local/ sudoแต่เราทำอย่างชัดเจน

ผู้ใช้ทั้งหมดที่จะต้องแก้ไข Homebrew เป็นสมาชิกของกลุ่มผู้ดูแลระบบ ดังนั้นฉันทำได้chmod -R g+w /usr/local/แต่กลัวว่าสิ่งนี้จะทำให้เกิดปัญหาหรือทำให้เกิดปัญหาด้านความปลอดภัย!

แนะนำ?

$ ls -al /usr/local/.git/
total 432
drwxr-xr-x  14 ladmin  admin     476 Feb 24 11:48 .
drwxrwxr-x  14 root    admin     476 Feb  9 15:27 ..
-rw-r--r--   1 ladmin  admin      94 Feb 24 11:48 FETCH_HEAD
-rw-r--r--   1 ladmin  admin      23 Feb 24 11:48 HEAD
-rw-r--r--   1 ladmin  admin      41 Feb  9 15:28 ORIG_HEAD
drwxr-xr-x   2 ladmin  admin      68 Feb  9 15:27 branches
-rw-r--r--   1 ladmin  admin     218 Feb  9 15:27 config
-rw-r--r--   1 ladmin  admin      73 Feb  9 15:27 description
drwxr-xr-x  12 ladmin  admin     408 Feb  9 15:27 hooks
-rw-r--r--   1 ladmin  admin  200272 Feb 24 11:48 index
drwxr-xr-x   3 ladmin  admin     102 Feb  9 15:27 info
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 logs
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 objects
drwxr-xr-x   5 ladmin  admin     170 Feb  9 15:27 refs

คำตอบ:


100

สิ่งนี้ถือว่าแย่หรือไม่? ฉันคิดว่าหนึ่งในข้อดีของการใช้ / usr / local / สำหรับการติดตั้งของคุณคือคุณไม่จำเป็นต้องใช้ sudo แต่เราทำอย่างชัดเจน

Homebrew /usr/localโดยค่าเริ่มต้นชุดตัวเองขึ้นสำหรับการเข้าถึงผู้เดียวที่จะ ดังนั้นคุณต้องเปิดการอนุญาตบนแผนผังไดเรกทอรีเพื่อที่จะได้รับการจัดการโดยบุคคลมากกว่าหนึ่งคน

ผู้คนไม่จำเป็นต้องเรียกใช้ sudo ที่นี่เพื่อจัดการโฮมบรูว์ คุณเพียงแค่ต้องเปลี่ยนการอนุญาต เนื่องจากคุณมี:

ผู้ใช้ทั้งหมดที่จะต้องแก้ไข Homebrew เป็นสมาชิกของกลุ่มผู้ดูแลระบบ

คุณต้องทำสองสิ่งเพิ่มเติม:

  1. ตรวจสอบให้แน่ใจทุกอย่างภายใต้/usr/localอยู่ในกลุ่มadmin; และ
  2. ตรวจสอบให้แน่ใจทุกคนจากกลุ่มที่สามารถเขียนอะไรภายใต้admin/usr/local

ในกรณีนี้การเปลี่ยนแปลงที่ทำคือ:

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

และผู้ใช้ใด ๆ จากadminกลุ่มควรสามารถจัดการการติดตั้ง homebrew บนเครื่อง หากคุณต้องการเพิ่มผู้ใช้ในกลุ่มผู้ดูแลระบบสามารถทำได้ดังนี้:

 dseditgroup -o edit -a <username> -t user admin

(ผู้ใช้รายนั้นจะต้องลงชื่อเข้าใช้อีกครั้งเพื่อรับสิทธิ์)

สำหรับสติบนเครื่องคุณอาจต้องการพิจารณาสร้างทางแยกของ Homebrew และให้ที่เก็บ homebrew git ของคุณชี้ไปที่ fork ท้องถิ่น ซึ่งช่วยให้คุณสามารถปรับแต่ง Homebrew สำหรับสภาพแวดล้อมของคุณและควบคุมเวอร์ชันของแพ็คเกจที่ผู้ใช้สามารถติดตั้งได้ด้วยbrewคำสั่ง ด้วยหลายคนที่ทำการติดตั้งคุณสามารถเรียกใช้กับปัญหารุ่นหรือปัญหาการพึ่งพา


1
ฉันมีปัญหาเดียวกันและมีการเปลี่ยนแปลงความเป็นเจ้าของกลุ่มและสิทธิ์กลุ่มตามที่แนะนำ brew doctorยังคงบ่นว่าเช่น/usr/local/includeไม่สามารถเขียนได้แม้ว่าฉันจะสามารถตรวจสอบด้วยตนเองว่าฉันสามารถเขียนไปยังไฟล์ที่นี่ (เช่นการใช้echo "hello" > /usr/local/include/testfile) ฉันเป็นสมาชิกของกลุ่มผู้ดูแลระบบ มีแนวคิดสำหรับการแก้ไขข้อบกพร่องหรือไม่
mgd

2
วิธีนี้ใช้ได้ผลสำหรับฉัน แต่ไม่ได้ระบุที่อยู่แคชภายในของ Homebrew ฉันยังแนะนำให้ทำงาน:chmod -R g+w /Library/Caches/Homebrew
Drew Dara-Abrams

ฉันพบโพสต์บล็อกในนั้นblog.strug.de/2012/06/my-homebrew-multi-user-setupและปรับสคริปต์จากraw.githubusercontent.com/steshaw/shelly/master/bin/…
Steven Shaw

2
ดูเหมือนว่า Homebrew จะเปลี่ยนแคชไปเป็นไดเรกทอรีผู้ใช้ปัจจุบัน เพิ่งเห็น: ==> กำลังโยกย้าย / Library / Caches / Homebrew ไปที่ /Users/bluechain.admin/Library/Caches/Homebrew ... เมื่อทำการอัพเดท Brew หากฉันตีความสิ่งนี้อย่างถูกต้องหมายความว่าเราไม่ต้องกังวลว่าจะมีแคช dir ที่สามารถเขียนได้ทั่วโลกสำหรับ Homebrew
Endareth

สำหรับผู้ใช้ที่ Sierra สูงที่มีปัญหานี้คุณต้องใช้สิ่งนี้sudo chown -R $(whoami) $(brew --prefix)/*แทนคำสั่งด้านบน รับจากที่นี่
Jeff Kranenburg

7

คุณสามารถเปิดใช้งานการอนุญาต homebrew สำหรับผู้ใช้มากกว่าหนึ่งรายผ่านกลุ่มผู้ดูแลระบบหรือผ่านกลุ่มผู้ใช้อื่น ๆ นี่เป็นสูตรขยายเล็กน้อยเพื่อกำหนดค่านี้:

กลุ่มต้องการจัดการไดเร็กทอรีการติดตั้งโฮมบรูว์โลคัล ดังนั้นกำหนด/ usr / localให้กับกลุ่มadmin (หรือกลุ่มที่คุณต้องการ) และเปิดใช้งานการอนุญาตให้เขียนกลุ่ม:

chgrp -R admin /usr/local
chmod -R g+w /usr/local

กลุ่มยังต้องการการอนุญาตสำหรับแคชท้องถิ่นของสูตรและไฟล์ต้นฉบับที่/ Library / Caches / Homebrew :

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

หากคุณพบปัญหาการอนุญาตที่คล้ายกันเพิ่มเติมในขณะที่ใช้ homebrew จากหลายบัญชีให้สังเกตเส้นทางที่ละเมิดและลองใช้วิธีการเดียวกัน

Leif Hanack ได้ blogged วิธีการแก้ปัญหาที่คล้ายกันที่เขาสร้างและกำหนดค่ากลุ่มผู้ใช้เฉพาะชงเพื่อวัตถุประสงค์

- อัปเดต 2015-08-20

ฉันเพิ่งใช้คำตอบนี้อีกครั้งเพื่อตั้งค่าบัญชีผู้ใช้ที่มีการเข้าถึง homebrew เพื่อที่จะใช้ Cask จากบัญชีผู้ดูแลระบบที่สองฉันต้องเรียกใช้คำสั่งต่อไปนี้:

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask

4

ฉันเพิ่งจะแสดงความคิดเห็นในคำตอบที่ยอมรับได้ (แต่ยังไม่มีชื่อเสียงในเรื่องนั้น)

ในฐานะผู้ใช้Caskroom.ioฉันขอแนะนำให้เพิ่ม:

sudo chown -R admin /opt/homebrew-cask
sudo chmod -R g+w /opt/homebrew-cask
sudo chmod -R g+w  /Library/Caches/Homebrew/

ตั้งแต่ cask ซึ่งเป็นส่วนขยายที่มีประโยชน์อย่างยิ่งสำหรับ homebrew ทำให้ไฟล์ทั้งหมดอยู่ใน /opt/homebrew-cask


1
โดย/optฉันคิดว่าคุณหมายถึง/usr/localอะไร ในฐานะที่เป็น/optไม่มีอยู่ในการติดตั้ง OS X ล่าสุดแม้หลังจากติดตั้ง homebrew
forquare

ในเดือนมิถุนายนของปี 2559 Homebrew-Cask (ส่วนขยายการชง) ย้ายตำแหน่งเริ่มต้นสำหรับโฟลเดอร์ Caskroom ไปที่/usr/local(หรือมากกว่านั้นอย่างถูกต้อง$(brew --prefix)) /opt/homebrew-caskเพื่อให้คำตอบนี้เป็นที่สงสัย แต่ถูกต้องเมื่อมันถูกเขียน ดูมูฟเริ่มต้นที่ตั้ง caskroom # 21603
เซน

1

คุณต้องให้สิทธิ์กับเส้นทาง เรียกใช้สิ่งนี้ในบรรทัดคำสั่งแล้วคุณจะไม่พลาด มันใช้งานได้สำหรับฉัน:

sudo chown -R $ USER / usr / local


0

ฉันจะลงคะแนนเพื่อตั้งค่าสิทธิ์ของกลุ่ม - และสำหรับฉันดูเหมือนว่าเป็นเพียงแค่สิ่งที่มีอยู่และไม่ควรสร้างปัญหาด้านความปลอดภัย

  • อย่าใช้ sudo

tl; dr Sudo อันตรายและคุณติดตั้ง TextMate.app โดยไม่ต้องใช้ sudo

Homebrew ถูกออกแบบมาให้ทำงานโดยไม่ต้องใช้ sudo คุณสามารถตัดสินใจที่จะใช้ แต่เราแนะนำอย่างยิ่งให้ไม่ทำเช่นนั้น หากคุณใช้ sudo และพบข้อผิดพลาดก็มีแนวโน้มที่จะเป็นสาเหตุ โปรดอย่ายื่นรายงานข้อผิดพลาดเว้นแต่คุณจะสามารถทำซ้ำได้หลังจากติดตั้ง Homebrew ใหม่ตั้งแต่ต้นโดยไม่ต้องใช้ sudo


ดังนั้นคำแนะนำของคุณsudo chmod -R g+w /usr/local/คือ?
Meltemi

ใช่ แต่คุณอาจต้องการความเห็นที่สองโดยใช้หนึ่งในนี้: IRC (irc: //irc.freenode.net/#machomebrew); รายชื่อผู้รับจดหมาย (homebrew@librelist.com); Twitter ( twitter.com/machomebrew )
iolsmit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.