मैं .ache निर्देशिका की सेवा करने से अपाचे को कैसे रोकूँ?


74

मैंने परीक्षण के लिए वेबसाइटों की तैनाती के लिए git का उपयोग करना शुरू कर दिया है। मैं .ache निर्देशिका सामग्री की सेवा करने से अपाचे को कैसे रोकूँ?

मैंने कोशिश की

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>

कोई सफलता नहीं है।

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


3
एक बार जब आप अपाचे को निर्देशिका को परोसने से रोकते हैं, तो आपको "इंडेक्सइग्नोर .गित" के साथ .IT निर्देशिका को छिपाने की आवश्यकता हो सकती है यदि आपके पास अपनी निर्देशिका में अनुक्रमणिका सक्षम है।
रयान

जवाबों:


55

यह काम नहीं कर रहा है क्योंकि आपके पास नियम में 'svn' है और 'git' नहीं है। आपको बस इतना करना है कि 'svn' को 'git' से बदलना है।

<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>

1
जब मैं एक .htaccess बनाता हूं जिसमें केवल आपका कोड होता है, तो मुझे त्रुटि मिलती है: "<DirectoryMatch यहां अनुमति नहीं है"
शॉन

2
इसे अपाचे कॉन्फिडेंस में होना है। देखें: httpd.apache.org/docs/1.3/mod/core.html#directorymatch
पाप करना

2
सबसे सरल <DirectoryMatch /\.git/>
रीगेक्स

सही समाधान के लिए यह जाँचें magento.stackexchange.com/questions/202840/…
प्रतीक

1, सिंगिंग / ओपी के लिए धन्यवाद। ध्यान दें कि अपाचे 2.4 में "ऑर्डर, इनकार" और अगली पंक्ति को "सभी की आवश्यकता से इनकार" द्वारा प्रतिस्थापित किया गया है। इसके अलावा, ऊपर "अपाचे कॉन्फ" नामक फ़ाइल को "httpd.conf" नाम से कई इंस्टॉलेशन --- सिंघ्पिंग का उपयोग सिर्फ एक आकस्मिक कथन था, इसलिए उस शाब्दिक नाम की खोज न करें (शायद बिना कहे चले जाएं, लेकिन आप कभी नहीं जानते हैं लोग इसे कैसे पढ़ सकते हैं)।
केविन_किंसे

139

यह अन्य उत्तर के रूप में एक ही प्रभाव है, लेकिन बहुत सरल है:

RedirectMatch 404 /\.git

यह .htaccessआपके सर्वर कॉन्फ़िगरेशन फ़ाइल में जा सकता है। यह किसी भी फ़ाइल या निर्देशिका को छुपाता है जिसका नाम 404 को वापस करके शुरू होता है .git(उदाहरण के लिए एक .gitनिर्देशिका या .gitignoreफ़ाइल)। इसलिए न केवल आपके Git रेपो की सामग्री छिपी हुई है, इसका अस्तित्व भी छिपा हुआ है।


2
मुझे वास्तव में यह समाधान पसंद है। यह सरल और सुरुचिपूर्ण है।
शॉन

2
इसे रूट htdocs डायरेक्टरी में डालने से एक वैश्विक काम होता है।
14:27

4
इस विकल्प को सबसे अच्छे से प्यार करें। मुझे लगता है कि /.it या /.itignore जैसे अनुरोधों के लिए 404 वापस करना अधिक सुरक्षित है ताकि तथ्य यह है कि गिट का इस्तेमाल किया जा रहा है, बाहर से निर्धारित नहीं किया जा सकता है।
एज्रा फ्री

2
ध्यान रखें कि यदि आपके पास निर्देशिका लिस्टिंग सक्षम है, तो .gitफ़ोल्डर्स अभी भी दिखाई देंगे, लेकिन जब आप उन्हें एक्सेस करने का प्रयास करेंगे तो आपको 404 मिलेंगे।
एंडी मैडेज

1
@BennettMcElwee yep ने सहमति व्यक्त की, प्रोडक्शन सर्वर पर विश्व स्तर पर डायरेक्ट्री लिस्टिंग सक्षम होने का लगभग एक अच्छा कारण नहीं है। यह सोचा था कि यह एक उल्लेख योग्य है, जब यह किसी को पकड़ता है।
एंडी मैज

13

यदि आप .htaccess फाइल का उपयोग नहीं करते हैं, लेकिन इसके बजाय .etc/apache2/httpd.conf (या जो भी आपके सर्वर की मास्टर गोपनीय फ़ाइल है) का उपयोग करना चाहते हैं। मैंने पाया कि मास्टर कॉन्फ सेटिंग के लिए ऊपर दिया गया उत्तर gitignore फाइल को छिपा नहीं रहा है।

# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
  Order deny,allow
  Deny from all
</Directorymatch>
<Files ~ "^\.git">
    Order allow,deny
    Deny from all 
</Files>

1
www.example.com/.git/configApache httpd 2.4.27 में फ़ाइल को ब्लॉक न करें।
इल्हान

12

यदि आप एक साझा होस्टिंग सेवा पर हैं और आपके पास apache.conf तक पहुँच नहीं है , तो भी आप इसे अपने .htaccess फ़ाइल में कर सकते हैं, जैसे:

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]

धन्यवाद यह मेरे लिए एक साझा होस्टिंग स्थिति में काम किया जहां शीर्ष उत्तर नहीं था
प्लेटो

6
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+

यह काम करता है .htaccess, कोई http.confपहुँच की आवश्यकता नहीं है। इसे फिर से लिखने के नियमों के रूप में शामिल करें। Rewrite Onजरूरत पड़ने पर प्रेप करें ।

