Izin homebrew & banyak pengguna yang perlu membuat pembaruan

79

Saya menggunakan Homebrew untuk mengelola instalasi paket di Lion (Server Lion sebenarnya tapi ini seharusnya tidak masalah) .

Homebrew dipasang di bawah satu pengguna. Sekarang pengguna lain ingin menambahkan paket dan Homebrew tidak senang:

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

Apakah ini dianggap buruk? Saya pikir salah satu keuntungan menggunakan /usr/local/untuk instalasi Anda adalah bahwa Anda tidak perlu sudo. Tapi jelas kami lakukan.

Semua pengguna yang perlu memodifikasi Homebrew adalah anggota grup admin . Jadi, saya bisa chmod -R g+w /usr/local/tetapi takut ini akan merusak sesuatu atau membuat masalah keamanan?!?

Nasihat?

$ 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
Meltemi
sumber

Jawaban:

100

Apakah ini dianggap buruk? Saya pikir salah satu keuntungan menggunakan / usr / local / untuk instalasi Anda adalah Anda tidak perlu sudo. Tapi jelas kami lakukan.

Homebrew, secara default, mengatur sendiri untuk akses pengguna tunggal /usr/local. Jadi, Anda perlu membuka izin pada pohon direktori untuk dikelola oleh lebih dari satu orang.

Orang tidak perlu menjalankan sudo di sini untuk mengelola homebrew. Anda hanya perlu mengubah beberapa izin. Karena Anda sudah memiliki:

Semua pengguna yang perlu memodifikasi Homebrew adalah anggota grup admin.

Anda perlu melakukan dua hal lagi:

  1. Pastikan semua yang ada di bawah /usr/localmilik grup admin; dan
  2. Pastikan siapa pun dari grup admindapat menulis apa pun di bawah /usr/local.

Dalam hal ini perubahan yang harus dilakukan adalah:

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

Dan setiap pengguna dari admingrup harus dapat mengelola instalasi homebrew pada mesin. Jika Anda perlu menambahkan pengguna ke grup admin ini dapat dilakukan seperti ini:

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

(pengguna itu harus masuk lagi untuk mendapatkan hak istimewa yang diberikan).

Untuk kewarasan pada mesin, Anda mungkin ingin mempertimbangkan untuk membuat garpu Homebrew Anda sendiri dan meminta titik repositori homebrew git lokal ke garpu lokal. Itu memungkinkan Anda menyesuaikan Homebrew untuk lingkungan Anda dan mengontrol versi paket yang bisa dipasang orang dengan brewperintah. Dengan beberapa orang yang melakukan pemasangan, Anda dapat menjalankan masalah versi atau masalah ketergantungan.

