Skip to content

Instantly share code, notes, and snippets.

@Vinai
Last active December 2, 2022 08:47
Show Gist options
  • Star 23 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save Vinai/69dc72b9f4baa2506120 to your computer and use it in GitHub Desktop.
Save Vinai/69dc72b9f4baa2506120 to your computer and use it in GitHub Desktop.
Adjust webserver group name to match your system! (_www is the default Apache httpd usergroup on OS X)
#!/bin/bash
[ ! -d app ] && echo "Not in Magento 2 root directory" >&2 && exit 1
echo "Settting group ownership to _www"
chgrp -R _www .
echo "Setting directory base permissions to 0750"
find . -type d -exec chmod 0750 {} \;
echo "Setting file base permissions to 0640"
find . -type f -exec chmod 0640 {} \;
echo "Setting group write and sgid bit permissions for writable directories"
find var pub/media pub/static -type d -exec chmod g+ws {} \;
echo "Setting permissions for files in writable directories "
find var pub/media pub/static -type f -not -name .htaccess -exec chmod g+w {} \;
[ -e app/etc ] && echo "Making app/etc writable for installation"
[ -e app/etc ] && chmod g+w app/etc
echo "Making vendor/bin scripts executable"
find -L vendor/bin -type f -exec chmod u+x {} \;
echo "Making bin/magento executable"
chmod u+x bin/magento
@Vinai
Copy link
Author

Vinai commented Jan 26, 2016

Thanks for your suggestion, but if Magento ships a file with the executable bit set by accident, then +X would preserve it (which happened in the past).
I prefer to start with fixed base permissions like 0640 because of that.

@vkerkhoff
Copy link

The command chmod is missing in the exec option on line 16.

@devamitbera
Copy link

Hey Vinai.

Thanks for Share

@Vinai
Copy link
Author

Vinai commented Jan 29, 2016

Thanks @vkerkhoff! I wonder how that happened. It is present in the file in my ~/bin dir, must have messed it up after copying maybe. Sorry.

@wjarka
Copy link

wjarka commented Feb 1, 2016

What about using xargs instead of -exec?

find . -type d -print0 | xargs -0 chmod 0750

Makes a huge difference performance-wise (on one of the test machines it made a difference between 4 minutes and 12 seconds) :-).

@Vinai
Copy link
Author

Vinai commented Feb 17, 2016

@wjarka It does make a big difference performance wise, but I'm always afraid I'll run into an argument length limitation. if case there are too many files. On OS X the limit for the command argument length is 256KB (see echo $(getconf ARG_MAX) / 1024 | bc). Not sure how many file names fit into that, if the command itself is included in that limit, or how that value is different on other operating systems.

@digimix
Copy link

digimix commented Mar 31, 2016

find . -type d -print0 | xargs -0 chmod 0750 works for me on Ubuntu 14.04 PHP7.0 LEMP thanks @wjarka

@devamitbera
Copy link

devamitbera commented Jun 4, 2016

Hi Vinai

For share hosting it difficult to change user.Then what will be good idea. For a case, i have change file permission from Magento\Framework\Exception\FileSystemException\DriverInterface i have change WRITEABLE_DIRECTORY_MODE = 0770; to WRITEABLE_DIRECTORY_MODE = 0775; and WRITEABLE_FILE_MODE = 0660 to WRITEABLE_FILE_MODE = 0664.It is working for me.

Are u thought that is identical process for share hosting ?please put your view

Thanks

Amit Bera

@senthilengg
Copy link

@Vinai

Looks like its deviated from the recommendation here in the below link

http://devdocs.magento.com/guides/v2.0/config-guide/prod/prod_file-sys-perms.html#mage-owner-two-devel

As per the above link the file permission should have 775. Can you please clarify.

@vaimo-wilko
Copy link

When using the xargs approach, you can add the -n parameter to limit how many arguments are given to each invocation of the utility that xargs should run. e.g. find . -type d -print0 | xargs -0 -n10 chmod 0750 would run chmod with 10 directories at a time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment