LinuxシステムでのJoomlaファイル/ディレクトリのアクセス許可と所有権に関する推奨プラクティス


26

過去に、Linuxシステム上のJoomlaファイル/ディレクトリのパーミッションと所有権で問題に遭遇することがよくありました。

含まれる問題

  • WinSCPなどのプログラムを使用してファイルをサーバーに転送できない。
  • Joomla拡張機能、プラグインなどをインストールできない
  • 危険な権限と所有権の設定が原因で安全でないファイルとフォルダー。

LinuxシステムのJoomlaで権限と所有権を設定するための推奨ベストプラクティスは何ですか?

回答:


22

Linuxホスティングでのファイルとフォルダーのアクセス許可の問題には、いくつかの潜在的な原因があります。

1.ファイルとフォルダーのアクセス許可

フォルダーの許可を0755に設定し、ファイルの許可を0644に設定します。ファイルおよびフォルダーの許可は、Akeeba Admin Toolsの無料版または有料版を使用してサイト全体でこれらの標準の安全な設定にリセットできます。

2. PHPパラメーター

[システム情報]の[PHP情報]タブにあるupload_max_filesizeパラメーターを確認してください。多くの場合、cPanelのPHP設定またはカスタムphp.iniファイルを使用して、共有ホスティング環境のデフォルト設定をオーバーライドできます。

3. configuration.phpの不正なパス

tmpおよびlogsフォルダーに誤ったパスが指定されている可能性があります。これらはシステム構成で指定されていますが、システムファイルを直接編集するのが快適な場合は、configuration.phpファイルで直接更新できます。パスがどうあるべきかわからない場合はwhereami.php、次の内容のファイル(または同様のファイル)を作成してWebサイトのルートフォルダーにアップロードします。

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

参照し[mywebsite].com/whereami.phpて、ルートフォルダへのパスを確認します。

正しいパスを取得したら、忘れずにwhereami.phpファイルを削除してください。

4.不適切なPHPファイルハンドラー

WebホスティングはデフォルトのPHPファイルハンドラーを使用して構成できますが、Joomlaが安全なファイルアクセス許可を使用してファイルをアップロードおよび実行できるように、理想的にはsuPHPまたはFastCGIなどを使用する必要があります。

で使用されているPHPハンドラを確認できますSystem -> System Information -> WebServer to PHP Interface

PHPファイルハンドラーの相対的なメリットに関する良い記事は、http//boomshadow.net/tech/php-handlersにあります。

共有ホスティング環境では、通常、どのPHPファイルハンドラーを有効にするかを変更するアクセス権はありませんが、Webホスティング会社がこれを変更できる場合があります。

回避策として、ファイルとフォルダーのアクセス許可を0777に変更することもありますが、これによりWebサイトが脆弱な状態になり、0777のファイルアクセス許可は一般的に回避する必要があります。

Webホスティング会社がsuPHPまたはFastCGIを有効にできない場合、他の唯一のオプションは新しいWebホスティング会社を見つけることです。

5.ディスク容量

ディスク容量のクォータを超えていないことを確認してください。

トラブルシューティングチェックリスト

LinuxシステムのJoomlaで権限と所有権を設定するための推奨ベストプラクティスは何ですか?

1および4を参照してください。

WinSCPなどのプログラムを使用してファイルをサーバーに転送できない。

1、2、おそらく4、5を参照してください。

Joomla拡張機能、プラグインなどをインストールできない

1、2、3、4、5を参照してください。

危険な権限と所有権の設定が原因で安全でないファイルとフォルダー。

1および4を参照してください。


1
私の場合、PHPハンドラーが問題の大きな部分を占めていたと思います。
TryHarder 14

1
+1あなたの答えは実際には私の問題を解決しませんでしたが、サーバーのPHP設定をチェックすることに触発されました-セーフモードで、有効になっていることが判明 したがって、それをオフにすることで解決策となりました。将来の読者のために、上記のいずれも修正されていない場合は、セーフモードも確認してください:)
Mohammed Joraid

12

許可レベルを確認してください。ファイルとフォルダーはそれぞれ644と755でなければなりません。

いくつかの問題に直面した場合でも、多くの場合、許可レベルは問題ありません。特定のファイルとフォルダの所有権とグループ確認する必要があることを意味します。通常、グループと所有権は、Apacheのwww-dataに変更できます(ubuntuベースのWebサーバーで使用)。

ファイルのアクセス許可の確認に基づいて、この興味深いJoomlaドキュメントを自由にチェックしてください


Joomlaは通常グループwww-dataに属しますか?
TryHarder

1
Shyamの答えとともに、SuPHP Apacheモジュールを使用します。拡張機能がインストールされたときに、それらのファイルをFTP経由で変更したり、その逆を行うことができないことがわかりました(ファイル所有権の問題)。SuPHPは、PHPスクリプトが所有者の許可で実行されるようにすることでこれを修正しました。
ザカリードレーパー14

1
apacheプロセスは、Unixグループの「www-data」の下で実行されます。joomlaだけでなく、すべてのApacheベースのアプリケーション。
シャム14

すべてのファイル許可を自動的に修正するシェルスクリプトを開発して実行することは可能ですか?
NivF007 14

1
はい。gist.github.com/ssv445/11204300 cronでスクリプトを実行できます。
シャム14

8

私にとって簡単な解決策は、PHPを(高速)CGIモードで実行し、Joomlaディレクトリの所有権をFTPユーザーに設定することです。したがって、FTP経由でファイルをアップロードおよび上書きすることができ、Joomlaもファイルを書き込むことができます。

共有ホスティング環境でこれを行う方法(許可されている場合)は、.htaccessファイルに次のようなものを追加します。

AddHandler php53-cgi .php

さまざまなモードの概要も参照してください。


7

Shyamが説明したように、許可は644および755でなければなりません。

Joomlaでは、次の方法で、あなたが言及したすべての問題を回避できます。

WinSCPなどのプログラムを使用してファイルをサーバーに転送できない。

  • これは、Joomla configuration.phpがデフォルトで許可していない(セキュリティのため)この許可を持っているなど、(444)の許可が原因で発生する可能性があります。
  • この同じエラーの別の状況は、あるサーバーから別のサーバーにサイトまたはフォルダーを転送するときです。

Joomla拡張機能、プラグインなどをインストールできない

  • これは、temp/logフォルダの不正なアクセス許可が原因で発生します。(755が必要です)

  • または別の理由は、temp/logパスが間違っているconfiguration.php

危険な権限と所有権の設定が原因で安全でないファイルとフォルダー。

  • これは最も重要なことです。Joomlaは、これに気付いていない場合は、ファイルとフォルダーに777を使用しないことを常に推奨します。

その助けを願っています..


7

Shyamが説明したように、許可は644および755でなければなりません。

直面している問題は、サーバーのセットアップ方法に関連している可能性が高いです。ほとんどの場合、これはApacheがFTPアカウントとは異なるユーザーで実行されている共有ホストで発生します。通常、FTPを使用してJoomlaをアップロードするため、Apacheはファイルの所有者ではないため、変更に必要な権限がありません。

Joomlaには、この問題を回避できるFTPモードがあります。Joomlaグローバル設定で有効にできます。その後、通常のApacheユーザーの代わりにFTPユーザーを使用して、すべてのファイルアクセスを行います。

ただし、より良い方法は、ホストに問題の修正を依頼することです。PHP(Apache)をセットアップして、特別なユーザー(このような場合はFTPユーザー)で実行することができます。その後、すべてが正常に動作します。


あなたがPHPのための特別なユーザーを持つことは、特にFTPユーザーと一致する場合、これを解決するというあなた/グループが答えです。
jackJoe 14

5

はい、Shyamの説明のとおり、許可は644および755である必要がありますでが、他の投稿者は、これがファイルがWebサーバーによって所有されており、グループが所属するグループであることを忘れています。

