/ Usr / local / right için iznim var mı?


88

Bağlantı noktası ihtiyaçları için HomeBrew kullanıyorum (MacPorts'tan biraz daha "temiz görünüyor").

Ben olmadan yükleyebilirsiniz sudo(büyük) ing, ancak bu adım bağlayan adam (bunu gerektirir görünüyor /usr/local/share/man/man3aittir root). Bulduğum
bir rehber yinelemeli chown /usr/localolarak yaparak öneririm

sudo chown -R `whoami` /usr/local

Bu güvenli mi… yoksa Kötü Bir Fikir mi?

Ayrıca: izinlerim doğru mu?

$ pwd
/usr/local/share/man
$ ls -lah
total 32
drwxrwxr-x    8 root  staff   272B  4 Set 11:02 .
drwxrwxr-x    9 root  staff   306B 10 Set 11:27 ..
drwxr-xr-x    3 root  wheel   102B  4 Ago  2009 de
drwxrwxr-x  163 root  staff   5,4K 10 Set 11:27 man1
drwxr-xr-x   11 root  wheel   374B 10 Set 11:27 man3
drwxr-xr-x    7 ago   staff   238B 10 Set 11:39 man5
drwxr-xr-x   11 ago   staff   374B 10 Set 11:39 man7
-rw-r--r--    1 root  staff    13K  4 Set 11:02 whatis

5
Homebrew’un kullanılması amaçlanmıştır. Bazı insanlar aynı fikirde olmayabilir, ancak lider geliştirici işleri bu şekilde yapabileceğini söylüyor.
Mike McQuaid

1
Senin chown için biraz daha iyi bir alternatif: sudo chown -R :admin /usr/local. Bu şekilde, makinenin herhangi bir yönetici kullanıcısı için aynı şekilde çalışacaktır. Bununla birlikte sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+, grubun kullanıcı ile aynı yazma erişimine sahip olduğundan emin olmak için de çalıştırmanız gerekebilir .
Slipp D. Thompson,

12
"Homebrew kullanacağım, macport'lardan daha temiz görünüyor. Oh, bu tanımsız izin karmaşasına bak. Stack Overflow'u kontrol edeceğim. Oh, işte Unix'in en iyi uygulamalarına ve işletim sistemi güncellemelerinin denemesine karşı hızlı bir saldırı. zorlamak için. Mükemmel! " Ay sonra: "Hey, bu kötü amaçlı yazılım nasıl kurulur?"
hmijail

Bu yaklaşımla ilgili sorunum, yalnızca Homebrew'i yükleyen kullanıcı hesabının kullanabileceği anlamına geliyor. İş projelerini ev projelerinden ayrı tutmak için kullandığım birden fazla hesaba sahip bir Mac'im var (örneğin). Yanlış hesaba giriş yaptıysam, brew install kullanamıyorum. Kök kullanmanın tehlikelerinden kaçınmak için bu rotayı izledim ama bunun en iyi yaklaşım olduğuna ikna olmadım.
Uğurlu

@MikeMcQuaid Sonunda Homebrew'in bu konuda hata yaptığını ve bir veya iki hafta önce yayımlanan yeni sürümde nihayetinde hata kabul ettiğini ilginç buluyorum, / usr / local için varsayılan izinleri geri verdi
oemb1905

Yanıtlar:


37

İzinleri olabildiğince sıkı tutmak genellikle daha iyidir. Tutulması /usr/localaittir rootolarak çalıştırmak sadece süreçler vasıtasıyla root/ sudo(veya Apple yetkilendirme iletişim kutusu üzerinden yönetici kullanıcı için sorun) bu alana yazabilirsiniz. Bu nedenle, bir işlem indirme işlemi oradaki dosyaları bozmadan önce sizden bir parola istemek zorundadır.

Ancak dediğiniz gibi, yeni programlar eklemeyi zorlaştırıyor.

Onları çalıştırmaktan sudodaha az sıklıkta yüklediğiniz için çalıştırma konusunda iyiyim ancak oluşturma işleminin olması gereken hiçbir şeyi değiştirmeyeceğine güvenmeniz gerekiyor.

Eğer sudodan uzak durmak istersen, Homebrew'i içine kurar ~/usr/localve yolunu değiştiririm.

Daha iyi bir yol, başka bir kullanıcı homebrewoluşturmaktır; örneğin, söz konusu kullanıcının sahip olduğu bir dizin oluşturmaktır. Ardından kullanarak oraya yükleyin sudo -U homebrew. Diğer kullanıcılar, diğer dosyaların üzerine yazamayacağının avantajına sahip olacak, çünkü onlar olduğu gibi çalışmıyorlar root ve diğer programlar homebrew'i etkileyemiyor. ( Homebrew SSS’nin , "çok kullanıcılı bir ortam" içindeyseniz bu yeni kullanıcıyı önerdiğini unutmayın . MacOS dahil herhangi bir Unix makinesinin çok kullanıcılı bir ortam olduğunu söyleyebilirim)

Ancak Homebrew wiki'de tariflerin tüm vakaları bulamadığını /usr/localve onların içinde bulunduğumuz şüpheli seçtiğimiz dizini değiştirdiklerini söylediği gibi /usr/local.


1
İzinleri katı tutmak ve değiştirmek $PATHve $MANPATHkullanıcı dizinlerini dahil etmek için +1 . Yüklü programlar sistem genelinde kurulum gerektirmiyorsa, bu çok daha iyi bir alternatif.
zneak

3
+1 ve “izinleri olabildiğince sıkı tut” için kabul edilen cevap. Yapılması brew doctor(aşağıda önerilen), yalnızca paylaşılan adam dizinlerini ... benim için yeterince güvenli bir şekilde boğmam gerektiğini söyledi.
Agos

1
En azından her zaman Yönetici kullanıcıları olarak çalıştırılmayacak kadar güvenliği önemseyen insanlar için bir uzlaşma çözümü, grup yöneticiliğini ve izinlerini değiştirerek yalnızca Yöneticilerin / usr / local yazabilmelerini sağlamaktır. Kenorb'un cevabına bakınız.
hmijail

2
@Mark, Homebrew'in bu konuda nihayetinde hata yaptığını ve bir veya iki hafta önce yayımlanan yeni sürümde, / usr / local
oemb1905

48

Homebrew'i de kullanıyorum ve tamamen güvenli olduğunu onaylayabilirim. Resmi Homebrew SSS’sindeki Kurulum sayfasından alıntı :

Kendine bir iyilik yap ve seç /usr/local

  1. Daha kolay
    /usr/local/bin zaten senin içinde PATH.

  2. Daha kolay:
    Bağımlılıkları / usr veya / usr / local içinde değilse, derleme komut dosyalarının kırılması daha kolaydır . Homebrew formülleri için bunu düzeltiriz (her zaman test etmemize rağmen), ancak birçok RubyGems ve Python kurulum komut dosyasının kontrolümüz dışında bir şey olduğunu kırdığını göreceksiniz.

  3. Apple'ın POSIX'e uyması ve bu dizini bizim için terk etmesi güvenli
    . Bu /usr/local, varsayılan olarak hiçbir dizin olmadığı anlamına gelir , bu yüzden mevcut araçları bozmaktan endişe duymanıza gerek yoktur.

Demlenmeye bağlı değerli taşlar takmayı planlıyorsanız, kendinizi bir demet güçlükle kurtarın ve kurun /usr/local!

Gem'e başlık ve dylibs için standart olmayan dizinlerde arama yapması önemsiz değildir. Seçerseniz /usr/local, her şey “sadece işe yarar!”

Ben sadece kök olarak iş yapmanın çok kötü bir fikir olduğunu ekleyeceğim , bu yüzden chowning /usr/localsadece bana mantıklı gelmiyor (OSX’te bir sistem yöneticisi değil), aynı zamanda aklı başında .

İzinleriniz doğru değil (henüz). Sadece listelediğin komutu çalıştır ve iyi olacaksın.

Eğer başka sorunlarınız varsa hatırlayın, brew doctorsize yardımcı olabilir!


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
bmike

7
Sohbet gitti, bu üzücü. Bu yüzden, tarihi tekrar etme riski altında, yorumumu burada bırakacağım: bunun yapılması, güvenli olduğu anlamına gelmez.
hmijail

4
Tablonun özü, Homebrew’in bunun yanlış olmasının nedenlerinin olduğunu öne sürdüğü gibi olmasına rağmen
user151019

1
brew doctorsadece harika.
Utku

5
@Carmine Paolino Bana ilginç Homebrew nihayet bu konuda ve yeni sürümde hata bir veya iki hafta önce tahliye itiraf etti bulmak, / usr / local varsayılan izinleri geri verdi
oemb1905

9

Homebrew kullanıyorsanız, yazma grubuna belirli bir gruba izin vermelisiniz (ya adminda staff), böylece dosyalar o gruptaki kullanıcılar arasında paylaşılabilir.

Örneğin:

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

Ardından brew, bu gruba komut vermesi gereken kullanıcıları atayın (gruplarınızı: ile kontrol edin id -Gn).

Sonra çalışırken brew, çalıştırmayın sudo.

Hala bazı izin brew doctorsorunlarınız olduğunda, sorunu gidermek için çalıştırın .


Gerçekten bitmemiş olsa bile, gerçek, iyi davranış gösteren bir çözüm vermek için +1. Örneğin: BSD düzeyinde yönetici grubuna bir kullanıcı ekleyin. OS X'in Yönetici kullanıcıları kavramıyla ilgili bu karışıklık olmaz mı?
hmijail

Kayıt için bu talimatları izledim, ancak CLI'daki herhangi bir gruba herhangi birini eklemek yerine sadece mevcut OS X GUI yapımı Yönetici kullanıcımı kullandım. Çalışıyor: Demlemek komutlarını çalıştırabilmek için önce yapmalıyım su myAdminUser, sonra her şey amaçlandığı gibi çalışıyor. Ancak elbette bu çözüm zaten zaten bir Yönetici kullanıcısı olan insanlar için her zaman güvenlik sağlamaz.
hmijail

Bu muhtemelen gidilecek en iyi yol, katılıyorum @kenorb
pixel 67

7

Buna değer, /usr/localOS X tarafından bir "sistem" klasörü olarak kabul edilmez ve yepyeni bir Snow Leopard'a bu klasörü yüklemek boş.

Bu klasördeki köke ait herhangi bir şey sudo make install, başka bir yazılımın sonucudur veya bir .pkgşeyleri dökmek isteyenlere çift ​​tıkladıktan sonra şifrenizi verir /usr/local.

Sahip olmak /usr/localbir yıldan fazla bir süredir 2 makinede “benim için çalıştı”.

Bunlardan biri, eğer MySQL'i kurduysanız (Homebrew kullanmıyorsanız) ve dosyalarını kesiyorsanız, o zaman muhtemelen veritabanlarını göremezsiniz (bu yüzden onları MySQL'in hangi kullanıcı olarak çalıştığını seçmelisiniz) .)


