สิทธิ์ของฉันสำหรับ / usr / local / ถูกต้อง?


88

ฉันใช้HomeBrewสำหรับความต้องการพอร์ตของฉัน (ดูเหมือนว่า“ สะอาดกว่า” มากกว่า MacPorts)

ฉันสามารถติดตั้งได้โดยไม่ต้องติดตั้งsudo(ซึ่งยอดเยี่ยม) แต่ขั้นตอนการเชื่อมโยงคนดูเหมือนจะต้องการ ( /usr/local/share/man/man3เป็นของroot) คู่มือผมพบแสดงให้เห็นฉันซ้ำด้วยการทำ
chown /usr/local

sudo chown -R `whoami` /usr/local

ปลอดภัยหรือไม่? หรือว่าเป็นความคิดที่แย่™

ด้วย: สิทธิ์ของฉันถูกต้องหรือไม่

$ 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 บางคนอาจไม่เห็นด้วย แต่ผู้พัฒนานำบอกว่าทำสิ่งนั้น
Mike McQuaid

1
ทางเลือกที่ดีกว่าเล็กน้อยสำหรับ chown ของคุณ: sudo chown -R :admin /usr/local. วิธีนี้จะทำงานเหมือนกันสำหรับผู้ใช้ที่เป็นผู้ดูแลระบบของเครื่อง แม้ว่าคุณอาจจำเป็นต้องเรียกใช้sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+เพื่อให้แน่ใจว่ากลุ่มมีการเข้าถึงการเขียนเช่นเดียวกับผู้ใช้
Slipp D. Thompson

12
"ฉันจะใช้โฮมบรูว์, มันให้ความรู้สึกสะอาดกว่า macports โอ้ดูที่ระเบียบการอนุญาตที่ไม่ถูกต้องนี้ฉันจะตรวจสอบใน Stack Overflow โอ้นี่คือแฮ็คด่วนที่ต่อต้านการปฏิบัติที่ดีที่สุดของ Unix และต่อต้านการอัปเดตระบบปฏิบัติการ เพื่อบังคับใช้สมบูรณ์แบบ! " เดือนต่อมา: "เฮ้ติดตั้งมัลแวร์นี้อย่างไร"
hmijail

ปัญหาที่ฉันมีด้วยวิธีนี้คือมันหมายถึงเฉพาะบัญชีผู้ใช้ที่ติดตั้ง Homebrew สามารถใช้งานได้ ฉันมี Mac ที่มีหลายบัญชีซึ่งฉันใช้เพื่อแยกโครงการทำงานออกจากโครงการบ้าน (ตัวอย่าง) หากฉันลงชื่อเข้าใช้บัญชีผิดฉันไม่สามารถใช้การติดตั้งชงได้ ฉันใช้เส้นทางนี้เพื่อหลีกเลี่ยงอันตรายจากการใช้รูท แต่ฉันไม่มั่นใจว่าเป็นวิธีที่ดีที่สุด
ศุภนิมิต

@MikeMcQuaid ฉันคิดว่ามันน่าสนใจที่ Homebrew ได้ยอมรับข้อผิดพลาดในที่สุดและในเวอร์ชันใหม่ที่เผยแพร่เมื่อหนึ่งหรือสองสัปดาห์ที่ผ่านมาได้คืนค่าสิทธิ์เริ่มต้นเป็น / usr / local
oemb1905

คำตอบ:


37

โดยปกติแล้วจะเป็นการดีกว่าที่จะให้สิทธิ์อย่างเข้มงวดเท่าที่จะทำได้ การรักษาความ/usr/localเป็นเจ้าของด้วยrootวิธีการเฉพาะกระบวนการที่ทำงานเป็นroot/ sudo(หรือขอผู้ใช้ผู้ดูแลระบบผ่านทางกล่องโต้ตอบการอนุญาตของ Apple) สามารถเขียนลงในพื้นที่นี้ ดังนั้นการดาวน์โหลดโปรเซสจะต้องถามรหัสผ่านก่อนที่จะทำให้ไฟล์เสียหาย

แต่อย่างที่คุณพูดมันทำให้การเพิ่มโปรแกรมใหม่ยากขึ้น

ฉันตกลงกับการรันsudoเนื่องจากคุณติดตั้งสิ่งต่าง ๆ น้อยกว่าการรัน แต่คุณต้องมั่นใจว่ากระบวนการสร้างไม่เปลี่ยนแปลงสิ่งที่ควรทำ

