サーバー上に、ユーザーが写真をアップロードできるように、アクセス許可を 777 (読み取り、書き込み、実行) に変更したフォルダーがあります。
知りたいのですが、これに伴うセキュリティリスクは何ですか?
アップロードできるファイル形式を制限するコードを実装しましたが、誰かがディレクトリの場所を見つけた場合、サーバーに脅威を与える可能性がありますか?
必要なファイルのアップロードを開始できますか?
ありがとう。
ユーザーが Web フォームと一部の PHP スクリプトを介してサーバーにファイルをアップロードする場合、サーバー上のディスク アクセスは、Web サーバーが実行されているユーザー ID (通常は nobody、www-data、apache、_httpd、さらには root) で発生します。
ここで、ファイルをアップロードするユーザーに関係なく、この単一のユーザー IDが使用されることに注意してください。
ssh
他の手段 (たとえば、) でシステムにアクセスするローカル ユーザーがいない限り、アップロード ディレクトリのアクセス許可を に設定し0777
ても、大きな違いはありません。システムの別の場所でセキュリティの脆弱性を悪用している誰かを除けば、誰もいません。これらのアクセス許可はいずれにせよ適用され、そのような攻撃者はおそらく単に/tmp
.
ファイルまたはディレクトリには、実際に必要なアクセス許可のみを設定することをお勧めします。この場合、それはおそらく次のようなことを意味します。
drwxrws--- 5 www-data www-data 4096 Nov 17 16:44 upload/
システム管理者や Web デザイナーなど、Web サーバー以外の他のローカル ユーザーがこれらのファイルにアクセスすることを想定しています。sudo
これらのユーザーを Web サーバーが実行されているグループに追加すると、そのディレクトリにアクセスするためのルート権限は必要ありません。また、+s
新しいファイルとディレクトリがupload/
同じグループによって自動的に所有されることを意味します。
最後の質問については、攻撃者がディレクトリの場所を知っているからといって、魔法のようにそこにファイルを表示できるわけではありません。ファイルを受け入れてそこに保存する何らかのサービスが実行されている必要があります...したがって、アクセス許可をに設定しても、0777
直接安全性が低下するわけではありません。
それでも、「安全性」と「セキュリティ」には、このセットアップ全体でファイルのアクセス許可で対処できない側面がいくつかあります。
...そしておそらくもっとあります。これらの問題のいくつかはアップロード スクリプトで対処したかもしれませんが、UNIX ファイルのアクセス許可とそれらが適用される場所を理解することは、通常、セキュリティの問題について学習する最初の段階で非常に重要です。考えられる問題の。
あなたのコードを誰かに見てもらいましょう!
これらのユーザーはどのような方法で写真をアップロードしていますか?Web経由の場合は、WebサーバーまたはCGIスクリプトユーザーにフォルダーへのアクセスを許可するだけで済みます。
ここでの最大の危険は、ユーザーが他のユーザーのファイルを上書きしたり、他のユーザーのファイルを削除したりする可能性があることです。このフォルダにアクセスできない人は誰もそのフォルダに書き込むことができません(ある種のゲスト/匿名ユーザーがいない限り)。
誰もがファイルを作成できるディレクトリが必要な場合は、/tmpディレクトリのアクセス許可を模倣する必要があります。
$ chown root:root dir; chmod 777 dir; chmod + t dir;
このようにして、すべてのユーザーがファイルを作成できますが、他のユーザーが所有するファイルを削除することはできません。
他の人が言ったこととは反対に、UNIXシステムのディレクトリの実行可能ビットは、そのディレクトリを現在のディレクトリにすることができることを意味します(それにcd)。実行とは関係ありません(ディレクトリの実行は無意味です)。実行可能ビットを削除すると、誰もそれに「cd」できなくなります。
他に何もない場合は、すべてのユーザーの実行権限を削除します (所有者とグループではない場合)。これを有効にすると、誰かが画像のように見えるが実際には実行可能ファイルであるファイルをアップロードする可能性があり、被害が後を絶たない可能性があります。
匿名アクセスが必要でない限り、すべてのユーザーの読み取りおよび書き込み権限も削除し、所有者とグループのみに制限する可能性があります。
実行可能ビットをオンにしたくない。* nixに関する限り、実行可能ビットは、実際にファイルを実行できることを意味します。したがって、たとえば、phpスクリプトをタイプJPEGとしてアップロードし、場所を知っていてWebディレクトリ内にある場合は、誰かがそのスクリプトを実行できます。