5
gcc ve diğer geliştirme araçları otomatik olarak / usr / local dizinine
girerek

11
Sorun bir "sistem" klasörü değil; bu "sistem çapında" bir klasördür. Orada hiçbir şey olmasa bile /usr/local/bin, hala varsayılan $PATHdeğerdedir ve ne koyduysanız diğer kullanıcılar tarafından da kullanılabilir ve güvenilmeli . Eğer /usr/local/dizinin tamamı /usr/local/share/manOP kurulumunda şu anda aynı izinlere sahipse, herkes bir betiği kullanarak herhangi bir ikili dosyayı değiştirebilir rm -rf ~.
zneak

1
çok riskli: muhtemelen MySQL'i er ya da geç kuracağım
Agos

2
@Agos: MySQL'i her zaman HomeBrew ile kurabilirsiniz, bu durumda herhangi bir sorun yaşamayacaksınız :)
Carmine Paolino

1
@Agos Hiç riskli değil. Dikkat, yalnızca Homebrew'den önce MySQL kurduysanız geçerlidir. Daha sonra yaparsanız izinler /usr/localiyi olmalıdır. (Ama muhtemelen zaten Postgres kullanıyorsunuz. :))
Marnen Laibow-Koser

6

Homebrew 1.0.0'daki gibi:

Homebrew artık / usr / local sahipliğine sahip olmak zorunda değil. Dilerseniz / usr / local komutunu varsayılan sahipliğine geri döndürebilirsiniz: sudo chown root: wheel / usr / local


1
Şu anda brew updatehala sahipliğini gerektiren Brew kullanarak güncelleme yapıyorum /usr/local. Daha sonra izinleri geri yüklemeyi deneyeceğim.
Joshua Pinter

Bu gerçekten harika bir bilgi! Homebrew (<1.0) tarafından belirtilen şekilde izinleri belirledim ve güncellemeden sonra, nasıl geri döneceklerine ilişkin talimatlar verdi.
mortona42

0

Kullanıcıların sahip olması Tamam düşünüyorum yazma izinlerini için /usr/localsonuçta o Kullanmadığınız demektir - sudoher yapı senaryoyu üzerinde. Sıradan bir kullanıcının mülkiyeti fikrini sevmiyorum /usr/local. Kök sahibi (ya da benzerleri) sahip olmayı tercih ederim /usr/local, ancak izinleri değiştirerek kullanıcıların (ya da en azından bazı ayrıcalıklı grupların) yazabilmesini sağlayın. Bu kavramsal olarak doğru bir yaklaşım gibi görünüyor.


7
Buradaki sorun, /usr/local/binçoğu kullanıcı için $ PATH'ın önünde olması olabilir. Dizini dünyaca yazılabilir yapmak, bu yolla bir çok güvenlik açığı açar.
yokuş yukarı

