बाकी सिस्टम से अपाचे virtualhosts को अलग करना


11

मैं एक वेब सर्वर स्थापित कर रहा हूं जो कई अलग-अलग वेब साइटों को Apache VirtualHosts के रूप में होस्ट करेगा, इनमें से प्रत्येक में स्क्रिप्ट चलाने की संभावना होगी (मुख्य रूप से PHP, possiblu अन्य)।

मेरा सवाल यह है कि मैं इन VirtualHosts में से प्रत्येक को अलग-अलग और बाकी सिस्टम से कैसे अलग करूं? मैं नहीं चाहता कि वेबसाइट X को वेबसाइट Y या किसी सर्वर की "निजी" फाइलों के विन्यास को पढ़ें।

फिलहाल मैंने FastCGI, PHP और SUExec के साथ VirtualHosts की स्थापना की है, जैसा कि यहाँ वर्णित है ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastpgi-php-5-suexec -easy-way.html ), लेकिन SUExec केवल उपयोगकर्ताओं को अपने स्वयं के अलावा फ़ाइलों को संपादित / निष्पादित करने से रोकता है - उपयोगकर्ता अभी भी संवेदनशील जानकारी जैसे कि कॉन्फिग फाइलों को पढ़ सकते हैं।

मैंने सर्वर पर सभी फ़ाइलों के लिए UNIX वैश्विक रीड अनुमति को हटाने के बारे में सोचा है, क्योंकि यह उपरोक्त समस्या को ठीक करेगा, लेकिन मुझे यकीन नहीं है कि मैं सर्वर फ़ंक्शन को बाधित किए बिना सुरक्षित रूप से कर सकता हूं।

मैंने चेरोट का उपयोग करने पर भी ध्यान दिया, लेकिन ऐसा लगता है कि यह केवल प्रति-सर्वर के आधार पर किया जा सकता है, न कि प्रति-वर्चुअल-होस्ट के आधार पर।

मैं ऐसे किसी भी सुझाव की तलाश कर रहा हूँ जो मेरे VirtualHosts को बाकी सिस्टम से अलग कर दे।

PS मैं Ubuntu 12.04 सर्वर चला रहा हूं

मेरे उत्तर: मैं अपने वर्तमान कॉन्फ़िगरेशन का अनुसरण करते हुए लगभग समाप्त हो गया, लेकिन सभी वर्चुअल मेजबानों के लिए चिरोट जेल कर रहा हूं, जैसे कि चिरोट जेल में /var/wwwऔर फिर उप-प्रहरियों में सभी उपयोगकर्ताओं का डेटा समूह / अन्य के साथ r / w / x अनुमतियाँ विकलांग। यह विकल्प विशेष रूप से वांछनीय था क्योंकि स्रोत कोड के किसी भी संशोधन के बिना यह संभव है।

मैंने @ क्रिस के उत्तर का चयन किया, क्योंकि यह पूरी तरह से लिखा गया था और इसे एफ़टीपी और SELinux भी माना जाता था

जवाबों:


4

यह अपाचे में mod_users मॉड्यूल को सक्षम करके किया जा सकता है।

आपको अपने Apache कॉन्फ़िगरेशन में UserDir सेटअप करना होगा। मेरा सुझाव है कि आप इसे एक अलग कॉन्फ़िग फ़ाइल में शामिल करें और इसे शामिल करें। में शामिल लपेटें

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

मैं आपको संपूर्ण ट्यूटोरियल दे सकता हूं लेकिन यह आपको अपाचे को कॉन्फ़िगर करने के लिए शुरू करना चाहिए: http://www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distions/

संकेत यदि आप SELinux चला रहे हैं (और आपको चाहिए) तो आपको Apache को उपयोगकर्ता के घरों में पढ़ने की सुविधा देनी होगी। आप सेटिंग करके ऐसा कर सकते हैं:

sudo setsebool -P httpd_enable_homedirs=On

