क्या मेरी अनुमति / usr / स्थानीय / सही है?


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 का उपयोग करने का मतलब है। कुछ लोग असहमत हो सकते हैं लेकिन लीड डेवलपर ऐसा करने के लिए कहते हैं।
माइक मैकक्विड

1
थोड़ा अपने गाउन के लिए बेहतर विकल्प sudo chown -R :admin /usr/local:। इस तरह, यह मशीन के किसी भी व्यवस्थापक उपयोगकर्ता के लिए समान काम करेगा। यद्यपि आपको यह sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+सुनिश्चित करने के लिए भी भाग लेना पड़ सकता है कि समूह के पास उपयोगकर्ता के समान लिखने की पहुंच है।
स्लिप डी। थॉम्पसन

12
"मैं होमब्रे का उपयोग करूंगा, यह macports की तुलना में क्लीनर लगता है। ओह, इस बीमार परिभाषित अनुमति गंदगी को देखो। मैं स्टैक ओवरफ्लो में जांच करूंगा। ओह, यहां एक त्वरित हैक है जो यूनिक्स सर्वोत्तम प्रथाओं के खिलाफ जाता है और ओएस अपडेट के खिलाफ क्या प्रयास करता है। लागू करने के लिए। महीने बाद: "अरे, यह मैलवेयर कैसे स्थापित हुआ?"
हमीजेल

मेरे पास इस दृष्टिकोण के साथ समस्या यह है कि इसका मतलब केवल उपयोगकर्ता खाता है जो Homebrew स्थापित करता है वह इसका उपयोग कर सकता है। मेरे पास एक मैक है जिसमें कई खाते हैं जिनका उपयोग मैं घर के प्रोजेक्ट्स (उदाहरण के लिए) से प्रोजेक्ट प्रोजेक्ट्स को अलग रखने के लिए करता हूं। अगर मुझे गलत खाते में लॉग इन किया जाता है तो मैं काढ़ा स्थापित नहीं कर सकता। मैंने रूट का उपयोग करने के खतरों से बचने के लिए यह रास्ता अपनाया है लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है।
शुभ अंक

@MikeMcQuaid मुझे यह दिलचस्प लगता है कि होमब्रे ने आखिरकार इस पर गलती स्वीकार कर ली है और एक या दो सप्ताह पहले जारी नए संस्करण में, डिफ़ॉल्ट रूप से / usr / लोकल पर बहाल कर दिया है
oemb1905

जवाबों:


37

आमतौर पर अनुमतियों को यथासंभव सख्त रखना बेहतर होता है। /usr/localस्वामित्व रखने का rootअर्थ है कि केवल वे प्रक्रियाएँ जो root/ sudo(Apple प्राधिकरण संवाद बॉक्स के माध्यम से व्यवस्थापक उपयोगकर्ता के लिए पूछें) इस क्षेत्र को लिख सकती हैं। इस प्रकार, एक प्रक्रिया डाउनलोड के लिए आपको फ़ाइलों को भ्रष्ट करने से पहले पासवर्ड मांगना पड़ता है।

लेकिन जैसा कि आप कहते हैं, यह नए कार्यक्रमों को कठिन बनाता है।

मैं चलने के साथ ठीक हूं sudo, क्योंकि आप चीजों को चलाने से कम बार स्थापित करते हैं लेकिन आपको यह विश्वास करना होगा कि निर्माण प्रक्रिया को कुछ भी नहीं बदलना चाहिए।

यदि आप ~/usr/localसूदो से बचना चाहते हैं तो मैं होमब्रे को स्थापित करूंगा और वहां के तहत निर्देशिकाओं को शामिल करने के लिए अपना रास्ता, मैनपाट आदि बदल दूंगा।