หากคุณต้องการหลีกเลี่ยง sudo ฉันจะติดตั้ง Homebrew เป็น~/usr/localและเปลี่ยนเส้นทางของคุณ manpath ฯลฯ เพื่อรวมไดเรกทอรีภายใต้มี

วิธีที่ดีกว่าคือการสร้างผู้ใช้รายอื่นพูดhomebrewและสร้างไดเรกทอรีที่ผู้ใช้รายนั้นเป็นเจ้าของ sudo -U homebrewจากนั้นติดตั้งมีการใช้ ผู้ใช้รายอื่นจะได้รับประโยชน์จากการไม่สามารถเขียนทับไฟล์อื่น ๆ ได้เพราะพวกเขาไม่ได้ทำงานในขณะที่root โปรแกรมอื่นไม่สามารถส่งผลกระทบต่อโฮมบรูว์ (ฉันทราบว่าHomebrew FAQไม่แนะนำผู้ใช้ใหม่นี้ถ้าคุณอยู่ใน "ผู้ใช้หลายสภาพแวดล้อม" ฉันจะบอกว่าเครื่อง Unix ใด ๆ รวมถึง macOS เป็นสภาพแวดล้อมที่ผู้ใช้หลายคน)

อย่างไรก็ตามในขณะที่วิกิพีเดีย Homebrew กล่าวว่าสูตรไม่พบทุกกรณีและแทนที่ด้วยไดเรกทอรีที่เลือกฉันสงสัยว่าเราจะติดอยู่กับ/usr/local/usr/local


1
+1 สำหรับการให้สิทธิ์อย่างเข้มงวดและการแก้ไข$PATHและ$MANPATHรวมไดเรกทอรีผู้ใช้ หากโปรแกรมที่ติดตั้งไม่ต้องการการติดตั้งทั่วทั้งระบบมันเป็นทางเลือกที่ดีกว่ามาก
zneak

3
+1 และคำตอบที่ได้รับการยอมรับสำหรับ "ให้สิทธิ์เข้มงวดเท่าที่จะทำได้" การทำbrew doctor(แนะนำด้านล่าง) บอกฉันว่าฉันต้อง chown ไดเรกทอรีคนที่ใช้ร่วมกันเท่านั้น ... ปลอดภัยพอสำหรับฉัน
Agos

1
วิธีการประนีประนอมอย่างน้อยสำหรับผู้ที่ดูแลความปลอดภัยเพียงพอที่จะไม่ทำงานในฐานะผู้ใช้งานผู้ดูแลระบบตลอดเวลาคือการเปลี่ยนความเป็นเจ้าของกลุ่มและการอนุญาตดังนั้นผู้ดูแลระบบเท่านั้นที่สามารถเขียนถึง / usr / local ดูคำตอบของ kenorb
hmijail

2
@ Mark ฉันพบว่าน่าสนใจที่ Homebrew ได้ยอมรับข้อผิดพลาดในที่สุดและในเวอร์ชันใหม่ที่เผยแพร่ในสัปดาห์หรือสองสัปดาห์ที่ผ่านมาได้คืนค่าการอนุญาตเริ่มต้นเป็น / usr / local
oemb1905

48

ฉันใช้ Homebrew ด้วยและสามารถยืนยันได้ว่าปลอดภัยโดยสิ้นเชิง การอ้างถึงหน้าการติดตั้งในคำถามที่พบบ่อย Homebrewอย่างเป็นทางการ:

ทำตัวเองชอบและเลือก /usr/local

  1. มันง่ายกว่าที่
    /usr/local/binมีอยู่ในคุณPATHแล้ว


  2. การสร้างสคริปต์แบบตันตันจะง่ายกว่าหากการพึ่งพาไม่ได้อยู่ใน / usr หรือ / usr / local เราแก้ไขสิ่งนี้สำหรับสูตร Homebrew (แม้ว่าเราจะไม่ทดสอบเสมอไป) แต่คุณจะพบว่าสคริปต์การตั้งค่า RubyGems และ Python จำนวนมากแตกซึ่งเป็นสิ่งที่อยู่นอกเหนือการควบคุมของเรา

  3. ปลอดภัยที่
    Apple ได้ปฏิบัติตาม POSIX และออกจากไดเรกทอรีนี้ให้เรา ซึ่งหมายความว่าไม่มี/usr/localไดเรกทอรีตามค่าเริ่มต้นดังนั้นจึงไม่จำเป็นต้องกังวลเกี่ยวกับการแยกแยะเครื่องมือที่มีอยู่