@patrix Yani yolları değiştirin. :) Belirsiz komut yollarından dolayı güvenlik delikleri olan komut dosyalarınız varsa, komut dosyalarını suçlarım, izinlerinizi değil - komut dosyalarına çağrılan komutlar genellikle bu nedenle tam olarak nitelendirilmelidir. Her neyse, daha iyi bir çözüm yok: ya yönetici hesabınıza güvensiz bir umask veriyorsunuz ya da tüm derleme komut dosyalarınızı çalıştırıyorsunuz sudoya da bazı kullanıcılara yazma izinleri veriyorsunuz /usr/local. Üçüncüyü en az riskli olarak kabul ediyorum ... eğer daha iyi bir yol bilmiyorsan.
Marnen Laibow-Koser

Hmm. Bunu biraz daha fazla düşünmek, belki de daha iyi bir yol Homebrew’in varsayılan olarak RVM’in yaptığını yapmasıdır: her şeyi ~/brewya da böyle bir şeyi kurmak . Sorun şu ki, oldukça bağımsız olan Ruby'nin aksine, pek çok * nix yardımcı programı birbirlerini bulmayı bekliyorlar /usr/local...
Marnen Laibow-Koser

3
/usr/localDünyada yazılabilir olmadığımı belirtmeyi ihmal ettim : bunun yerine, homebrewyazma izinleri olan ( 0: group:homebrew allow add_file,delete,add_subdirectory,delete_child,file_inherit,directory_inherittamamen rock gibi genişletilmiş izinler) güvenilir bir grubum (sadece yönetici değil ) var. Bu, çözebildiğim en iyi uzlaşmadır: sudoderleme kodları üzerinde değil, bazıları üzerinde denetim /usr/local.
Marnen Laibow-Koser

@ MarnenLaibow-Koser Bu yaklaşımın daha ayrıntılı bir açıklamasını görmeyi çok isterim (yazma izinlerine sahip güvenilir bir kullanıcı grubu oluşturma /usr/local). SO ve diğer siteler üzerinde çok fazla uğraşarak, argümanları görerek: Homebrew’i kullanıcının ana klasörüne taşımak /usr/local, tutmak , sahibini ve / veya grubunu değiştirmek ya /usr/localda olmasın, vb. evrensel olarak kabul edilebilir bir çözüm. Bununla ilgili bir blog postanız veya makaleniz var mı, yoksa daha derin bir açıklama yapabilir misiniz?
Gabriel L.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.