एक बेहतर तरीका यह है कि किसी अन्य उपयोगकर्ता को बनाया जाए - homebrewऔर उस उपयोगकर्ता के स्वामित्व वाली एक निर्देशिका बनाएं। फिर, वहाँ का उपयोग कर स्थापित करें sudo -U homebrew। अन्य उपयोगकर्ताओं को किसी भी अन्य फ़ाइलों को अधिलेखित करने में सक्षम नहीं होने का लाभ होगा, क्योंकि वे के रूप में नहीं चल रहे हैं root और अन्य प्रोग्राम होमब्रे को प्रभावित नहीं कर सकते हैं। (मैं ध्यान देता हूं कि होमब्रेव एफएक्यू इस नए उपयोगकर्ता को सुझाव देता है कि यदि आप "बहु उपयोगकर्ता वातावरण" में हैं। मैं कहूंगा कि कोई भी यूनिक्स मशीन जो कि macOS सहित एक बहु उपयोगकर्ता वातावरण है)

हालाँकि, जैसा कि Homebrew wiki का कहना है कि व्यंजनों को सभी मामलों का पता नहीं है /usr/localऔर उन्हें चुने गए निर्देशिका के साथ प्रतिस्थापित करता है मुझे संदेह है कि हम साथ फंस गए हैं /usr/local


1
+1 को प्राधिकरणों को सख्त रखने, और बदलने $PATHऔर $MANPATHउपयोगकर्ता निर्देशिकाओं को शामिल करने के लिए। यदि स्थापित प्रोग्राम्स को सिस्टमवाइड इंस्टॉलेशन की आवश्यकता नहीं है, तो यह एक बेहतर विकल्प है।
zneak

3
"अनुमतियों को यथासंभव सख्त रखें" के लिए +1 और स्वीकृत उत्तर। डूइंग brew doctor(नीचे सुझाया गया) मुझे बताया कि मुझे केवल साझा मैन डायरेक्टरीज़ को चॉइस करना है ... मेरे लिए काफी सुरक्षित है।
आगोस

1
एक समझौता समाधान, कम से कम सुरक्षा के लिए देखभाल करने वाले लोगों के लिए जो हर समय व्यवस्थापक उपयोगकर्ताओं के रूप में नहीं चलते हैं, समूह के स्वामित्व और अनुमतियों को बदलना है, ताकि केवल Admins / usr / स्थानीय को लिख सकें। देखिए केनोरब का जवाब।
हमीजेल

2
@ मर्क मुझे यह दिलचस्प लगता है कि होमब्रे ने आखिरकार इस पर गलती स्वीकार कर ली है और एक या दो सप्ताह पहले जारी नए संस्करण में, डिफ़ॉल्ट अनुमतियों को / usr / स्थानीय पर बहाल कर दिया है
oemb1905

48

मैं भी Homebrew का उपयोग करें और यह पूरी तरह से सुरक्षित है की पुष्टि कर सकते हैं। आधिकारिक होमब्रेव FAQ पर संस्थापन पृष्ठ का हवाला देते हुए :

अपने आप को एक एहसान करो और उठाओ /usr/local

  1. यह
    /usr/local/bin पहले से ही आसान है PATH


  2. यदि उनकी निर्भरताएँ / usr या usr / स्थानीय में नहीं हैं, तो बिल्ड स्क्रिप्ट को तोड़ना आसान है । हम इसे Homebrew फ़ार्मुलों के लिए ठीक करते हैं (हालांकि हम हमेशा इसके लिए परीक्षण नहीं करते हैं), लेकिन आप पाएंगे कि कई रूबीगैम और पायथन सेटअप स्क्रिप्ट्स टूट जाती हैं जो हमारे नियंत्रण के बाहर कुछ है।

  3. यह सुरक्षित है कि
    Apple ने POSIX के अनुरूप है और इस निर्देशिका को हमारे लिए छोड़ दिया है। जिसका अर्थ है /usr/localकि डिफ़ॉल्ट रूप से कोई निर्देशिका नहीं है , इसलिए मौजूदा उपकरणों को गड़बड़ाने के बारे में चिंता करने की कोई आवश्यकता नहीं है।