หากคุณวางแผนที่จะติดตั้งอัญมณีที่ขึ้นอยู่กับ brews แล้วช่วยตัวเองให้ยุ่งยากและติดตั้ง/usr/local!

มันไม่สำคัญที่จะบอก gem ให้ค้นหาในไดเรกทอรีที่ไม่ได้มาตรฐานสำหรับส่วนหัวและ dylibs หากคุณเลือก/usr/localทุกอย่าง“ ใช้งานได้!”

ฉันเพิ่งจะเพิ่มที่ทำสิ่งที่เป็นรากเป็นความคิดที่ไม่ดีมากดังนั้นchownไอเอ็นจี/usr/localไม่เพียง แต่ดูเหมือนว่าเหมาะสมกับผม (มันไม่ได้เป็นผบระบบใน OSX) แต่มีสติ

การอนุญาตของคุณไม่ถูกต้อง (ยัง) เพียงแค่เรียกใช้คำสั่งที่คุณแสดงรายการไว้

หากคุณมีปัญหาอื่น ๆ จำได้ว่าbrew doctorสามารถช่วยคุณได้!


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
bmike

7
การแชทหายไปซึ่งน่าเสียดาย ดังนั้นในความเสี่ยงของการทำซ้ำประวัติศาสตร์ฉันจะแสดงความคิดเห็นของฉันที่นี่: สิ่งนี้เสร็จแล้วไม่ได้หมายความว่าปลอดภัย
hmijail

4
ส่วนสำคัญของแผนภูมิคือแม้ว่านี่คือสิ่งที่ Homebrew แสดงให้เห็นว่ามีเหตุผลว่าทำไมมันผิด
user151019

1
brew doctorมันยอดเยี่ยมมาก
Utku

5
@Carmine Paolino ฉันคิดว่ามันน่าสนใจที่ Homebrew ได้ยอมรับข้อผิดพลาดในที่สุดและในเวอร์ชันใหม่ที่เผยแพร่เมื่อหนึ่งหรือสองสัปดาห์ที่ผ่านมาได้คืนค่าสิทธิ์เริ่มต้นเป็น / usr / local
oemb1905

9

หากคุณใช้ Homebrew คุณควรให้สิทธิ์การเขียนแก่กลุ่มเฉพาะ ( adminหรือstaff) เพื่อให้สามารถแชร์ไฟล์ระหว่างผู้ใช้ที่อยู่ในกลุ่มนั้น

ตัวอย่างเช่น:

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

จากนั้นกำหนดให้ผู้ใช้ที่ควรมีการเข้าถึงbrewคำสั่งไปยังกลุ่มที่ (ตรวจสอบกลุ่มของคุณผ่าน: id -Gn)

จากนั้นเมื่อทำงานกับไม่ทำงานด้วยbrewsudo

เมื่อยังคงมีปัญหาการอนุญาตให้เรียกใช้brew doctorเพื่อแก้ไขปัญหา


+1 สำหรับการให้โซลูชันที่แท้จริงและมีพฤติกรรมดีกว่าแม้ว่าจะยังไม่เสร็จก็ตาม ตัวอย่างเช่น: เพิ่มผู้ใช้ในกลุ่มผู้ดูแลระบบที่ระดับ BSD หรือไม่ จะไม่ยุ่งกับแนวคิดของ OS X ของผู้ใช้ Admin หรือไม่?
hmijail

สำหรับบันทึกนี้ฉันทำตามคำแนะนำเหล่านี้ แต่ใช้ผู้ใช้ Admin X GUI ที่ทำอยู่เดิมของฉันแทนการเพิ่มใครลงในกลุ่มใด ๆ ใน CLI ใช้งานได้: เพื่อให้สามารถเรียกใช้คำสั่งชงฉันต้องทำก่อนsu myAdminUserแล้วทุกอย่างทำงานตามที่ตั้งใจ แต่แน่นอนว่าโซลูชันนี้จะไม่ให้ความปลอดภัยแก่ผู้ที่ใช้งานผู้ดูแลระบบอยู่ตลอดเวลา
hmijail

นี่เป็นวิธีที่ดีที่สุดที่จะไปฉันเห็นด้วยกับ @kenorb
pixel 67

7

สำหรับสิ่งที่คุ้มค่า/usr/localไม่ถือว่าเป็นโฟลเดอร์ "ระบบ" โดย OS X และบน Snow Leopard ใหม่เอี่ยมติดตั้งโฟลเดอร์นั้นว่างเปล่า

สิ่งใดที่เป็นเจ้าของรากในโฟลเดอร์นั้นเป็นผลมาจากsudo make installซอฟแวร์อื่น ๆ หรือให้รหัสผ่านของคุณหลังจากการดับเบิลคลิกบนที่ต้องการที่จะถ่ายโอนข้อมูลสิ่งที่เข้ามาใน.pkg/usr/local

การเป็นเจ้าของ/usr/localได้ "ทำงานให้ฉัน" ใน 2 เครื่องมานานกว่าหนึ่งปี

หนึ่ง gotcha คือถ้าคุณติดตั้ง MySQL (ไม่ได้ใช้ Homebrew) และ chown ไฟล์มันก็อาจจะไม่สามารถดูฐานข้อมูลของมันได้อีกต่อไป (ดังนั้นคุณต้อง chown พวกเขากลับไปยังสิ่งที่ผู้ใช้ MySQL กำลังทำงานอยู่ .)


5
gcc และเครื่องมือในการพัฒนาอื่น ๆ จะทำการค้นหาโดยอัตโนมัติใน / usr / local ดังนั้นมันจะส่งผลกระทบต่อระบบ
user151019

11
ปัญหาไม่ใช่ว่ามันเป็นโฟลเดอร์ "ระบบ" มันเป็นโฟลเดอร์ "systemwide" แม้ว่าจะมีอะไรที่นั่น/usr/local/binยังคงอยู่ในการเริ่มต้น$PATHค่าและสิ่งที่คุณใส่มีสามารถนำมาใช้โดยผู้ใช้อื่น ๆ มากเกินไปและควรจะเชื่อถือได้ หากทั้ง/usr/local/ไดเรกทอรีมีสิทธิ์ที่เหมือนกัน/usr/local/share/manในขณะนี้มีการตั้งค่าของ OP ทุกคนสามารถไปเปลี่ยนไบนารีใด ๆ rm -rf ~กับสคริปต์ที่ไม่ได้
zneak

1
มีความเสี่ยงด้วย: เป็นไปได้ว่าฉันจะติดตั้ง MySQL ไม่ช้าก็เร็ว
Agos

2
@Agos: คุณสามารถติดตั้ง MySQL ด้วย Homebrew ซึ่งในกรณีนี้คุณจะไม่ได้มีปัญหาใด ๆ :)
สีแดง Paolino

1
@Agos ไม่เสี่ยงเลย ข้อควรระวังจะมีผลเฉพาะเมื่อคุณติดตั้ง MySQL ก่อน Homebrew ถ้าคุณทำมันหลังจากนั้นการอนุญาต/usr/localควรจะดี (แต่คุณอาจใช้ Postgres อยู่ดี :))
Marnen Laibow-Koser

6

เช่นเดียวกับใน Homebrew 1.0.0:

Homebrew ไม่จำเป็นต้องเป็นเจ้าของ / usr / local อีกต่อไป หากคุณต้องการคุณสามารถคืนค่า / usr / local เป็นค่าเริ่มต้นด้วย: sudo chown root: wheel / usr / local


1
ฉันกำลังอัปเดต Brew ใช้ซึ่งยังคงต้องเป็นเจ้าของbrew update /usr/localฉันจะลองกู้คืนสิทธิ์หลังจากนั้น
Joshua Pinter

นี่เป็นข้อมูลที่ยอดเยี่ยมจริงๆ! ฉันตั้งค่า perms ตามที่ระบุโดย Homebrew (<1.0) และหลังจากการอัปเดตมันให้คำแนะนำเหล่านี้เกี่ยวกับวิธีตั้งค่ากลับคืน
mortona42

0

