2011-05-26 14 views
92

मेरे पास एक वेबसाइट है जिसे मैं परिवर्तन ट्रैक करने और साइट अपडेट करने के लिए जिथब (बंद स्रोत) का उपयोग करता हूं। एकमात्र समस्या यह है कि ऐसा लगता है कि .git निर्देशिका वेब के माध्यम से सुलभ है। मैं इसे कैसे रोक सकता हूं और अभी भी गिट का उपयोग करने में सक्षम हूं?मेक .git निर्देशिका वेब पहुंच योग्य

क्या मुझे .htaccess का उपयोग करना चाहिए? क्या मुझे .git की अनुमतियां बदलनी चाहिए?

+0

सर्वरफॉल्ट – tback

+7

पर होना चाहिए सर्वरफॉल्ट पर है: http://serverfault.com/questions/128069/how-do-i-prevent-apache-from-serving-the-git-directory/325841 – scribu

उत्तर

27

.git फ़ोल्डर में एक .htaccess फ़ाइल बनाएं और इस फ़ाइल में निम्न डाल:

Order allow,deny 
Deny from all 
+23

सच है, लेकिन मैं इसे '.git /' निर्देशिका में डालने के खिलाफ अनुशंसा करता हूं क्योंकि यदि आपने कभी भी भंडार को फिर से क्लोन किया है तो यह खो जाएगा। –

+0

यह एक दर्द है यदि आपके पास एक से अधिक .git निर्देशिका है, और यदि आपने कभी निर्देशिका को दोबारा क्लोन किया है तो फिर से किया जाना चाहिए। –

+1

मैंने कोशिश की और पाया कि यह काम करता है लेकिन यह प्रतीत होता है कि कोई भी समाधान जो इस सेटिंग को .git में रखता है/ऊपर वर्णित 2 दोष हैं, पहला सबसे बुरा प्रतीत होता है, और तीसरा शायद सबसे खराब है: उद्धरण (मेक .git निर्देशिका वेब अप्राप्य), जिसमें यह किया गया है कि किसके द्वारा और किसके द्वारा, छोटा है लेकिन अभी भी डेटा की कुंजी है (इसकी सुरक्षा के लिए esp, विश्लेषण सहित, ठीक से पहले और पहले नहीं किया गया) लेकिन .git/यह वास्तव में डेटा का उचित हिस्सा नहीं है (संस्करणित और साझा और अच्छी तरह से संरक्षित समेत) भी बहाल नहीं किया गया ... डेटा के साथ उचित रूप से एक और सर्वोत्तम में .gitignore के अनुरूप .git /। –

32

.htaccess और .git/ फ़ोल्डर पर अनुमतियां काम करेगी। मैं पूर्व की सिफारिश:

<Directory .git> 
    order allow,deny 
    deny from all 
</Directory> 
+0

क्या करने का कोई और तरीका है अपाचे के साथ मुझे सर्वर सेटिंग्स के कारण निर्देश का उपयोग करने की अनुमति नहीं है। –

+0

मेरा उत्तर देखें;) – ThiefMaster

+2