यदि आप ऐसे जवाहरात स्थापित करने की योजना बनाते हैं जो शराब बनाने पर निर्भर हैं तो अपने आप को परेशानी का एक गुच्छा बचाएं और स्थापित करें /usr/local!

हेडर और डाइलीबस के लिए गैर-मानक निर्देशिका में देखने के लिए मणि को बताना तुच्छ नहीं है। यदि आप चुनते हैं /usr/local, तो सब कुछ "बस काम करता है!"

मैं सिर्फ इतना जोड़ूंगा कि चीजों को जड़ के रूप में करना एक बहुत बुरा विचार है , इसलिए chownआईएनजी /usr/localन केवल मुझे उचित लगता है (यह ओएसएक्स पर सिस्टम डायर नहीं है), लेकिन समझदार

आपकी अनुमतियां सही (अभी तक) नहीं हैं। बस आपके द्वारा सूचीबद्ध कमांड चलाएं और आप ठीक रहें।

यदि आपको अन्य समस्याएं याद हैं, तो brew doctorआपकी मदद कर सकता है!


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
bmike

7
गपशप हो गई, जो अफ़सोस की बात है। इसलिए इतिहास को दोहराने के जोखिम में, मैं अपनी टिप्पणी यहां छोड़ दूंगा: ऐसा किया जाता है इसका मतलब यह नहीं है कि यह सुरक्षित है।
हमीजेल

4
चार्ट का सार यह है कि यह वही है जो होमब्रे ने सुझाव दिया है कि इसके गलत होने के क्या कारण हैं
user151019

1
brew doctorबस कमाल है।
उत्कु

5
@Carmine Paolino मुझे यह दिलचस्प लगता है कि Homebrew ने आखिरकार इस पर गलती स्वीकार कर ली है और एक या दो सप्ताह पहले जारी नए संस्करण में, डिफ़ॉल्ट रूप से / usr / स्थानीय
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

फिर जब साथ काम करते हैं brew, तो इसे साथ न चलाएं sudo

जब भी कुछ अनुमति जारी हो, brew doctorसमस्या का निवारण करने के लिए चलाएँ ।


एक वास्तविक, बेहतर-व्यवहार-ईश समाधान देने के लिए +1, भले ही वास्तव में समाप्त न हो। उदाहरण के लिए: BSD स्तर पर व्यवस्थापक समूह में एक उपयोगकर्ता जोड़ें? OS X की व्यवस्थापक उपयोगकर्ताओं की अवधारणा के साथ वह गड़बड़ नहीं होगी?
हमीजेल

रिकॉर्ड के लिए, मैंने इन निर्देशों का पालन किया, लेकिन सीएलआई में किसी भी समूह में किसी को भी जोड़ने के बजाय सिर्फ मेरे मौजूदा ओएस एक्स जीयूआई-निर्मित व्यवस्थापक उपयोगकर्ता का उपयोग किया। यह काम करता है: काढ़ा आदेशों को चलाने में सक्षम होने के लिए, मुझे पहले करना होगा su myAdminUser, और फिर सब कुछ इरादा के अनुसार काम करता है। लेकिन निश्चित रूप से यह समाधान उन लोगों के लिए कोई सुरक्षा नहीं देगा जो वैसे भी पहले से ही हर समय एक व्यवस्थापक उपयोगकर्ता चला रहे हैं।
हमीजेल

यह शायद जाने का सबसे अच्छा तरीका है, मैं @kenorb से सहमत हूं
पिक्सेल 67

7

जो इसके लायक है, उसे /usr/localओएस एक्स द्वारा "सिस्टम" फ़ोल्डर नहीं माना जाता है, और एक ब्रांड के नए हिम तेंदुए पर स्थापित करें कि फ़ोल्डर खाली है।

