Magento Filesystem Permissions
This is an old revision of the document!
This article will explain the file and folder permissions required by Magento.
If you are not familiar with UNIX style permissions, please read one of the articles found here:
Magento is a web application, or set of scripts. These scripts are interpreted by a PHP executable, which, in turn, is invoked by a web service process (ex. Apache).
Magento will have as much access permission to the file system as the User under which PHP executable was invoked.
If Apache is configured to run PHP using mod_php module, then Magento will be run using the same permissions as Apache (ie, apache, nobody)
In this case the simplest way to make necessary files writable is to give them 777 (world writable) permission, although this is by far not very secure.
The other possibility is to assign the files apache process’ user’s group permissions (apache or nobody), and set permissions to 664 for files and 775 for folders. 775 for files will work too.
If apache is configured to use suEXEC (http://httpd.apache.org/docs/1.3/suexec.html) or suPHP (http://www.suphp.org/) then it will run under the same user you use for FTP or shell access. This will be possible only with CGI or FCGI (FastCGI) configured.
With this configuration, all entry point PHP scripts (files that are directly accessed by apache: for example, index.php, js/proxy.php) and the folders within which they are located cannot have world writable permissions, or an Apache Error 500 will be thrown.
Because all of the files are writable by the same User as FTP and shell, there’s no need for any special permissions.
This is a major security flaw! Setting all the files & folders to 777 will make them writable by everyone.
For the normal operation or installation of a Magento store, only 2 folders need to be writable:
- /media - for web accessible files, such as product images
- /var - for temporary (cache, session) and import/export files
During installation Magento Install Wizard will create app/etc/local.xml file which contains database configuration and global encryption key for your Magento copy.
Meaning app/etc folder has to be writable to web service.
If you wish to use web based downloader for installation, upgrades or MagentoConnect extensions installation, you will need to have write permissions on ALL magento files including the root Magento folder.
Files and folders will need to be returned to 655 non-writable permissions after installation.
Alternatively, if you do not like to make all files and folders writable to the web service, it is possible to install and upgrade Magento from shell, using command line PEAR instructions, such as:
# all commands are to be ran from the root Magento folder. # help on all available PEAR commands: ./pear help # set preferred stability for installed/upgraded packages (alpha,beta,stable): ./pear config-set preferred_state beta # initial installation from downloader package: ./pear mage-setup . ./pear install magento-core/Mage_All_Latest # install additional extension: ./pear install magento-community/Some_Extension # list available upgrades ./pear list-upgrades # upgrade a package ./pear upgrade magento-core/Mage_Package # uninstall a package ./pear uninstall magento-community/Unwanted_Package