たとえば、FileZillaでは、次のようなアクセス許可が表示されます。

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

権限drwxr-xr-xは755です(先頭のdrを無視して、wxr-xr-xにします)。読み取りアクセス許可は4の価値があり、書き込みアクセス許可は2の価値があり、実行アクセス許可は1の価値があります。したがって、それらをすべて合計すると7になります。グループには読み取り権限と実行権限がありますが、書き込み権限はありません。したがって、グループには5があり、すべてのユーザーにも5があります。

754は、読み取り、書き込み、実行の所有者になります。読み取りと実行を行うグループ、および読み取り権限のみを持つ全員。

上記の例では、ファイルの所有者はwww-data(多くのApacheサーバーのデフォルトのWebサーバーグループ)であり、グループはグループmyGroupであり、これは私が所属するグループ(admins)です。

最初の番号は所有者の許可、2番目はグループの許可、3番目の番号は全員の許可です。明らかに、Webサーバーに必要なアクセス許可を与えるように注意する必要があります...そして、ロックダウンする必要のあるファイルがだれか(3番目の数字)だけによって書き込まれたり実行されたりしないようにしてください。数値の意味は次のとおりです。

Webサーバーがファイルを所有していると仮定すると、管理者はグループに属し、もちろん全員が3番目の番号になります。

644:644に設定されたアクセス許可を持つファイルは、すべてのユーザーが読み取り可能で、ファイル/フォルダーの所有者のみが書き込み可能です。

755:755に設定されたアクセス許可を持つファイルは、誰でも読み取りおよび実行できますが、ファイル/フォルダーの所有者のみが書き込み可能です。

777:パーミッションが777に設定されたファイルは、誰でも読み取り、書き込み、実行できます。セキュリティ上の理由から、絶対に必要な場合を除き、一時的にのみ、Webサーバーでこのアクセス許可のセットを使用しないでください。特にディレクトリにこれらの権限がある場合は、災害が発生するのを待っています。誰でもファイルをアップロードして実行できることを意味します。

Joomla!をセットアップするLinuxコマンドは次のとおりです。コマンドラインからの推奨パーミッション。推奨されるJoomlaファイルのアクセス許可

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

注-多くの人はこれらのコマンドをパスなしで表示しますが、ルートJoomla!にディレクトリを変更するのを忘れた場合は常に完全なパスを使用することをお勧めします。パスなしでインストールディレクトリを実行し、そのトップディレクトリ内のすべてのファイルとディレクトリのアクセス権を変更し、巨大な混乱を作成しました。

これらのコマンドを実行した後、より多くのアクセス許可が必要なディレクトリのアクセス許可を修正する必要があります...例えば...画像をアップロードするユーザーなど。

JOOMLAのみを使用する場合!インターフェース、およびサーバーへの管理者またはFTPアクセスを持っていない場合は、上記の所有権と権限を使用してください。

あなたが初心者ならここでやめてください。以下は、許可と所有権が何をするかを本当に理解している人だけのためです。

ただし、ほとんどの場合FileZillaとターミナルセッションコマンドラインを使用するのが好きで、手動で多くのファイルをアップロードするため、所有権とアクセス許可が非常に手に負えないと感じています。しかし、ファイルを所有しておらず、書き込み権限がないため、ファイルを上書きできません。FileZillaをWebサーバーアカウントでログインさせることもできますが、FileZillaを自分のアカウントでログインさせたいので、Webサーバーがアクセスできるファイルだけでなく、他のディレクトリも参照できます... SO ...私はこれに所有権と許可を変更します:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

自分を所有者にして、Webサーバーをグループに追加します。ディレクトリのアクセス権を775に変更し、ファイルのアクセス権を664に変更します。みんな。

あなたが私のやり方でそれをするなら、これらはコマンドです:

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  

「drwxr-xrと-xは755です」 -これは、751(公共の読み取りパーマを逃す)されるだろう、ない755(755は、ディレクトリのためのより多くの「普通」になりますが。)
MrWhite

4