उस फ़ोल्डर में कोई भी रूट-स्वामित्व वाला सामान sudo make installअन्य सॉफ़्टवेयर पर या अपने पासवर्ड को डबल-क्लिक करने के बाद .pkgउस पर डंप करना चाहता है /usr/local

ओविंग /usr/localने एक वर्ष से अधिक 2 मशीनों पर "मेरे लिए काम किया है"।

एक गोचा यह है कि यदि आपने MySQL (Homebrew का उपयोग नहीं कर रहा है) स्थापित किया है और इसकी फ़ाइलों को चेंज किया है, तो यह संभवतः इसके डेटाबेस को अब नहीं देख पाएगा (इसलिए आपको जो भी उपयोगकर्ता MySQL चल रहा है, उन्हें वापस भेजना होगा। ।)


5
gcc और अन्य विकास उपकरण स्वचालित रूप से / usr / लोकल में दिखते हैं, इसलिए यह सिस्टम को प्रभावित करता है
user151019

11
समस्या यह नहीं है कि यह एक "सिस्टम" फ़ोल्डर है; यह है कि यह एक "व्यवस्थित" फ़ोल्डर है। यहां तक ​​कि अगर वहाँ कुछ भी नहीं है, तब /usr/local/binभी डिफ़ॉल्ट $PATHमूल्य में है, और जो कुछ भी आप वहां डालते हैं वह अन्य उपयोगकर्ताओं द्वारा भी उपयोग किया जा सकता है और उन पर भरोसा किया जाना चाहिए । यदि पूरी /usr/local/निर्देशिका में /usr/local/share/manओपी की स्थापना पर वर्तमान में एक ही अनुमतियाँ हैं , तो कोई भी किसी भी बाइनरी को स्क्रिप्ट के साथ बदल सकता है और बदल सकता है rm -rf ~
zneak

1
बहुत जोखिम भरा: यह संभावना है कि मैं MySQL को जल्दी या बाद में स्थापित करूंगा
Agos

2
@ एगोस: आप हमेशा MySQL को HomeBrew के साथ इंस्टॉल कर सकते हैं, जिस स्थिति में आपको कोई समस्या नहीं होगी :)
कारमाइन

1
@Agos बिल्कुल भी जोखिम भरा नहीं है। यदि आपने Homebrew से पहले MySQL स्थापित किया है तो सावधानी ही लागू होती है। यदि आप इसे बाद में करते हैं तो अनुमतियाँ /usr/localठीक होनी चाहिए। (लेकिन आप शायद वैसे भी Postgres का उपयोग करें। :))
Marnen Laibow-Koser

6

Homebrew में के रूप में 1.0.0:

अब Homebrew के पास स्वामित्व / usr / स्थानीय होने की आवश्यकता नहीं है। यदि आप चाहें तो आप / usr / लोकल को उसके डिफ़ॉल्ट स्वामित्व के साथ वापस कर सकते हैं: sudo chown root: wheel / usr / local


1
मैं वर्तमान में ब्रू का उपयोग करके अपडेट कर रहा हूं brew update, जिसके लिए अभी भी स्वामित्व की आवश्यकता है /usr/local। मैं बाद में अनुमतियों को पुनर्स्थापित करने का प्रयास करूंगा।
जोशुआ पिंटर

यह वास्तव में बहुत अच्छी जानकारी है! मैं Homebrew (<1.0) द्वारा निर्दिष्ट परमिट सेट करता हूं, और अपडेट करने के बाद, इसने उन्हें वापस सेट करने के तरीके के बारे में ये निर्देश दिए।
मोर्टोना 42

0

मुझे लगता है कि उपयोगकर्ताओं के लिए लिखने की अनुमति देना ठीक है /usr/local- आखिरकार, इसका मतलब है कि आप sudoप्रत्येक बिल्ड स्क्रिप्ट पर उपयोग नहीं कर रहे हैं । मैं एक साधारण उपयोगकर्ता के विचार पसंद नहीं है , स्वामित्व वाली /usr/local । मैं स्वयं रूट (या समान) करना पसंद करूंगा /usr/local, लेकिन अनुमतियों को बदल दूंगा ताकि उपयोगकर्ता (या कम से कम कुछ विशेषाधिकार प्राप्त समूह) इसे लिख सकें। यह वैचारिक रूप से सही दृष्टिकोण की तरह लगता है।


7
यहां समस्या यह है कि /usr/local/binअधिकांश उपयोगकर्ताओं के लिए $ PATH के सामने बहुत अच्छी तरह से हो सकता है। निर्देशिका को विश्व-योग्य बनाने से उस रास्ते पर बहुत सारे सुरक्षा छेद खुल जाते हैं।
nohillside

@patrix इसलिए रास्तों को बदलें। :) यदि आपके पास स्क्रिप्ट्स हैं जो अस्पष्ट कमांड पथों के कारण सुरक्षा छेद हैं, तो मैं लिपियों को दोष दूंगा, न कि आपकी अनुमतियाँ - लिपियों में लगाए गए आदेश आमतौर पर इस कारण से पूरी तरह से योग्य होने चाहिए। वैसे भी, कोई बेहतर उपाय नहीं है: या तो आप अपने व्यवस्थापक खाते को एक असुरक्षित umask दें, या आप अपनी सभी बिल्ड स्क्रिप्ट के साथ चलते हैं sudo, या आप कुछ उपयोगकर्ताओं को लिखने की अनुमति देते हैं /usr/local। मैं तीसरे को कम से कम जोखिम भरा होने के नाते ले जाऊंगा ... जब तक कि आप बेहतर तरीके से नहीं जानते।
मार्नेन लाईबो-कोसर

हम्म। इसके बारे में कुछ और सोचकर, शायद एक बेहतर तरीका यह होगा कि होमब्रे क्या करें जो आरवीएम डिफ़ॉल्ट रूप से करता है: सब कुछ ~/brewया कुछ इस तरह से स्थापित करें । हालांकि, समस्या यह है कि रूबी के विपरीत, जो बहुत आत्म-निहित है, बहुत सारे * निक्स उपयोगिताओं में एक-दूसरे को खोजने की उम्मीद है /usr/local...
मार्नेन लाबो-कोसर

3
मैंने यह उल्लेख करने के लिए उपेक्षा की कि मेरा /usr/localविश्व-योग्य नहीं है: बल्कि, मेरे पास एक विश्वसनीय समूह है homebrew(केवल व्यवस्थापक नहीं है) जिसने इसे लिखने की अनुमति दी है ( 0: group:homebrew allow add_file,delete,add_subdirectory,delete_child,file_inherit,directory_inheritपूरी तरह से रॉक जैसी विस्तारित अनुमतियाँ )। यह सबसे अच्छा समझौता है जिसे मैं समझ पाया हूं: sudoबिल्ड स्क्रिप्ट पर नहीं , लेकिन कुछ पर नियंत्रण /usr/local
मार्नेन लाईबो-कोसर

@ MarnenLaibow-Koser मैं इस दृष्टिकोण का अधिक गहराई से स्पष्टीकरण देखना पसंद करूंगा (लेखन अनुमतियों के साथ उपयोगकर्ताओं का एक विश्वसनीय समूह बनाना /usr/local)। एसओ और अन्य साइटों पर बहुत सारे काम करना, तर्कों को फिर से देखना: होमब्रे को उपयोगकर्ता के घर के फ़ोल्डर में ले जाना बनाम में रखना /usr/local, मालिक और / या समूह को बदलना /usr/localया नहीं, और इतने पर ... यह बताना मुश्किल है कि क्या कोई है सार्वभौमिक रूप से स्वीकार्य समाधान। क्या आपके पास इस पर एक ब्लॉग पोस्ट या लेख है, या आप कहीं गहरी व्याख्या दे सकते हैं?
गैब्रियल एल।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.