Ravindra Bagale · Cyber Securityसर्व coursesया course चे lessonsशोधाEnglish

Cyber Security · मराठी आवृत्ती

Document root बदलूया

रवींद्र बागले यांच्या course वर आधारित · सहज मराठीत explanation

या page मध्ये

Site आता /var/www/portfolio मधून serve करायची आहे असं समजा. Nginx मध्ये root, Apache मध्ये DocumentRoot आणि संबंधित Directory access rules बदलतात.

# 1. create the folder and a test page
sudo mkdir -p /var/www/portfolio
echo '<h1>Portfolio served from /var/www/portfolio</h1>' | sudo tee /var/www/portfolio/index.html
sudo chmod 755 /var/www/portfolio
sudo chmod 644 /var/www/portfolio/index.html

Amazon Linux/CentOS Nginx example

sudo tee /etc/nginx/conf.d/portfolio.conf > /dev/null <<'__EOCONF__'
server {
    listen 80;
    listen [::]:80;
    server_name _;
    root /var/www/portfolio;
    index index.html;
    location / { try_files $uri $uri/ =404; }
}
__EOCONF__
grep -n "default_server" /etc/nginx/nginx.conf      # if found, remove "default_server" there
sudo nginx -t && sudo service nginx reload

इथे फक्त server_name _ दिल्याने block default होत नाही. Loaded configs, include order आणि default_server तपासा. Package मध्ये conf.d include आधी असेल तर पहिला block fallback होऊ शकतो; पण package/version नुसार फरक असतो. खात्रीचा मार्ग म्हणजे आपल्या actual domain/IP ला server_name देणं किंवा योग्य endpoint चा default_server आपल्या block ला देणं. जुना default काढताना दुसऱ्या site वर परिणाम होतो का पाहा.

Ubuntu Nginx example

sudo sed -i 's#root /var/www/html;#root /var/www/portfolio;#' /etc/nginx/sites-available/default
grep -n "root" /etc/nginx/sites-available/default
sudo nginx -t && sudo service nginx reload

ही command default file मध्ये जुना root exact match झाल्यास बदलते. मागच्या lab मध्ये तुम्ही mysite enable करून default disable केलं असेल, तर active mysite config मधला root बदला. Command output आणि nginx -T मधलं active configuration पाहून खात्री करा.

SELinux labels

/var/www खाली default policy mappings असू शकतात, पण copy/move नंतर actual labels तपासा. /srv/portfolio किंवा /data/site सारख्या custom path साठी mapping आणि restorecon लागू होऊ शकतो:

sudo yum install -y policycoreutils-python-utils           # provides semanage
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/portfolio(/.*)?"
sudo restorecon -Rv /srv/portfolio
ls -Z /srv/portfolio                                        # should show httpd_sys_content_t

हे त्या machine वर SELinux policy लागू असेल तेव्हाच संबंधित आहे; फक्त CentOS नावावरून निर्णय नका घेऊ. semanage -a mapping आधीच असेल तर add error देऊ शकतो; existing policy तपासा.

Local curl आणि browser ने verify करा. Web root /root किंवा personal home directory कडे वळवू नका. 403 घालवण्यासाठी personal home सर्वांसाठी readable केल्यास keys/इतर files exposed होऊ शकतात. Public content साठी स्वतंत्र /var/www किंवा /srv directory ठेवा.

Apache: VirtualHost बदलणं

DocumentRoot आणि matching Directory path दोन्ही जुळले पाहिजेत. खाली Ubuntu default-site example आणि Amazon Linux/CentOS independent vhost example आहेत:

# Ubuntu: default site
sudo sed -i 's#/var/www/html#/var/www/portfolio#' /etc/apache2/sites-available/000-default.conf
sudo tee /etc/apache2/conf-available/portfolio-dir.conf > /dev/null <<'__EOCONF__'
<Directory /var/www/portfolio>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
__EOCONF__
sudo a2enconf portfolio-dir
sudo apache2ctl configtest && sudo service apache2 reload

Amazon Linux / CentOS Apache

# Amazon Linux 2023 / CentOS Stream 9: own virtual host
sudo tee /etc/httpd/conf.d/portfolio.conf > /dev/null <<'__EOCONF__'
<VirtualHost *:80>
    ServerName portfolio.local
    DocumentRoot /var/www/portfolio
    <Directory /var/www/portfolio>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
__EOCONF__
sudo apachectl configtest && sudo service httpd reload

आधीच्या mysite lab वर असाल तर त्या active config ला बदल लागू करा; disabled 000-default.conf बदलून फरक पडणार नाही. Amazon Linux वर जुने vhosts असतील तर ServerName/default order तपासा.

दुसरा पर्याय म्हणजे /etc/httpd/conf/httpd.conf मधला global DocumentRoot आणि matching Directory path बदलणं. तरी site-specific vhost जास्त स्पष्ट राहतो. बदलानंतर config test आणि reload आवश्यक.

Apache directory access

Ubuntu च्या सामान्य config मध्ये / साठी access नाकारला असून /var/www, /usr/share सारखे paths allow असतात. /srv/site सारखा नवीन root वापरल्यास योग्य Directory access block लागतो. Unix file permissions बरोबर असूनही Apache policy मुळे 403 येऊ शकतो.

Lab

Nginx/Apache lab मध्ये root /var/www/portfolio करा. मग /srv/portfolio वापरून directory access आणि SELinux labels यांचे कोणते अतिरिक्त steps लागतात ते नोंदवा.