मिलान करने के सभी प्रकार हैं (उदाहरण के लिए, [''] (http://httpd.apache.org/docs/current/mod/core.html#files), [' '] (http://httpd.apache.org/docs/current/mod/core.html#filesmatch))। –

3

mod_rewrite आप दे देंगे वांछित प्रभावित करते हैं:

RewriteEngine on 
RewriteRule .*\.git/.* - [F] 
+7

यह एक सूचना प्रकटीकरण भेद्यता है: यह लोगों के लिए '.git' निर्देशिका के अस्तित्व को निर्धारित करना आसान बनाता है क्योंकि यह नहीं मिला के बजाय एक निषिद्ध कोड देता है। –

+1

यह गिट – Adam

261

इसे अपने वेब सर्वर के रूट पर .htaccess फ़ाइल में रखें:

RedirectMatch 404 /\.git 

यह समाधान मजबूत और सुरक्षित है: यह

आपकी साइट के सभी .git निर्देशिकाओं के लिए
  • काम करता है, भले ही एक से अधिक कर रहे हैं,
  • भी अन्य Git फ़ाइलें छुपाता .gitignore और .gitmodules
  • नए जोड़े गए .git निर्देशिकाओं के लिए भी काम करता है, और
  • इस तथ्य को भी दूर नहीं करता है कि निर्देशिका मौजूद है।
+1

का उपयोग करने के लिए एक भेद्यता नहीं है। यह '.git' फ़ोल्डर पर काम करता है, लेकिन मुझे अभी भी '.gitignore' फ़ाइल खींचने के लिए मिल सकता है। –

+0

मेरा रेगेक्स मेरे परीक्षण में काम करता है, और * [RedirectMatch दस्तावेज़ीकरण] के अनुसार काम करना चाहिए (http: // httpd।apache.org/docs/2.4/mod/mod_alias.html#redirectmatch) चूंकि रेगेक्स को केवल यूआरएल के हिस्से से मेल खाना पड़ेगा, न कि पूर्ण यूआरएल: लिंक [एलियासमैच डॉक्यूमेंटेशन] में "सूक्ष्म अंतर" नोट देखें (http: //httpd.apache.org/docs/2.4/mod/mod_alias.html#aliasmatch)। फिर भी, दस्तावेज़ एक बात है, असली दुनिया एक और है। @artlogic regex पूर्ण यूआरएल से मेल खाता है, इसलिए शायद अपाचे में कुछ संस्करण अंतर हैं या मैं सिर्फ चीजों को गलत तरीके से पढ़ रहा हूं। –

+2

@ बेनेट एमसीएलवे - दस्तावेज़ीकरण पर नज़र डालने के बाद, और कुछ परीक्षण चलाते हुए, ऐसा लगता है कि वाइल्डकार्ड मेरे लिए आवश्यक नहीं हैं। समाधान के लिए धन्यवाद। बहुत अच्छा काम करता है! – artlogic

2

मैं .git निर्देशिका में चारों ओर गंदगी नहीं करना चाहता था और अपाचे 2.2 पर काम करने के Bennett's solution प्राप्त करने में सक्षम नहीं था, लेकिन जोड़ने मेरी <VirtualHost> विन्यास के लिए निम्न काम किया:

RewriteRule ^.*\.git.* - [R=404] 
1

एक अधिक मजबूत और सरल विकल्प .git निर्देशिका की रीड और निष्पादन अनुमति को अक्षम कर देगा।

के बाद से ज्यादातर अपाचे (httpd) एक विशेष उपयोगकर्ता खाते के अंतर्गत चलाता है, उदाहरण के लिए, यह CentOS पर उपयोगकर्ता apache के रूप में चलाता है, जबकि .git निर्देशिका कोई वास्तविक उपयोगकर्ता खाते के अंतर्गत बनाया जाना चाहिए, तो हम बस बदलकर पहुँच ब्लॉक कर सकते हैं अनुमति। इसके अलावा, यह दृष्टिकोण किसी भी नई फ़ाइल को पेश नहीं करता है, न ही गिट कमांड को प्रभावित करता है।

आदेश हो सकता है:

chmod -R o-rx .git 
+0

एक मशीन पर जहां SAs नहीं चाहते हैं। htaccess उपयोग और मुझे अपनी httpd.conf -type फ़ाइलों के साथ गड़बड़ नहीं करना चाहिए, यह सबसे अच्छा समाधान प्रतीत होता है। –

3

मैं अपने .git फ़ोल्डरों को व्यक्तिगत रूप से करने के लिए उपयोग को नियंत्रित करने के साथ सहज नहीं हूँ और .htaccess के बजाय अपाचे config के माध्यम से यह करने के लिए, मुझे उन्हें अधिलेखित को रोकने के लिए चुनते हैं, या एक नया इंस्टॉलेशन इत्यादि भूलना

यहां कुछ विस्तृत निर्देश दिए गए हैं, उम्मीद है कि वे मदद करेंगे। मैं उबंटू 16.10 का उपयोग कर रहा हूं।

  1. सबसे पहले जांचें कि क्या होता है यदि आप किसी ब्राउज़र में .git फ़ोल्डर पर नेविगेट करते हैं। मेरे मामले में मुझे एक निर्देशिका सूची के साथ प्रस्तुत किया गया था। यदि आप देख रहे हैं कि आपको क्या नहीं देखना चाहिए (यानी आपको 404 नहीं मिल रहे हैं), तो निम्न कार्य करें। कॉन्फ़िग फ़ाइल में कहीं निम्नलिखित
  2. उपयोग apache2ctl वी /etc/apache2/apache2.conf
  3. मेरे मामले $ sudo नैनो में HTTPD_ROOT और SERVER_CONFIG_FILE
  4. उपयोग यह आपके अपाचे config संपादित करने के लिए, प्राप्त करने के लिए जोड़ें: RedirectMatch 404 /.git
  5. पुनः प्रारंभ अपाचे: $ sudo सेवा apache2 पुनः आरंभ
  6. यदि आप फिर से
  7. फ़ोल्डर में नेविगेट अब आप एक 404 हो जाना चाहिए मैं .gitignore के साथ इस की कोशिश की और यह भी एक 404
मिला
संबंधित मुद्दे