एक सुरक्षा कोण से, मैं एक 403 से अधिक बोगस 404 पसंद करता हूं, जो हमलावर के लिए अधिक जानकारीपूर्ण है। सुनिश्चित करने के लिए दो में से एक टिप्पणी करें, दूसरे आपके लिए भी काम करते हैं।

Btw, अच्छे बदलाव हैं, दो के लिए आपका लिथम टेस्ट है:

http://localhost/.gitignore
http://localhost/.git/HEAD

दोनों नियम क्यों हैं? सरल पुनर्निर्देशन अपने दम पर होता है। (इसके अलावा, सरीसृप काफी सही नहीं लगते - अंत में प्लस क्यों?)
बेनेट McElwee

व्यक्तिगत व्यामोह / दोगुनी सुरक्षा। यदि RewriteEngine बंद होने के लिए होता है (केंद्रीय कॉन्फ़िगरेशन परिवर्तन, खराब टीम संचार, अशुभ सर्वर "अपडेट", ... आप इसे नाम देते हैं :-) यह अप्रचलित है या एक $, अच्छा बिंदु होना चाहिए! (परीक्षण के लिए कोई समय नहीं, क्षमा करें।)
फ्रैंक नॉक

यदि आप चिंतित हैं कि RewriteEngine बंद हो सकता है, तो बस RewriteEngine Onअपने RewriteRule से पहले रखें। लेकिन किसी भी तरह यह तांत्रिक और निरर्थक है क्योंकि सरल पुनर्निर्देशन अपने दम पर होता है। हालांकि यह भी सरल किया जा सकता है। मूल रूप से मैं इसके बजाय अपने जवाब की सिफारिश कर रहा हूं । :)
बेनेट McElwee

लिटमस टेस्ट के लिए +1।

5

.Itignore और .itmodules .htaccess का उपयोग करने के लिए .git निर्देशिका के साथ-साथ अन्य फ़ाइलों की सुरक्षा के लिए दोनों का उपयोग करें:

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"

4
मेरे लिए काम करता है, हालांकि अनुगामी ErrorDocument का कोई प्रभाव नहीं है। एक सुरक्षा कोण से, मैं हमलावर के लिए एक सूचनात्मक 403 से अधिक एक फर्जी 404 का सामना करूंगा ...
फ्रैंक नॉक

1
यह एक बुरा विचार है, क्योंकि यह हैकर्स को जानकारी का खुलासा करता है। 403 का मतलब है कि यह वहाँ है, 404 का मतलब यह नहीं है। एक सर्वर की स्थापना पर हर तथ्य एक हैकर के लिए उपयोगी है। मैं इस पर विचार करना चाहूंगा।
GerardJP

3

मैं हमेशा निम्नलिखित पंक्ति को vhost टेम्पलेट में जोड़ता हूं

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

बस यह सुनिश्चित करने के लिए कि कोई भी वीसीएस विशिष्ट डेटा तक नहीं पहुंच सकता है। सही काम करता है।


1

अपने वेबसर्वर को मान लें कि आप उपयोग किए गए एक से अलग उपयोगकर्ता का उपयोग कर रहे हैं। .it रिपॉजिटरी तक पहुँचने के लिए, आप .गित निर्देशिका पर दूसरों के लिए निष्पादित बिट को अक्षम कर सकते हैं।

यह अन्य webservers के साथ काम करना चाहिए और प्रदर्शन-खपत .htaccess फ़ाइलों पर भरोसा नहीं करता है।


1

लिनक्स वितरण पर सभी "छिपी" फ़ाइलों और निर्देशिकाओं को केवल नकारने की तलाश करने वालों के लिए (आमतौर पर "" के साथ शुरू होने वाली सभी फाइलें), यहां सर्वर के संदर्भ में रखे जाने पर Apache 2.4 पर क्या काम होता है:

<FilesMatch "^\.(.*)$">
    Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Require all denied
</DirectoryMatch>

और यहाँ पुराने Apache 2.2 शैली (एक ही regex, बस अलग-अलग निर्देश):

<FilesMatch "^\.(.*)$">
    Order deny,allow
    Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Order deny,allow
    Deny from all
</DirectoryMatch>

फिर आपको .gitया .svnविशेष रूप से चिंता करने की आवश्यकता नहीं है । यह भी .htaccessऔर .htpasswdअंतर्निहित रूप से जैसी चीजों से मेल खाता है ।

व्यक्तिगत रूप से, मुझे इस तरह के अनुरोधों के लिए 404s के बजाय 403 जारी करना पसंद है, लेकिन आप आसानी से किसी भी खंडन के बजाय किसी ReriteRule का उपयोग कर सकते हैं, जैसे:

<FilesMatch "^\.(.*)$">
    RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>

0

आप शायद सेवा करने से भी इनकार करना चाहते हैं .gitignore

एक डॉट के साथ शुरू होने वाली फाइलें लिनक्स में छिपी हुई हैं।

इसलिए, बस 404 कुछ भी जो एक डॉट के साथ शुरू होता है:

RedirectMatch 404 /\.


0

यह थोड़ी देर है लेकिन मेरा जवाब थोड़ा अलग है इसलिए मैंने सोचा कि मैं इसे जोड़ दूंगा। यह httpd.conf फ़ाइल में जाना चाहिए। <Files "*">अंदर नेस्टेड <Directory>टैग निर्देशिका में सभी फ़ाइलों को रोकेंगे।

# GitHub Directory
<Directory /var/www/html/yoursite/.git>
   Order Deny,Allow
   Deny from all
   <Files "*">
     Order Deny,Allow
     Deny from all
   </Files>
</Directory>
# GitHub files
<Files .gitignore>
  order Deny,Allow
  Deny from all
</Files>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.