next up previous contents
Next: 關閉目錄瀏覽 Up: 安全 Apache 2.4 網站 Previous: 網頁存取用戶   Contents

限制網頁根目錄外的存取

  1. 網站預設根目錄 /var/www/html,限制這個目錄上層檔案的存取,可以避免攻擊存取系統檔案。直接在網址上以 ../ 連結上層目錄也無法跳脫這個目錄,但在 httpd.conf 若設定別名就可連上 /var/www/html 根目錄以外的檔案目錄。
  2. 此時的最上層目錄 / 設定允許所有主機存取。
    [root@kvm5 ~]# vim /etc/httpd/conf/httpd.conf 
    <Directory />
        AllowOverride none
        Require all granted
    </Directory>
    
  3. 下例中 /web 指向 /var,也就是連線 http://kvm5.deyu.wang/web 時會讀取 /mnt/www 下的資料。
    [root@kvm5 ~]# grep ' Alias' /etc/httpd/conf/httpd.conf
        # Alias: Maps web paths into filesystem paths and is used to
        # Alias /webpath /full/filesystem/path
        Alias /web /mnt/www
        # ScriptAliases are essentially the same as Aliases, except that
        # directives as to Alias.
    
  4. 再重新載入 httpd 服務設定。
    [root@kvm5 ~]# systemctl reload httpd.service
    
  5. 建立測試目錄 /mnt/www,目錄有一網頁 c.html。
    [root@kvm5 ~]# mkdir /mnt/www 
    [root@kvm5 ~]# echo 'abc' > /mnt/www/c.html
    
  6. 啟動 selinux
    [root@kvm5 ~]# setenforce 1
    
  7. 檢查 selinux 有無啟動?是否限制?
    [root@kvm5 ~]# getenforce 
    Enforcing
    
  8. 開機啟動 selinux。
    [root@kvm5 ~]# vim /etc/selinux/config 
    [root@kvm5 ~]# grep enforcing /etc/selinux/config 
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    SELINUX=enforcing
    
  9. 已經開放網頁根目錄上層目錄的存取,但連線 http://kvm5.deyu.wang/web/c.html,回應無法存取。
    [root@kvm5 ~]# curl -s http://kvm5.deyu.wang/web/c.html
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>403 Forbidden</title>
    </head><body>
    <h1>Forbidden</h1>
    <p>You don't have permission to access /web/c.html
    on this server.</p>
    </body></html>
    
  10. 查看 /mnt/www 目錄檔案的 content type 是 mnt_t,而不是 httpd_sys_content_t
    [root@kvm5 ~]# ll -Z /var/www/html /mnt/www
    /mnt/www:
    -rw-r--r--. root root unconfined_u:object_r:mnt_t:s0   c.html
    
    /var/www/html:
    -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
    drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 inx
    -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 missing.html
    
  11. 變更 /mnt/www 目錄檔案的 content type 為 httpd_sys_content_t
    [root@kvm5 ~]# chcon -Rv -t httpd_sys_content_t /mnt/www
    changing security context of ‘/mnt/www/c.html’
    changing security context of ‘/mnt/www’
    
  12. 再連線 http://kvm5.deyu.wang/web/c.html,回應 c.html 內容 abc。
    [root@kvm5 ~]# curl -s http://kvm5.deyu.wang/web/c.html
    abc
    
  13. 修改 httpd.conf 限制網頁根目錄外資料的存取。
    [root@kvm5 ~]# vim /etc/httpd/conf/httpd.conf 
    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    
  14. 再重新載入 httpd 服務設定。
    [root@kvm5 ~]# systemctl reload httpd.service
    
  15. 再連線 http://kvm5.deyu.wang/web/c.html,回應 403 拒絕存取。
    [root@kvm5 ~]# curl -s http://kvm5.deyu.wang/web/c.html | sed -e 's/<[^>]*>//g' -e '/^$/d'
    [root@kvm5 ~]# curl -s http://kvm5.deyu.wang/web/c.html
    403 Forbidden
    Forbidden
    You don't have permission to access /web/c.html
    on this server.
    



2015-12-04