On Fri, Oct 11, 2024 at 4:32 AM Adam Mihai Gergely <ad...@infosky.ro.invalid> wrote:
> 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 > Informaticianwww.infosky.ro > > What I would do first is create a simple test with an open <IfModule> block, and apachectl -f /path/to/config/file configtest, and see if there is an error.