ฉันคิดว่ามันตกลงสำหรับผู้ใช้ที่จะมีสิทธิ์ในการเขียนไป/usr/local- หลังจากทั้งหมดนั่นหมายความว่าคุณไม่ได้ใช้sudoในทุกสร้างสคริปต์ ฉันไม่ชอบความคิดของผู้ใช้สามัญเป็นเจ้าของ /usr/localฉันต้องการมีรูท (หรือคล้ายกัน) เป็นเจ้าของ/usr/localแต่เปลี่ยนสิทธิ์เพื่อให้ผู้ใช้ (หรือกลุ่มที่มีสิทธิ์อย่างน้อย) สามารถเขียนลงไปได้ ดูเหมือนว่าวิธีการที่ถูกต้องตามแนวคิด


7
ปัญหาที่นี่คือที่/usr/local/binอาจเป็นที่ด้านหน้าของ $ PATH สำหรับผู้ใช้ส่วนใหญ่ การทำให้ไดเรกทอรีที่เขียนได้ทั่วโลกนั้นเปิดช่องโหว่ด้านความปลอดภัยจำนวนมาก
nohillside

@patrix ดังนั้นเปลี่ยนเส้นทาง :) หากคุณมีสคริปต์ที่มีช่องโหว่ด้านความปลอดภัยเนื่องจากพา ธ คำสั่งที่คลุมเครือฉันจะตำหนิสคริปต์ไม่ใช่สิทธิ์ของคุณ - คำสั่งที่เรียกใช้ในสคริปต์มักจะมีคุณสมบัติครบถ้วนด้วยเหตุผลนี้ อย่างไรก็ตามไม่มีทางออกที่ดีกว่า: ทั้งคุณให้ผู้ดูแลระบบบัญชี umask ที่ไม่ปลอดภัยหรือคุณทำงานได้ทั้งการสร้างสคริปของคุณด้วยหรือคุณจะให้ผู้ใช้บางคนเขียนสิทธิ์ในการsudo /usr/localฉันจะเอาสิ่งที่สามว่ามีความเสี่ยงน้อยที่สุด ... เว้นแต่คุณจะรู้วิธีที่ดีกว่า
Marnen Laibow-Koser

อืมมม เมื่อคิดถึงเรื่องนี้มากกว่านี้อาจเป็นวิธีที่ดีกว่าที่จะให้ Homebrew ทำสิ่งที่ RVM ทำตามค่าเริ่มต้น: ติดตั้งทุกอย่างลงใน~/brewหรือบางอย่าง แม้ว่าปัญหาจะแตกต่างจาก Ruby ซึ่งมีอยู่ในตัวเองโปรแกรมอรรถประโยชน์ * nix จำนวนมากคาดหวังว่าจะพบกันใน/usr/local...
Marnen Laibow-Koser

3
ฉันละเลยที่จะพูดถึงว่าฉัน/usr/localไม่สามารถเขียนได้ทั่วโลก: แต่ฉันมีกลุ่มที่เชื่อถือได้homebrew(ไม่ใช่แค่ผู้ดูแลระบบ) ที่มีสิทธิ์ในการเขียนลงไป (สิทธิ์เพิ่มเติมเช่น0: group:homebrew allow add_file,delete,add_subdirectory,delete_child,file_inherit,directory_inheritหินทั้งหมด) นี่คือการประนีประนอมที่ดีที่สุดของฉันได้รับสามารถที่จะคิดออก: ไม่sudoเกี่ยวกับการสร้างสคริปต์ แต่บาง/usr/localการควบคุมมากกว่า
Marnen Laibow-Koser

@ MarnenLaibow-Koser ฉันชอบที่จะเห็นคำอธิบายในเชิงลึกมากขึ้นของวิธีการนี้ (สร้างกลุ่มผู้ใช้ที่เชื่อถือได้ที่มีสิทธิ์ในการเขียนไป/usr/local) ทำการสืบค้นจำนวนมากบน SO และไซต์อื่น ๆ โดยดูข้อโต้แย้งเรื่อง: ย้าย Homebrew ไปยังโฟลเดอร์หลักของผู้ใช้เทียบกับการคงไว้/usr/localการเปลี่ยนเจ้าของและ / หรือกลุ่ม/usr/localหรือไม่และอื่น ๆ ... เป็นการยากที่จะบอกว่ามีหรือไม่ ทางออกที่เป็นที่ยอมรับในระดับสากล คุณมีการโพสต์บล็อกหรือบทความเกี่ยวกับเรื่องนี้หรือคุณสามารถให้คำอธิบายที่ลึกลงไปที่ไหนสักแห่ง?
Gabriel L.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.