<div dir="ltr"><div dir="ltr">From another thread ... <br></div><div dir="ltr"><br></div><div dir="ltr">On Fri, Dec 9, 2022 at 4:05 AM Ronald Barnes <<a href="mailto:ron@ronaldbarnes.ca">ron@ronaldbarnes.ca</a>> wrote:</div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
If I run:<br>
<br>
chown -vR www-data: ./.*<br></blockquote><div><br></div>This is a warning to those who run web sites with applications that need to write to the file system, such as Drupal, Backdrop, as well as other CMS and web frameworks. <br></div><div class="gmail_quote"><br></div><div class="gmail_quote">Basically, there are the applications's programs and configuration in one bucket (A), and the writable file system in another (B). There is also the configuration (C). <br></div><div class="gmail_quote"><br></div><div class="gmail_quote">In Drupal, Backdrop, and other similar CMS/web frameworks:</div><div class="gmail_quote"><br></div><div class="gmail_quote">C should always be outside webroot, so it is not accessible to anyone in the event of a web server misconfiguration or bug. The default installation of Backdrop makes it inside webroot, which is a potential security vulnerability. <br></div><div class="gmail_quote"><br></div><div class="gmail_quote">For example, for Backdrop the correct way should be: </div><div class="gmail_quote"><br></div><div class="gmail_quote">$config_directories['active'] = '../config/<a href="http://example.com/active">example.com/active</a>';</div><div class="gmail_quote"><br></div><div class="gmail_quote">That config is now outside webroot, and should be owned by www-data so it is writable by PHP, but it is also not accessible from the web server as static files. <br></div><div class="gmail_quote"><br></div><div class="gmail_quote">B is usually in webroot/files or sites/<a href="http://example.com/files">example.com/files</a>. It should always be owned by the user www-data, so PHP (and hence the application) can write to it anything that needs to. </div><div class="gmail_quote"><br></div><div class="gmail_quote">Which leaves A, and that is where things are often not done right. Many people make A owned by www-data, but that means that any bug that causes a remote exploit can write executable stuff and execute it. That is why A should be owned by a separate user, and made world readable but only user writable. </div><div class="gmail_quote"><br></div><div class="gmail_quote">This adds a limitation when executing PHP from the command line, e.g. things like drush. The fix is to use:</div><div class="gmail_quote"><br></div><div class="gmail_quote">sudo -u www-data /usr/local/bin/drush whatever <br></div><div class="gmail_quote"><br></div><div class="gmail_quote">A shell alias or wrapper script ties it all together. <br></div><div class="gmail_quote"><br></div><div class="gmail_quote"><br></div></div>