Apache Directive Closure Problem
Adam Mihai Gergely <[email protected]>
| Newsgroups | gmane.comp.apache.user |
|---|---|
| Message-ID | <[email protected]> |
Hello, I have a rather wierd question about Apache Directives Configuration. I am running Ubuntu Linux Server and my Apache Tree looks like this: server [/etc/apache2] # tree . ├── apache2.conf ├── apache2.conf.dpkg-old ├── apache2.conf.in ├── conf-available │ ├── charset.conf │ ├── javascript-common.conf │ ├── localized-error-pages.conf │ ├── other-vhosts-access-log.conf │ ├── phpmyadmin.conf -> ../../phpmyadmin/apache.conf │ ├── security.conf │ └── serve-cgi-bin.conf ├── conf-enabled │ ├── charset.conf -> ../conf-available/charset.conf │ ├── client-dirs.conf │ ├── javascript-common.conf -> ../conf-available/javascript-common.conf │ ├── localized-error-pages.conf -> ../conf-available/localized-error-pages.conf │ ├── other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf │ ├── phpmyadmin.conf -> ../conf-available/phpmyadmin.conf │ ├── security.conf -> ../conf-available/security.conf │ └── serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf ├── conf-local │ ├── htdirs.conf │ ├── htpasswd │ ├── htpasswd4laszlo │ └── htpasswd4project ├── envvars ├── magic ├── mods-available │ ├── access_compat.load │ ├── actions.conf │ ├── actions.load │ ├── alias.conf │ ├── alias.load │ ├── allowmethods.load │ ├── asis.load │ ├── auth_basic.load │ ├── auth_digest.load │ ├── auth_form.load │ ├── authn_anon.load │ ├── authn_core.load │ ├── authn_dbd.load │ ├── authn_dbm.load │ ├── authn_file.load │ ├── authn_socache.load │ ├── authnz_fcgi.load │ ├── authnz_ldap.load │ ├── authz_core.load │ ├── authz_dbd.load │ ├── authz_dbm.load │ ├── authz_groupfile.load │ ├── authz_host.load │ ├── authz_owner.load │ ├── authz_user.load │ ├── autoindex.conf │ ├── autoindex.load │ ├── buffer.load │ ├── cache_disk.conf │ ├── cache_disk.load │ ├── cache.load │ ├── cache_socache.load │ ├── cgid.conf │ ├── cgid.load │ ├── cgi.load │ ├── charset_lite.load │ ├── data.load │ ├── dav_fs.conf │ ├── dav_fs.load │ ├── dav.load │ ├── dav_lock.load │ ├── dbd.load │ ├── deflate.conf │ ├── deflate.load │ ├── dialup.load │ ├── dir.conf │ ├── dir.load │ ├── dump_io.load │ ├── echo.load │ ├── env.load │ ├── expires.load │ ├── ext_filter.load │ ├── file_cache.load │ ├── filter.load │ ├── headers.load │ ├── heartbeat.load │ ├── heartmonitor.load │ ├── ident.load │ ├── include.load │ ├── info.conf │ ├── info.load │ ├── lbmethod_bybusyness.load │ ├── lbmethod_byrequests.load │ ├── lbmethod_bytraffic.load │ ├── lbmethod_heartbeat.load │ ├── ldap.conf │ ├── ldap.load │ ├── log_debug.load │ ├── log_forensic.load │ ├── lua.load │ ├── macro.load │ ├── mime.conf │ ├── mime.load │ ├── mime_magic.conf │ ├── mime_magic.load │ ├── mpm_event.conf │ ├── mpm_event.load │ ├── mpm_prefork.conf │ ├── mpm_prefork.load │ ├── mpm_worker.conf │ ├── mpm_worker.load │ ├── negotiation.conf │ ├── negotiation.load │ ├── php5.6.conf │ ├── php5.6.load │ ├── php7.0.conf │ ├── php7.0.load │ ├── php7.1.conf │ ├── php7.1.load │ ├── php7.2.conf │ ├── php7.2.load │ ├── php7.3.conf │ ├── php7.3.load │ ├── php7.4.conf │ ├── php7.4.load │ ├── php8.0.conf │ ├── php8.0.load │ ├── proxy_ajp.load │ ├── proxy_balancer.conf │ ├── proxy_balancer.load │ ├── proxy.conf │ ├── proxy_connect.load │ ├── proxy_express.load │ ├── proxy_fcgi.load │ ├── proxy_fdpass.load │ ├── proxy_ftp.conf │ ├── proxy_ftp.load │ ├── proxy_html.conf │ ├── proxy_html.load │ ├── proxy_http.load │ ├── proxy.load │ ├── proxy_scgi.load │ ├── proxy_wstunnel.load │ ├── ratelimit.load │ ├── reflector.load │ ├── remoteip.load │ ├── reqtimeout.conf │ ├── reqtimeout.load │ ├── request.load │ ├── rewrite.load │ ├── sed.load │ ├── session_cookie.load │ ├── session_crypto.load │ ├── session_dbd.load │ ├── session.load │ ├── setenvif.conf │ ├── setenvif.load │ ├── slotmem_plain.load │ ├── slotmem_shm.load │ ├── socache_dbm.load │ ├── socache_memcache.load │ ├── socache_shmcb.load │ ├── speling.load │ ├── ssl.conf │ ├── ssl.load │ ├── status.conf │ ├── status.load │ ├── substitute.load │ ├── suexec.load │ ├── unique_id.load │ ├── userdir.conf │ ├── userdir.load │ ├── usertrack.load │ ├── vhost_alias.load │ └── xml2enc.load ├── mods-enabled │ ├── access_compat.load -> ../mods-available/access_compat.load │ ├── alias.conf -> ../mods-available/alias.conf │ ├── alias.load -> ../mods-available/alias.load │ ├── auth_basic.load -> ../mods-available/auth_basic.load │ ├── authn_core.load -> ../mods-available/authn_core.load │ ├── authn_file.load -> ../mods-available/authn_file.load │ ├── authz_core.load -> ../mods-available/authz_core.load │ ├── authz_host.load -> ../mods-available/authz_host.load │ ├── authz_user.load -> ../mods-available/authz_user.load │ ├── autoindex.conf -> ../mods-available/autoindex.conf │ ├── autoindex.load -> ../mods-available/autoindex.load │ ├── deflate.conf -> ../mods-available/deflate.conf │ ├── deflate.load -> ../mods-available/deflate.load │ ├── dir.conf -> ../mods-available/dir.conf │ ├── dir.load -> ../mods-available/dir.load │ ├── env.load -> ../mods-available/env.load │ ├── filter.load -> ../mods-available/filter.load │ ├── headers.load -> ../mods-available/headers.load │ ├── mime.conf -> ../mods-available/mime.conf │ ├── mime.load -> ../mods-available/mime.load │ ├── mpm_prefork.conf -> ../mods-available/mpm_prefork.conf │ ├── mpm_prefork.load -> ../mods-available/mpm_prefork.load │ ├── negotiation.conf -> ../mods-available/negotiation.conf │ ├── negotiation.load -> ../mods-available/negotiation.load │ ├── php5.6.conf -> ../mods-available/php5.6.conf │ ├── php5.6.load -> ../mods-available/php5.6.load │ ├── rewrite.load -> ../mods-available/rewrite.load │ ├── setenvif.conf -> ../mods-available/setenvif.conf │ ├── setenvif.load -> ../mods-available/setenvif.load │ ├── socache_dbm.load -> ../mods-available/socache_dbm.load │ ├── socache_memcache.load -> ../mods-available/socache_memcache.load │ ├── socache_shmcb.load -> ../mods-available/socache_shmcb.load │ ├── ssl.conf -> ../mods-available/ssl.conf │ ├── ssl.load -> ../mods-available/ssl.load │ ├── status.conf -> ../mods-available/status.conf │ ├── status.load -> ../mods-available/status.load │ ├── userdir.conf -> ../mods-available/userdir.conf │ └── userdir.load -> ../mods-available/userdir.load ├── ports.conf ├── sites-available │ ├── 000-default.conf │ └── default-ssl.conf └── sites-enabled ├── 000-default.conf -> ../sites-available/000-default.conf └── default-ssl.conf -> ../sites-available/default-ssl.conf 7 directories, 212 files Now, the problem is: One of my config files is */etc/apache2/mods-enabled/userdir.conf* It has this contents: [Begin File contents] <IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/adam/public_html> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Require all granted </Limit> <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept> php_admin_value open_basedir /home/adam/public_html:/tmp </Directory> [End File contents] The problem I noticed is that "</IfModule>" was absent from this file. So the <IfModule> at the beginning of this file was not properly closed. The mod_userdir module is always loaded and running. This is the intended setting. Restating the webserver (and retaining this configuration) did not yield any problems. However, requesting a certificate with Let's Encrypt's certbot revealed this issue because certbot performed an analysis on Apache's configuration files before renewing this certificate and found this problem. After I properly closed the IfModule with "</IfModule>" and restarted the webserver certbot worked again. Of course, Apache also worked. Now, my question is: What could this have affected ? The lack of "</IfModule>" at the end of the "userdir" module. (I am permanently using and loaded the UserDir Module because I needed. So the "IF" condition is a perfect TRUE, for my server.) Could have impacted something else ? I don't know how many other modules or directives loads Apache into memory on startup... Is it possible that everything it loaded after this file could be "under the influence" of <IfModule mod_userdir.c> because it was not properly closed ? (In this case, perhaps Apache found another <IfModule> or <VirtualHost> along the way and nested it inside my unclosed <IfModule> ?) I am concerned about security risks, not loading of other configs properly or some other wierd combination that messes up my configs.... I have htaccess statements and security measures I put in place in my configs, as this server is used by tens of users. Also, Apache should have reported this unclosed <IfModule> on restart. I don't know why it didn't. I know Apache reads configuration files in a specific order based on a combination of directories, filenames, and inclusion rules, however I don't know how a missing IfModule closure tag can affect other things... If someone can help me... if an Apache developer or someone that understands these things perfectly knows what can I expect from this situation, please advise... Thank you. -- Cu stima, Adam Mihai Gergely Informatician www.infosky.ro