बनाओ .git निर्देशिका वेब दुर्गम


129

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

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



जवाबों:


39

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

Order allow,deny
Deny from all

लेकिन ध्यान दें, यदि आप कभी भी रिपॉजिटरी को फिर से क्लोन करते हैं तो यह खो जाएगा


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

यदि आपके पास एक से अधिक .ITI निर्देशिका है, तो यह एक दर्द है और यदि आपने कभी निर्देशिका को पुन: क्लोन किया है, तो इसे फिर से किया जाना चाहिए।
बेनेट मैकलेवे जुले

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

3
यह क्यों स्वीकार किया गया उत्तर है और बेनेट का नहीं है? इसे हल करने के लिए उनकी सरल और प्रभावी तकनीक है।
जोश फ्रैंकेल

1
सबसे अधिक संभावना है क्योंकि ओपी ने एक दूसरे को पोस्ट करने से दो साल पहले यह स्वीकार किया था;)
चोरमस्टर

379

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

RedirectMatch 404 /\.git

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

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

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

मेरा regex मेरे परीक्षण में काम करता है, और रीडायरेक्ट दस्तावेज़ के अनुसार काम करना चाहिए क्योंकि regex को केवल URL के भाग से मेल खाना है, पूर्ण URL नहीं: लिंक किए गए AliasMatch दस्तावेज़ में "सूक्ष्म अंतर" नोट देखें । फिर भी, डॉक्स एक चीज है, वास्तविक दुनिया एक और है। @Artlogic regex पूर्ण URL से मेल खाता है, इसलिए हो सकता है कि Apache में कुछ संस्करण अंतर हों या मैं केवल चीजों को गलत बता रहा हूं।
बेनेट मैकलेवे

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

Apache2 डॉक्स के अनुसार आप इसे अन्य server config, virtual host, directory, .htaccess
कॉन्फिगर

मैं अभिव्यक्ति के अंत में "*। *" जोड़ने का सुझाव भी दूंगा, ताकि कोई फ़ाइल / फ़ोल्डर के तहत .it / तक नहीं पहुँचा जा सके ->RedirectMatch 404 /\.git.*
दिमित्री Hautot

33

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

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

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

2
मिलान के सभी प्रकार हैं (जैसे <Files>, <FilesMatch>)।
जेक व्हार्टन

4
यह उत्तर गलत है - निर्देशिका को केवल .htaccess फ़ाइलों में अनुमति नहीं है। यह सर्वर सेटिंग्स पर निर्भर नहीं करता है।
डबल मार्क

2
NI8VDY = 1 में से 1 बार असफल होने पर मैंने इसे आज़माया है: ड्रीमहोस्ट साझा की गई होस्टिंग पर, मैंने इसे वेबसाइट के रूट -htaccess में डाल दिया, फिर http: वेबसाइट रूट में सर्वर लॉग्स एरर कोट (.. <डायरेक्टरी की अनुमति नहीं है)। 2 टिप्पणीकार इस समस्या के बारे में पहले से ही सतर्क हैं और अंतिम कहते हैं कि उद्धरण (निर्देशिका को केवल .htaccess फ़ाइलों में अनुमति नहीं है) और आधिकारिक निर्देशिका डॉक्स httpd.apache.org/docs/current/mod/core.html#directory कह उद्धरण (संदर्भ) सर्वर देखें विन्यास, आभासी मेजबान) और ऐसा नहीं है। लेकिन इसके पास 26 वोट हैं, इसलिए इसे खोजने के लिए .htaccess, PLS UPDATE THE SOLUTION की व्याख्या कैसे करें।
डेस्टिनी आर्किटेक्ट

@DestinyArchitect से सहमत हैं - डाउनवोट के लिए क्षमा करें, लेकिन यह भ्रामक है।
kael

7

मैं .gitनिर्देशिका में इधर-उधर नहीं घुलना चाहता था और अपाचे 2.2 पर काम करने के लिए बेनेट का समाधान प्राप्त करने में सक्षम नहीं था , लेकिन मेरे <VirtualHost>विन्यास में निम्नलिखित को जोड़ने का काम किया:

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

5

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

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

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

4

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

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

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

chmod -R o-rx .git

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

1
स्पष्ट नकारात्मक पक्ष यह है कि यदि आप पुन: क्लोन करते हैं, तो आपको फिर से चलाने के लिए याद रखना होगा chmod
लॉरी नूरमी

3

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

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

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

2
यह git का उपयोग करने के लिए कमजोर नहीं है
एडम

1

.htaccessअधिकांश उत्तरों जैसे नियमों के साथ खिलवाड़ करने के बजाय , सीधे .git/वेबरोट के ऊपर निर्देशिका क्यों नहीं डालनी चाहिए?

मेरे सेटअप में, मेरी .gitनिर्देशिका आमतौर पर कुछ इस तरह रहती है:

/home/web/project_name/.git/

मेरा वास्तविक कोड में रहता है

/home/web/project_name/www_root/

के बाद से मेरी वेब रूट (Apache या Nginx पर परिभाषित के रूप में .. मैं बाद पसंद करते हैं) /home/web/project_name/www_root/वहाँ कोई रास्ता नहीं है.git है जिससे वेब से निर्देशिका "वेब" तक पहुंच सके, क्योंकि यह वेबरोट की तुलना में "उच्च" है।


इसलिए public_html रेपो वर्किंग डीआईआर की एक उपखंड है ?? दिलचस्प लगता है
हेडन थ्रिंग

नहीं, यह एक उपनिर्देशिका नहीं है। वे मेरी मुख्य परियोजना निर्देशिका के भीतर दोनों "भाई बहन" हैं। मेरी project_nameनिर्देशिका में दो उपनिर्देशिकाएँ हैं: www_rootजहाँ विज़िटर द्वारा मेरी साइट को ब्राउज़ करने पर फ़ाइलें वास्तव में सेवा करती हैं, और .gitजहाँ रेपो है। रेपो अपडेट www_rootऔर इसकी सामग्री से खींचना । बात यह है कि, चूंकि .gitनिर्देशिका मेरे सामने वाले नियंत्रक से "ऊपर" है, यह वेब के माध्यम से दुर्गम है।
जेवियर लारोलेट

मुझे लगता है कि मेरा यही मतलब है, इसलिए आपके पास / घर / उपयोगकर्ता / public_html / और /home/user/.git
हेडन थ्रिंग

वाह जो इतना आसान और सरल उपाय है उसका जीनियस, (यह नहीं कि अपाचे सुरक्षा में एक सर्वर चौड़ा ब्लॉक बनाना ।conf कठिन है) केवल एक चीज देखने के लिए है यदि आपकी होस्टिंग में publlic_html पर कुछ अजीब स्वामित्व / अनुमतियाँ सेटिंग्स हैं, तो बदल सकता है।
हेडन थ्रिंग

1
बहुत ही सही ... मेरे पास वास्तव में अन्य "सिबलिंग डाइरेक्टरीज़" हैं, जो अन्य उद्देश्यों के लिए हैं जो वेब से दुर्गम हैं, जो मुझे रात में थोड़ा बेहतर सोने की अनुमति देता है :)
जेवियर लारोउलेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.