Ian C.
sumber
1
Saya memiliki masalah yang sama dan telah mengubah kepemilikan grup dan izin grup seperti yang disarankan. brew doctormasih mengeluh bahwa misalnya /usr/local/includetidak dapat ditulisi meskipun saya secara manual dapat memverifikasi bahwa saya dapat menulis ke file di sini (misalnya menggunakan echo "hello" > /usr/local/include/testfile). Saya anggota grup admin. Ada ide untuk debugging?
mgd
2
Solusi ini berfungsi untuk saya, tetapi tidak mengatasi cache lokal Homebrew. Saya juga menyarankan untuk menjalankan:chmod -R g+w /Library/Caches/Homebrew
Drew Dara-Abrams
Saya menemukan posting blog di blog.strug.de/2012/06/my-homebrew-multi-user-setup dan mengadaptasi skrip dari raw.githubusercontent.com/steshaw/shelly/master/bin/…
Steven Shaw
2
Sepertinya Homebrew kini telah mentransisikan cache ke direktori pengguna saat ini. Baru saja melihat: ==> Migrasi / Perpustakaan / Tembolok / Homebrew ke / Pengguna /bluechain.admin/Library/Caches/Homebrew ... saat melakukan pembaruan minuman. Jika saya menafsirkan ini dengan benar, ini berarti kita tidak perlu lagi khawatir memiliki direktori cache yang dapat ditulisi secara global untuk Homebrew.
Endareth
Untuk pengguna High Sierra dengan masalah ini, Anda sekarang perlu menggunakan ini: sudo chown -R $(whoami) $(brew --prefix)/*alih-alih perintah di atas. Dapatkan dari sini
Jeff Kranenburg
7

Anda dapat mengaktifkan izin homebrew untuk lebih dari satu pengguna melalui grup admin, atau melalui grup pengguna lainnya. Berikut adalah resep yang sedikit diperluas untuk mengonfigurasinya:

Grup perlu mengelola direktori pemasangan homebrew lokal. Jadi berikan / usr / lokal ke grup admin (atau grup pilihan Anda) dan aktifkan izin menulis grup:

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

Grup ini juga memerlukan izin untuk cache formula dan file sumber lokal homebrew di / Library / Cache / Homebrew :

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

Jika Anda mengalami masalah izin lebih lanjut yang serupa saat menggunakan homebrew dari beberapa akun, catat jalur yang menyinggung dan pertimbangkan untuk mencoba pendekatan yang sama.

Leif Hanack telah blogged solusi yang sama , di mana ia menciptakan dan mengkonfigurasi grup pengguna yang didedikasikan minuman untuk tujuan tersebut.

--Perbarui 2015-08-20

Saya baru-baru ini menggunakan jawaban ini lagi untuk mengatur akun tamu dengan akses homebrew. Untuk menggunakan Tong dari akun admin kedua saya juga harus menjalankan perintah berikut:

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

Saya hanya akan mengomentari jawaban yang diterima (tetapi belum memiliki reputasi untuk itu.)

Sebagai pengguna Caskroom.io , saya juga merekomendasikan untuk menambahkan:

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

sejak tong, ekstensi yang sangat berguna untuk homebrew, memasukkan semua file-nya /opt/homebrew-cask

zen
sumber
1
Dengan /optsaya kira Anda maksud /usr/local? Seperti /opttidak ada pada instalasi OS X baru-baru ini, bahkan setelah instalasi homebrew.
forquare
Pada bulan Juni 2016, Homebrew-Cask (ekstensi brew) memindahkan lokasi default untuk folder Caskroom ke /usr/local(atau lebih tepatnya $(brew --prefix)) dari /opt/homebrew-caskjadi jawaban ini sekarang diperdebatkan, tetapi valid ketika ditulis. Lihat Memindahkan lokasi kamar mayat default # 21603
zen
1

Anda harus memberi izin ke jalan. jalankan ini di command line dan Anda akan baik-baik saja untuk pergi. Ini bekerja untuk saya:

sudo chown -R $ USER / usr / local

Asso
sumber
0

Saya akan memilih untuk menetapkan izin grup - dan bagi saya tampaknya hanya itu yang ada di sana dan tidak boleh membuat masalah keamanan.

  • Jangan gunakan sudo.

tl; dr Sudo berbahaya, dan Anda tetap menginstal TextMate.app tanpa sudo.

Homebrew dirancang untuk bekerja tanpa menggunakan sudo. Anda dapat memutuskan untuk menggunakannya tetapi kami sangat menyarankan untuk tidak melakukannya. Jika Anda telah menggunakan sudo dan mengalami bug maka kemungkinan itu penyebabnya. Tolong jangan ajukan laporan bug kecuali Anda dapat mereproduksinya setelah menginstal ulang Homebrew dari awal tanpa menggunakan sudo.

iolsmit
sumber
Jadi, saran Anda adalah untuk sudo chmod -R g+w /usr/local/?
Meltemi
Ya, tetapi Anda mungkin ingin meminta pendapat kedua menggunakan salah satu dari ini: IRC (irc: //irc.freenode.net/#machomebrew); Milis ([email protected]); Twitter ( twitter.com/machomebrew )
iolsmit