Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Adjust webserver group name to match your system! (_www is the default Apache httpd usergroup on OS X)
[ ! -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
Copy link

kojiromike commented Jan 26, 2016

I suggest chmod -R u+rwX,g+rX,o-rwx . instead of the first two find commands.

Copy link

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.

Copy link

vkerkhoff commented Jan 27, 2016

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

Copy link

devamitbera commented Jan 28, 2016

Hey Vinai.

Thanks for Share

Copy link

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.

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) :-).

Copy link

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.

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

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


Amit Bera

Copy link

senthilengg commented Aug 7, 2016


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

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

Copy link

vaimo-wilko commented Jul 13, 2017

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