
私はUbuntu 11.10システムを起動し、apt-get install apache2 php5
そのシステムにapache2とPHP 5のインストールを実行しました。これで「Webサーバー」として実行され、「It Works!」ページがロードされます。これでセキュリティを強化しようとしていますが、Linux Webサーバーについて次の質問があります。
- Apacheは誰で実行されるべきですか?
- このユーザーはどのグループに属する必要がありますか?
- PHP(およびApache?)をファイル所有者として実行できるパッケージは何ですか? (共有Webホストと同じように)このパッケージを使用する必要がありますか?小規模なシステムでこれを維持するのは簡単で、妥当ですか?
- Apacheの実行中にファイルとフォルダをネットワークに提供するための基本的な権限は何ですか
www-data
?ユーザーとして実行されるApache / PHPの場合?
デフォルト設定を確認するときは、次のことを行いました。
ファイル構造
私が見るコンテンツをcd /
リストすると、次のようになります。ls -al
/var
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
私がcd
入ってvar
みるとls -al
:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
最後に、内部は次の/var/www
ようになります。
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
重要なのは、これまでのところ、これらすべてのファイルが属しており、ファイルのroot:root
権限は644、ディレクトリの権限は755ということです。
Apache権限
/var/www/test.php
次の内容でrootとしてファイルを生成する場合:
<?php echo shell_exec('whoami');
そして、ファイルをブラウザにロードすると、www-data
これがファイルと同じであることがわかります/etc/apache2/envvars
。
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
これにより、ps aux | grep -i apache
次のようになります。
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
それでは、Apacheは誰で実行されますか?最初のプロセスはシステムの起動時にスクリプト内のままでroot
ある可能性/etc/init.d/apache
があり、他のプロセスはwww-data
最初のプロセスで作成されたように見えます。そうですか?
次のように入力すると、グループにのみ存在するように見えますgroups www-data
。私はこれが標準的な慣行だと思います。www-data : www-data
www-data
共有ホスティングとセキュリティ
したがって、私が正しく理解したら、Apacheが実行されていてApacheがディレクトリをwww-data
読み取ることができるようにするには、x
world(other)グループo+x
(チェーンの下にディレクトリを上に(、)www
)var
しo+r
ます。
残念ながら、これは同じLinuxシステム上の複数のアプリケーションおよび/または複数のユーザーにセキュリティホールを引き起こすと思います。すべてのWebファイルは誰でも読むことができる必要があるため、他のアプリケーションやシステムの他のユーザーが読み取ったりアクセスしたりできます。システムにインストールされているアプリケーションに検証されていない生のユーザー入力(PHPで実行)を許可するセキュリティ上の脆弱性がある場合、リモート攻撃者はWebシステムで読み取り可能な他のすべてのファイルを閲覧する可能性があります。同様に、ボックスに複数のユーザーがあり、あるユーザーが別のユーザーのWebファイルパスを知っている場合、そのユーザーはファイルの内容を読み取ることができます(データベース接続文字列などの機密コンテンツも表示できます)。
共有システムでユーザーのファイルを「現状のまま」使用できるようにするsuphp
2つのソフトウェアパッケージについて聞きました。phpsuexec
これの利点の1つは、Webアプリケーション(WordPressなど)がファイルを作成および変更できることです。これはテーマ、プラグインの追加、ソフトウェアのアップグレードに非常に便利です。もちろん、これらの作業を手動で実行する方が安全ですが、上記のパッケージのいずれかを使用すると長所と短所がありますか?それとも、chown
それが属するWordPressディレクトリグループを作成し、www-data
グループに固定ビットを設定することによって(g+s
)?
私はこれをWebホスティング会社のエンドユーザーとしてのみ使用してきたので、その内容を詳しく知らず、小規模システムにインストールするのに適しているのか、それを使用する必要がある他のセキュリティ対策もあるかもしれません。私はそれが私の懸念のいくつかに対する可能な解決策であるように見えるので、ここで言及する必要があると思います。
質問に戻る
- Apacheは誰で実行されるべきですか?
- このユーザーはどのグループに属する必要がありますか?
- PHP(およびApache?)をファイル所有者として実行できるパッケージは何ですか? (共有Webホストと同じように)このパッケージを使用する必要がありますか?小規模なシステムでこれを維持するのは簡単で、妥当ですか?
- Apacheの実行中にファイルとフォルダをネットワークに提供するための基本的な権限は何ですか
www-data
?ユーザーとして実行されるApache / PHPの場合?
答え1
- ルートではない
- ルートではない
- 数を実行
- 頼る。ファイルの場合は644、フォルダの場合は755が安全なデフォルトです。
PHPがファイル/フォルダの内容を編集できるようにしたくない限り、所有権をwww-dataに変更しないでください。
何をしても:フォルダには、ファイルを見つけるにはユーザーの読み取りおよび実行権限が必要です。コンテンツの変更中に権限エラーが発生した場合は、基本的に必要な権限を正常に削除しました。
PHPアプリケーションを介してファイルを作成しない場合は、現在持っているファイルをそのまま残すことができます。この場合、World License(xx4/5)が適用されます。
ファイルを所有している場合:ファイル権限は644(ファイル)です。ただWebサイトファイルを編集できます。 www-dataはあなたではないため、ファイルを編集することはできません。
Apache +あなたへのアクセスを制限し、他のすべてのアクセスをブロックしたい場合chown -R you:www-data *
。ファイル権限は640、フォルダ権限は750で編集でき、www-dataを読むことができます。これは、Apacheがグループ権限(x4/5x)を読み取ることができるからです。
apache / phpが書き込むことができるパスを最小限に抑える - アプリケーションがtmpディレクトリに書き込む必要がある場合 - 書き込みを許可するこのフォルダのみ- 書き込み可能な場所は可能であれば確認してください。外部ルートを文書化するか、この書き込み可能なパスがWebからアクセスされないようにしてください。
「あなた」はいいえ根になるルートとして直接SSHアクセスを許可することは、他のセキュリティの脆弱性を示す指標です(例:いいえパスワードログインを無効にする)しかし、それ自体が多くの問題を引き起こします。
答え2
したがって、私が正しく理解したら、Apacheがwww-dataとして実行されていてApacheがディレクトリを読み取ることができるようにするには、xビットをworld(other)グループ(o + x)に設定する必要があります。これも必要です。チェーンのすべての親のディレクトリ(www、var)で設定を指定します。 Apacheがファイルを読み取ることができるようにするには、o + rビットを設定する必要があります。
rwx
これは真ではないため、「その他」に設定する必要はありません。保護する特定のフォルダ/ファイルの所有者および/またはグループを変更する必要があります。たとえば、
chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com
これで、グループのメンバーだけがwww-data
読むことができます/var/www/cwd.com
。そして、あなた(cwd)だけがここに書くことができます。アプリケーション(Apache経由)がそのディレクトリのファイルを書き込んだり変更したりできるようにするには、そのディレクトリを770にchmodすることができます。
これがあなたのすべての質問に対処していると思います。 Apacheを実行しているユーザーを変更する理由はありません。