web-dev-qa-db-ja.com

PHPセッションディレクトリがいっぱいですか?

誰かが私にアドバイスをしてくれることを望んでいました。私はCentOS 6サーバーを実行しており、過去2日間でディスク使用量が60GBから135GB(98%フル)になりました。問題はPHPセッションディレクトリ(/ var/lib/php/session)に関係している可能性があります)これは巨大なようです(lsまたはrmはできない)。このディレクトリには何百万ものファイルがあります。

  1. このディレクトリを削除するにはどうすればよいですか? rmはここでは機能していません。空のディレクトリをrsyncで置き換えることも試みましたが、これも永遠にかかります。

  2. これが問題の原因である場合-PHPがこれらのファイルを自動的に削除しないのはなぜですか?

  3. エクスプロイト、DDOS、または失敗の方向を示す可能性のあるログがどこかにある可能性はありますか?

ありがとう

2
kinggs

Ubuntuのデフォルト設定は、PHPはセッションを期限切れにしませんが、古いファイルを削除するcronジョブがあります。これについての完全な議論には時間がかかります(IMHO、それは非常に悪い考えです)。ただし、Redhatが同様のアプローチをとっているのは知りません。

セッション構成の詳細を提供していません。この状況は、session.gc_probability、session.gc_divisor、またはsession.gc_maxlifetimeのいずれかの値が原因で発生する可能性があります。デフォルトの1、100、および1440を設定すると、他の回答で説明されているようにファイルをクリーンアップすると、合理的なホメオスタシスシステムが保証されます。

システムで表示される同時セッションの数、それらの平均サイズ、およびそれらが保存されているファイルシステムについては、まだ述べていません。約300を超えるセッションが予想される場合(ファイルシステムによって異なります)、ファイルを格納するために単一のディレクトリではなくディレクトリツリーを使用することを検討する必要があります。 session.save_pathの前に1または2を付けます(これがサーバーのクラスターをサポートするNFSサーバーではない場合、別のアーキテクチャーに移行する必要があると想定)。

Mattは、それがselinux設定である可能性があると述べています。これにより、ファイルの作成は許可されますが、削除されることはありません。これは可能ですが、システムの設定が深刻に混乱していることを示唆しています。これが当てはまる場合は(監査ログを確認してください)、おそらくクリーンインストールを行い、その上にアプリケーションを復元する必要があります。

悪いプログラミングとは何の関係もないでしょう。

0
symcbean

アプリケーションがセッションを作成しているようですが、セッションを破棄することはありません。これはプログラミングが不十分で、環境設定が不適切である可能性があります。

これらのセッションファイルを削除する場合は、ユーザーが所有していない可能性があるため、Sudoを使用する必要があります。

Sudo rm /var/lib/php/session/*

私はnotセッションディレクトリ全体を削除します。

もう1つは、PHPセッションタイムアウトをより短い間隔に調整することです。

1
Matt O.

Sudo find /var/lib/php/session -type f -deleteは、Sudo rm /var/lib/php/session/*よりも適切に機能します。これは、ファイルの大きなリストの場合、*の拡張はほとんど不可能であるためです。

1
Alex