यह भी उपयोगकर्ता के लिए फ़ाइल अनुमतियाँ public_html निर्देशिका और रूट निर्देशिका तक मूल निर्देशिका पर rx अनुमतियाँ की आवश्यकता है।

जाहिर है आपको vsftpd में उदाहरण के लिए उपयोगकर्ताओं के लिए chroot सेटअप करने की आवश्यकता है। इंस्टॉल:

apt-get vsftpd

चिरोटिंग को खोलने के लिए /etc/vsftpd/vsftpd.conf को vi या नैनो के साथ कॉन्फ़िगर करें। ढूँढें और असहज करें या जोड़ें: chroot_local_user = हाँ

आप sftp के लिए वही व्यवहार प्राप्त कर सकते हैं जो मैं FTP, खुले / आदि / ssh / sshd_config पर सुझाता हूं और एक मिलान ब्लॉक और इस पंक्ति को जोड़ सकता हूं:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

यह web_users समूह में किसी भी उपयोगकर्ता को क्रॉप करेगा । इसके अलावा, आपको इसे / sbin / nologin पर सेट करके शेल तक पहुंच से इनकार करना होगा:

useradd -G "web_users" -s /sbin/nologin new_user

यदि यह एक सार्वजनिक उत्पादन सर्वर होना है, तो मैं आपको यह भी दृढ़ता से सुझाव देता हूं कि आप ओएस, ओपनएसएसएच, अपाचे, पीएचपी, vsftpd पर कुछ सख्त लागू करें और कुछ सख्त iptables और TCP रैपर लागू करें। मैं आपको जगह में SELinux छोड़ने की सलाह देता हूं।


3
मैं यह नहीं देखता कि mod_userdirअलग डोमेन की वर्चुअल होस्टिंग कैसे प्रदान करता है। इसके अलावा, मैं अलगाव के संदर्भ में सुरक्षा के बारे में चिंता करता हूं क्योंकि मैं Apache के भीतर उपयोगकर्ता निर्देशिकाओं के बीच कुछ भी नहीं पा रहा हूं। ऐसा लगता है कि यह सुविधा प्रदान नहीं करता है।
gertvdijk

6

मैं PHPsuphp या FPM पर एक नज़र डालने का सुझाव देता हूं ।

यह मूल रूप से PHP दुभाषिया को उस VirtualHost के लिए कॉन्फ़िगर किए गए कुछ विशिष्ट उपयोगकर्ता के लिए 'su' में सक्षम करेगा। यह आपको हर एक VirtualHost को अलग करने के लिए सामान्य फ़ाइल सिस्टम अनुमतियों का उपयोग करने की अनुमति देगा।

मैं प्रदर्शन विचारों के लिए एफपीएम की सिफारिश करूंगा। मुखपृष्ठ से यह वही है जो आपके लिए सबसे अधिक रुचि रखता है:

ब्याज की प्रति-पूल उपयोगकर्ता और समूह विकल्प भी हैं, जो आपको दिए गए uid और gid के तहत उस विशिष्ट fpm पूल को चलाने की अनुमति देते हैं; अलविदा अलविदा!


4

1
मैंने इन लिंक को देखा, लेकिन ऐसा नहीं लगता कि मैं प्रति-वर्चुअल-होस्ट आधार पर चाउरॉट कर सकता हूं। हो सकता है कि मुझे एक वैश्विक www निर्देशिका को परिभाषित करना चाहिए जैसे कि /var/www, और सभी होस्ट्स को एक उपनिर्देशिका में होना चाहिए, इनमें से प्रत्येक उपनिर्देशिका में वैश्विक निष्पादन / पढ़ने की अनुमति को हटा दिया गया है?
जेसपरब

मेरा मुख्य बिंदु था chroot, और आप इसे प्रति वर्चुअल सर्वर से कर सकते हैं। यहाँ एक उदाहरण है। इस मामले में, वे उपयोग कर रहे हैं mod_chroot
tacotuesday
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.