I have Installed Magento 2.
Everything completed successfully but the CSS is not loading.
I tried these commands
php bin/magento cache:flush
php bin/magento indexer:reindex
php bin/magento setup:static-content:deploy
Please, before doing anything go to magento2 basedir and do:
nano vendor/magento/framework/Filesystem/DriverInterface.php
and change
const WRITEABLE_DIRECTORY_MODE = 0770;
from 0770 to 0775
and
const WRITEABLE_FILE_MODE = 0660;
from 0660 to 0644
The above set 0775 for folders and 0644 for files on generated/cached entities
Then change whole magento2 filesystem to the same permissions
find . -type d -exec chmod 775 {} \; && find . -type f -exec chmod 644 {} \; && chmod u+x bin/magento
Important,
you should execute bin/magento as a common user, and not as root. So if you are in bin/ folder you may use for example:
sudo -u youasuser php -d memory_limit=512M magento setup:upgrade
You need memory_limit=512 as some callings like setup:di:compile needs more memory.
Please check mod_rewrite is enabled on your web server.
First create a magento_user: adduser <username> and give user a password passwd <username> (May have to use sudo, if not already root)
Find your web server group: ps aux | grep apache Typically www-data
Add new user to this group: usermod -g www-data <username>
groups <username> should show the groups that username belongs to.
Restart webserver, so permissions can take effect service apache2 restart
Set ownerships of files in Magento root. chown -R :<your web server group name> .
Finally set permissions find . -type d -exec chmod 770 {} \; && find . -type f -exec chmod 660 {} \; && chmod u+x bin/magento
Reference: Set file system ownership and permissions and Create the Magento file system owner
You should Provide Some permissions
run this command
sudo find . -type d -exec chmod -R 777 {} \;
&& sudo find . -type f -exec chmod -R 777 {} \;
&& sudo chmod u+x bin/magento
Related
I'm using amazon web server and while updating any plugin an "Update Failed: Could not copy file" error occurs.
I have set /opt/bitnami/apps/wordpress/htdocs and /opt/bitnami/apps/wordpress/htdocs/wp-content to 777, but still my plugins are not updating.
I found the solution
sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs
sudo find /opt/bitnami/apps/wordpress/htdocs -type f -exec chmod 664 {} \;
sudo chmod 640 /opt/bitnami/apps/wordpress/htdocs/wp-config.php
sudo find /opt/bitnami/apps/wordpress/htdocs -type d -exec chmod 775 {} \;
After that, please restart services and try to update plugins again
sudo /opt/bitnami/ctlscript.sh restart
Have a look at this image : http://prntscr.com/iadnrl
Adding new theme to Wordpress after deleting all tables and data. While activating new theme getting this mentioned error of connection FTP.
I already tried following commands , seems does not worked.
sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs
sudo passwd bitnamiftp
Hosting is on AWS Lightsail.
Please share your views.
TAKE A BACKUP BEFORE RUNNING THESE COMMANDS. I am not responsible for any error.
The following command worked for me. Make sure to replace the bitnami to the proper user.
Change to proper permissions of all files:
find /opt/bitnami/apps/wordpress/htdocs -type f -exec chmod 0644 {} \;
find /opt/bitnami/apps/wordpress/htdocs -type f -exec chown bitnami: {} \;
Change to proper permissions of all folders:
find /opt/bitnami/apps/wordpress/htdocs -type d -exec chmod 0755 {} \;
find /opt/bitnami/apps/wordpress/htdocs -type d -exec chown bitnami: {} \;
I'm running a EC2 instance with:
Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-119-generic x86_64)
Bitnami LAMP 5.6.30-5
My problem
I have a Wordpress site that isn't working very well on the backend, so I decided to update and I get an error "Can not create the directory..." when updating. So I did a research and it's related to file permissions. So I get to this conclusion:
I having the following issues with the file permissions:
Can't write files from server
I used is_writable() (PHP) to detect if server can edit and it returns false.
Can edit files from Filezilla
I login to the server with the "bitnami" user and everything works good.
I tried
sudo chown -R bitnami:www-data htdocs/
I added the default user "bitnami" to the www-data group and changed the /htdocs owner.
And, yes the user is in the www-data group.
find htdocs/ -type d -exec sudo chmod 2775 {} +
Changed directory permissions
find /var/www -type f -exec sudo chmod 0664 {} +
Changed the files permissions
How to solve this?
I tried all that and also giving the owner to root:root, www-data:www-data and bitnami:bitnami.
If someone knows the original user and group owner of the /htdocs folder I could try a test, but I forgot.
I would appreciate if anyone can help me to solve this. I just want to be able to write/edit files from server side.
Many thanks.
I solved this by doing the following:
Set htdocs owner to bitnami:bitnami
sudo chown -R bitnami:bitnami htdocs/
Inside /htdocs, changed file and directories owner to bitnami:daemon
sudo chown -R bitnami:daemon
Changed files and directories permissions
sudo find * -type d -print0 | xargs -0 chmod 0755 # for directories
sudo find . -type f -print0 | xargs -0 chmod 0644 # for files
Changed wp-content directories permissions to 775
sudo find wp-content/ -type d -exec chmod 0775 {} \;
And with that now I'm able to edit and upload via FTP and in the WP admin dashboard.
I have installed WordPress on Linux with Nginx, But when I am trying to install the theme it asks me for FTP connection confirmation every time.
I have found solution to my question first we need to change the ownership permission to access directories
chown -R www-data:www-data your-wordpress-directory
Now we remove secure permission to confirmation of connection to make it direct installations from wp-config.php
define('FS_METHOD','direct');
Now we need to ensure the permission of the folder set or not
sudo find /var/www/wordpress/ -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress/ -type f -exec chmod 644 {} \;
I'm having a craptastic time trying to figure out how I should configure my Drupal folders and files. I've search all over drupal.org but keep coming up with dribble about the www-data needing access to the "sites" and the "files" folder and how "settings.php" needs some awesome permissions.
But what I need is a list like this:
/ = 744 or drwxr-r--
/includes/ = ...
/misc/ = ...
/modules/ = ...
/profiles/ = ...
/scripts/ = ...
/sites/ = ...
/sites/all/ = ...
/sites/default/ = ...
/sites/default/settings.php = 444?
/sites/default/files/ = ...
I don't think I need someone to catalog every single file, folder, and permission settings for me. I'm guessing that I can just set the root folder permissions to "apply to enclosed items" and then fix the few folders and files that need special settings.
I would really appreciate any contributions that can lead me back to sanity! :)
Scott
default install on my local machine has
-rw-r--r-- all php files
drwxr-xr-x directories
drwxrwxr-x files folder
-r--r--r-- settings.php file
I am quite late for the reply,but I ran into this problem and found a way out.
From Drupal's official handbook:
Copy this into a file and name it as "fix-permissions.sh"
#!/bin/bash
if [ $(id -u) != 0 ]; then
printf "This script must be run as root.\n"
exit 1
fi
drupal_path=${1%/}
drupal_user=${2}
httpd_group="${3:-www-data}"
# Help menu
print_help() {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:
1) Path to your Drupal installation.
2) Username of the user that you want to give files/directories ownership.
3) HTTPD group name (defaults to www-data for Apache).
Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}
# Parse Command Line Arguments
while [ $# -gt 0 ]; do
case "$1" in
--drupal_path=*)
drupal_path="${1#*=}"
;;
--drupal_user=*)
drupal_user="${1#*=}"
;;
--httpd_group=*)
httpd_group="${1#*=}"
;;
--help) print_help;;
*)
printf "Invalid argument, run --help for valid arguments.\n";
exit 1
esac
shift
done
if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
printf "Please provide a valid Drupal path.\n"
print_help
exit 1
fi
if [ -z "${drupal_user}" ] || [ $(id -un ${drupal_user} 2> /dev/null) != "${drupal_user}" ]; then
printf "Please provide a valid user.\n"
print_help
exit 1
fi
cd $drupal_path
printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n"
chown -R ${drupal_user}:${httpd_group} .
printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n"
find . -type d -exec chmod u=rwx,g=rx,o= '{}' \;
printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n"
find . -type f -exec chmod u=rw,g=r,o= '{}' \;
printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
cd sites
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n"
printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
for x in ./*/files; do
find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done settings proper permissions on files and directories"
Now run this script as:
sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name
Viola! Your permissions are automatically fixed.
A) It is not advisable to give any form of access to the world, even if it is just read access.
B) To give the owner of the file just a read access leads to complicated maintenance process (eg: most recommended, that Settings.php should be readonly to all), this will only increase your tasks whenever you want to modify the settings.
In nutshell:
- World need 0 access - not even to public folder.
- Your web server needs read only access for all files, except the public folder and tmp folder - these will be both read and write.
- Your file owner needs full access to all files - to keep maintenance simple
This however, will work best when file owner and webserver owner are 2 separate users, and you have ssh control over server and are able to modify the file ownership.
The below script will work when you have following directory structure:
Site Folder
Site Folder/conf (containing apache virtual host configuration files for this site)
Site Folder/htdocs (containing the site)
In this scenario: kalpesh is the file owner and daemon is the webservice owner - it may be www-data for your site.
I normally save such script in a .sh file and then add it to cron, so that whenever my team members upload new content on the site or update a module, the sites permission doesn't get compromised by their mistakes. Cron will execute the scripts and repair permissions every 24 hours.
cd ToSiteFolder
sudo chown kalpesh:daemon .
sudo chmod 750 .
sudo chown -R kalpesh_popat:daemon ./conf
sudo find ./conf -type d -exec chmod 750 {} +
sudo find ./conf -type f -exec chmod 640 {} +
sudo chown -R kalpesh_popat:daemon ./htdocs
sudo find ./htdocs -type d -exec chmod 750 {} +
sudo find ./htdocs -type f -exec chmod 640 {} +
sudo find ./htdocs/sites/default/files -type d -exec chmod 770 {} +
sudo find ./htdocs/sites/default/files -type f -exec chmod 660 {} +
sudo find ./htdocs/tmp -type d -exec chmod 770 {} +
sudo chmod 640 ./htdocs/sites/default/settings.php
sudo chmod 750 ./htdocs/sites/default
There is a blog that explains this beautifully and breaks many myths. https://technologymythbuster.blogspot.com/2018/06/misconception-about-file-ownerships-and.html