他の答えは、何をすべきかについての良い説明を提供します。すでにコンポーネントをアップロードしていて、ftpでファイルにアクセスできない場合にのみ、権限を修正するスクリプトを追加したいと思います。

この場合、このファイルをfix.phpFTPサーバーとしてアップロードし、ブラウザーで開きます。http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

このスクリプトは、すべてのファイルのアクセス許可を666に、すべてのディレクトリのアクセス許可を777に設定します。WorldWritable は共有ホストのアクセス許可の最適なセットではありませんが、ファイルに再度アクセスでき、FTPで正しい値に設定できます。


1

パーティーに遅れて。ここでは、他の場所と同様に、joomlaで書き込み可能なフォルダーを決定するガイドを探しに来ました。

悪いニュースの前触れである人々をすみません。

すべてのディレクトリに755、すべてのフォルダに644のアクセス許可を使用することは、少なくとも無責任です。です。

すべてのフォルダーとファイルの所有者を書き込み可能にすることは、所有者がWebサーバーでない限り問題ありません(apacheなど)。

これは一般的に推奨される慣行であることがわかっていますが、それは良い慣行ではないことを保証できます。フォルダへの書き込み機能を付与する最後のソフトウェアは、Webサーバー自体です。まだパッチが適用されていない(または見つかっていない)エクスプロイトを利用するためにハッカーが使用するWebサーバー。

.htaccessがKevinを救うと思いますか?あなたがウェブサーバーの書き込みアクセスを許可したので忘れてください、私たちの親愛なるハッカーの友人は、彼らが望むどんなパーミッションでも彼らに彼ら自身の.htaccessファイルを作成することができます!ああ、私はUmmがサーバーによって実行可能な.jpgファイルを作成することを知りません。そして、あなたは.phpの実行に対する保護があなたのAをカバーすると思っていました。

ただし、書き込みアクセスを必要とするフォルダーのみが実際にそれを持っていることを確認してください。次のフォルダーの場合は755および644。

public_html/images
public_html/cache
public_html/tmp

そして、すべての書き込み可能なフォルダー(上記のような)に対してAllowOveride noneで.htaccessファイルをオフにしてください。

これはあなたが制御できない構成要素であるため、共有ホスティングの皆さんにとって幸運です。

.htaccessファイルを読み取り専用にすると役立つとは思わないでください。ハッカーの友人が新しいフォルダを作成できる場合(作成できる場合)、独自の.htaccessを作成できます。

神聖なものすべてのために共有ホスティングを実行している人のために、セキュリティについての手がかりを得てください。

セキュリティを理解していない場合は、ホスティング事業から抜け出してください。

さて、書き込みアクセスが必要なフォルダに関する決定的なガイドの検索に戻ります...


Chrisに感謝しますが、おそらく標準の755および644のファイルアクセス許可に固執するでしょうが、これは公式のJoomla WebサイトおよびSucuriなどのセキュリティ専門家によって推奨されています:docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ …
ニールロバートソン

はい、私はその「推奨」を知っていますが、悪用され、なぜ悪用されたのかを解明したら、ウィンドウから「推奨」を捨ててゼロから始めることを保証できます。推奨事項は、最小の抵抗のパスです。最も安全ではありません。
DeveloperChris

joomla.stackexchange.com/a/180/120にあるKooming a Joomla Website Secure」リストのステップ1から10は、標準ファイル許可とともに、私が探していた50ほどのWebサイトで正常に機能しています。ここ数年。もちろん、走行距離は異なる場合があります。
ニールロバートソン

@NeilRobertson私はそのリストに同意しますが、それによってトラップされないエクスプロイトがある場合、あなたの最後の防御はウェブサーバーに書き込み許可を与えないことです(apache et al)。ちなみに、これはjoomla固有のアドバイスではありません。また、ほとんどの人はそのリストの推奨事項の多くを実装できません。彼らは単にリソースを持っていないか、安価な(最も安くない)ホスティングを使用しています。
DeveloperChris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.