web-dev-qa-db-fra.com

Utilisateur, groupe et autorisations nécessaires pour les mises à jour principales

De quel utilisateur, groupe et autorisations de fichiers et dossiers ai-je besoin pour les mises à jour principales?

Configurations d'essai

J'ai tout essayé le manuel m'a recommandé de. Voici quelques configurations de test que j'ai utilisées, la configuration a été utilisée de manière récursive sur l'installation de WordPress.

  • Cas A: le propriétaire dispose d'autorisations de lecture/écriture.
  • Cas B: le propriétaire et le groupe ont des autorisations de lecture/écriture.

Tous les cas d'autorisation ci-dessus ont été essayés avec les configurations d'utilisateur et de groupe suivantes.

  1. Propriétaire: Apache | Groupe: Apache
  2. Propriétaire: Apache | Groupe: utilisateur FTP
  3. Propriétaire: FTPuser | Groupe: utilisateur FTP
  4. Propriétaire: FTPuser | Groupe: Apache

Résultats de test

  • 1A :

    Could not create directory.
    

  • 1B :

    Could not create directory
    

  • 2A :

    Could not create directory.
    

  • 2B :

    The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.: wp-admin/includes/update-core.php
    

  • 3A :

    Warning: touch(): Unable to create file /home/FTPuser/domains/domain.name/public_html/wordpress/wp-content/uploads/wordpress-4.tmp because Permission denied in /home/FTPuser/domains/domain.name/public_html/wordpress/wp-admin/includes/file.php on line 155
    Warning: unlink(/home/FTPuser/domains/domain.name/public_html/wordpress/wp-content/uploads/wordpress-4.tmp): No such file or directory in /home/FTPuser/domains/domain.name/public_html/wordpress/wp-admin/includes/file.php on line 457
    Download failed.: Destination directory for file streaming does not exist or is not writable.
    

  • 3B :

    Warning: touch(): Unable to create file /home/FTPuser/domains/domain.name/public_html/wordpress/wp-content/uploads/wordpress-4.tmp because Permission denied in /home/FTPuser/domains/domain.name/public_html/wordpress/wp-admin/includes/file.php on line 155
    Warning: unlink(/home/FTPuser/domains/domain.name/public_html/wordpress/wp-content/uploads/wordpress-4.tmp): No such file or directory in /home/FTPuser/domains/domain.name/public_html/wordpress/wp-admin/includes/file.php on line 457
    Download failed.: Destination directory for file streaming does not exist or is not writable.
    

  • 4A :

    Warning: touch(): Unable to create file /home/FTPuser/domains/domain.name/public_html/wordpress/wp-content/uploads/wordpress-4.tmp because Permission denied in /home/FTPuser/domains/domain.name/public_html/wordpress/wp-admin/includes/file.php on line 155
    Warning: unlink(/home/FTPuser/domains/domain.name/public_html/wordpress/wp-content/uploads/wordpress-4.tmp): No such file or directory in /home/FTPuser/domains/domain.name/public_html/wordpress/wp-admin/includes/file.php on line 457
    Download failed.: Destination directory for file streaming does not exist or is not writable.
    

  • 4B :

    The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.: wp-admin/includes/update-core.php
    

Ces mises à jour ont toujours été un gros problème pour WordPress, je tiens à clarifier ceci: trouvons une solution générale! L'installation est hébergée sur un serveur CentOS 6.6 exécuté avec DirectAdmin.

MODIFIER:

La configuration personnalisée sur wp-config.php que j’ai utilisée pour ces tests contient les éléments suivants:

$root='public_html';
define('FTP_USER','username');
define('FTP_PASS','password');

$addr=$_SERVER['SERVER_ADDR'];
$name=$_SERVER['SERVER_NAME'];
$Host=$_SERVER['HTTP_Host'];
$https=$_SERVER['HTTPS'];
$protocol=(!empty($https)&&$https!=='off'||$_SERVER['SERVER_PORT']===443)?'https://':'http://';
$abspath=(strpos(getcwd(),'/wp-admin')!==FALSE)?substr(getcwd(),0,strrpos(getcwd(),'/wp-admin')):getcwd();
$relpath=substr($abspath,strrpos($abspath,$root)+strlen($root));
define('WP_HOME',$protocol.$Host.$relpath);
define('WP_SITEURL',$protocol.$name.$relpath);
define('FS_CHMOD_DIR',(02755&~umask())); //FOR CASE A
define('FS_CHMOD_FILE',(0664&~umask())); //FOR CASE A
define('FS_CHMOD_DIR',(02775&~umask())); //FOR CASE B
define('FS_CHMOD_FILE',(0664&~umask())); //FOR CASE B
define('FS_METHOD','ftpext');
define('FTP_BASE',$abspath);
define('FTP_Host',$addr);
1
Fleuv

Ouais J'ai enfin trouvé une solution!

L'astuce consistait à définir tous les fichiers et dossiers de leur propriété et de leur groupe sur l'utilisateur Apache. Assurez-vous que vous avez un répertoire pour le stockage temporaire et que vous devez également disposer du répertoire ../wp-content/upgrade/. Ensuite, à votre wp-config.php, c’est la seule chose dont je ne suis pas au courant concernant la compatibilité. Mais vous aurez besoin de la constante FS_METHOD définie sur direct, comme le suggère @TheDeadMedic.

Pour rendre la vie plus facile, j’ai créé un script bash qui est assez facile à utiliser. Il mettra tout en place sauf le wp-config.php, vous devrez ajouter ce qui suit à ce fichier par vous-même.

// Some static information, so fill this in correctly.
$root='public_html';
define('FTP_USER','<username>');
define('FTP_PASS','<password>');

// This is dynamically configured. You won't have to edit.
$addr=$_SERVER['SERVER_ADDR'];
$name=$_SERVER['SERVER_NAME'];
$Host=$_SERVER['HTTP_Host'];
$https=$_SERVER['HTTPS'];
$protocol=(!empty($https)&&$https!=='off'||$_SERVER['SERVER_PORT']===443)?'https://':'http://';
$abspath=(strpos(getcwd(),'/wp-admin')!==FALSE)?substr(getcwd(),0,strrpos(getcwd(),'/wp-admin')):getcwd();
$relpath=substr($abspath,strrpos($abspath,$root)+strlen($root));
$tmppath=substr($abspath,0,-(strlen($relpath)+strlen($root))).'tmp';
define('WP_HOME',$protocol.$Host.$relpath);
define('WP_SITEURL',$protocol.$name.$relpath);  
define('FS_CHMOD_DIR',(02755&~umask()));
define('FS_CHMOD_FILE',(0644&~umask()));
define('WP_TEMP_DIR', $tmppath);
define('FS_METHOD','direct');
define('FTP_BASE',$abspath);
define('FTP_Host',$addr);

Que le script bash, cela fonctionne comme suit: bash script.sh $ 1 $ 2

  • $ 1 : choisissez une action à exécuter
    • help: Montrer comment utiliser ce script.
    • config: Configurez correctement une installation WP déjà existante, une installation installée dans le répertoire CURRENT.
    • new: Installez un nouveau WP CMS dans le répertoire CURRENT et configurez-le correctement.
  • $ 2 : nom du répertoire public, afin de pouvoir détecter où les fichiers sont privés. La valeur par défaut et la plus courante est public_html, laissez ce paramètre vide si votre serveur l’utilise également par défaut.

Et maintenant, le script bash lui-même! :RÉ

# If requested install WP
if [ "$1" = new ]; then
    wget https://wordpress.org/latest.tar.gz
    tar -xvf latest.tar.gz
    mv -f wordpress/* .
    rm -rf wordpress/ latest.tar.gz
fi
if [[ "$1" = help || -z "$1" ]]; then
    echo "Usage: install.sh \$1 \$2"
    echo "\$1: default=config, new=install new WP."
    echo "\$2: default=public_html, *=root folder (must be a parent)."
else
    # Define root directory
    if [ ! -z "$2" ]; then
        root=$2
    else 
        root='public_html'
    fi

    # Define root path
    dir=`pwd -P`
    tmp=${dir%%$root*}"tmp"

    # Define Apache user
    Apache_USER=$(ps axho user,comm|grep -E "httpd|Apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')

    # Create missing directories
    if [ ! -d "$tmp" ]; then
        mkdir "$tmp"
        chown -R "$Apache_USER":"$Apache_USER" "$tmp"
    fi
    if [ ! -d wp-content/upgrade ]; then
        mkdir -p wp-content/upgrade
    fi

    # Setup group and ownership for the installation
    chown -R "$Apache_USER":"$Apache_USER" wp-* index.php xmlrpc.php .htaccess

    # Make sure the chmoding is correct
    find wp-* index.php xmlrpc.php .htaccess -type f -exec chmod 644 {} \;
    find wp-* -type d -exec chmod 755 {} \;

    # Remove unwanted WP files
    rm -f license.txt readme.html
fi

TIP: pour le rendre disponible partout sur le système, placez-le simplement dans/usr/local/bin/lorsque cela sera fait, vous pourrez le faire. juste exécuter $ <script name> **$1 $2**. Assurez-vous que le "nom de script" est unique.

0
Fleuv