web-dev-qa-db-ja.com

コアアップデートに必要なユーザー、グループ、および権限

コアアップデートに必要なファイルおよびフォルダのユーザー、グループ、およびアクセス許可

テスト設定

私はすべて マニュアル を私に勧めてみました。これが私が使ったいくつかのテストセットアップで、セットアップはWordPressのインストールで再帰的に使われました。

  • ケースA:所有者は読み取り/書き込み権限を持っています。
  • ケースB:所有者とグループは読み取り/書き込み権限を持っています。

上記のすべての許可ケースは、次のユーザーとグループの設定で試行されました。

  1. 所有者:アパッチ|グループ:Apache
  2. 所有者:アパッチ|グループ:FTPuser
  3. 所有者:FTPユーザー|グループ:FTPuser
  4. 所有者:FTPユーザー|グループ:Apache

試験結果

  • 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
    

これらのアップデートは常にWordPressにとって大きな問題でした。これを明確にしてみましょう。インストールは、DirectAdminを実行しているCentOS 6.6サーバーでホストされています。

編集:

これらのテストに使用したwp-config.phpのカスタム設定には、次のものが含まれています。

$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

うん!私はついに解決策を見つけました!

トリックは、すべてのファイルとフォルダの所有権とグループをApacheユーザーに設定することでした。一時記憶用のディレクトリがあること、および../wp-content/upgrade/ディレクトリも必要であることを確認してください。あなたのwp-config.phpよりもこれが私がそれの互換性について知らない唯一のものです。しかし、@ TheDeadMedicが推奨するように、定数FS_METHODdirectに設定する必要があります。

使いやすくするためにbashスクリプトを作成しました。これは、wp-config.phpを除いて、すべて自分でこのファイルに追加する必要があります。

// 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);

Bashスクリプトよりも、これは次のように機能します。bash script.sh$ 1 $ 2

  • $ 1:実行するアクションを選択してください
    • help:このスクリプトの使い方を見せてください。
    • config:既存のWPインストールを正しく設定し、CURRENTディレクトリにインストールされているものを1つ設定します。
    • new:新しいWP CMSをCURRENTディレクトリにインストールしてから、正しく設定してください。
  • $ 2:パブリックディレクトリの名前なので、ファイルがプライベートである場所から検出できます。デフォルトであり、最も一般的なのはpublic_htmlです。サーバーがこれもデフォルトとして使用する場合は、このパラメーターを空のままにしてください。

そして今bashスクリプト自体! :D

# 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:システムのいたるところで利用できるようにするには、それを/ usr/local/bin /に置くだけです。 $ <script name> **$1 $2**を実行するだけです。 「スクリプト名」が一意であることを確認してください。

0
Fleuv