ApacheのオプションFollowSymLinks
とSymLinksIfOwnerMatch
。
Sambaには次のオプションがありますwide links
。
注:UNIX拡張が有効になっている場合、このパラメーターをオンにすると、UNIXクライアントは、共有定義によってエクスポートされた制限付きパスの外にあるファイルまたはディレクトリを指す共有にシンボリックリンクを生成できます。これにより、共有外部ゾーンにアクセスできます。この問題が原因で
unix extensions
このオプションがオンの場合、このパラメータは自動的に無効になります(ログファイルにメッセージが表示されます)。
allow insecure wide links
2 つのパラメーター間の結合を変更するには、このパラメーターを参照してください。
競合状態でSambaオプションをバイパスできますか?
そうでなければ、Sambaは競争条件をどのように防ぐことができますか?たとえば、競合状態を防ぐためにどのような作業順序を使用できますか?
答え1
確かにそうです以前は脆弱です。バラよりCVE-2017-2619。
これ修理するこのバグは、開こうとしているファイルを含むディレクトリを入力するopen_dir_safely()
ために使用されます。chdir()
getcwd()
私はこれがあなたがまだSamba共有にいることを確認するために使用できることを意味すると思います。少なくともこれはLinuxではうまく機能しますgetcwd()
。 Sambaがそれ以降に何をしているのかは確認できませんでしたchdir()
。
chdir()
プロセスに複数のスレッドがある場合、プロセス全体に影響を与えるため、それは良いことではありません:-). Linux固有のプログラムはopen()
このフラグを代わりに使用してO_PATH
から。readlink()
/proc/self/fd/
上記は、ファイルを含むディレクトリの保証を提供できます。保証するために文書名前をに渡すと、名前はリンクとして解決されませんopen()
。このフラグを使用できますO_NOFOLLOW
。その場合はいこれによりシンボリックリンクがopen()
返されますELOOP
。その後、readlink()
ファイルを直接処理し、シンボリックリンクを確認できます。これには、最初からプロセスを繰り返す操作が含まれます。 :-).
プロセスを「あまりにも」繰り返す必要がある場合は、失敗(ELOOP
再)を返すことができます。 (誰かが愚かな乞食として機能し、ファイルの間にファイルを繰り返し変更するため、あまりにも再試行する必要がある場合でもopen(... O_NOFOLLOW)
同様ですreadlink()
。)
Linux以外のオペレーティングシステムでは、非常に効率的なオペレーティングシステムがない可能性がありますgetcwd()
。もしそうなら、反復を通してこれを避けるO_PATH
ことができます。getcwd()
すべてルートセグメントを使用するには、O_PATH
+を使用しO_NOFOLLOW
てリンクを手動で解決してください。
将来、この問題は特定のフラグで解決される可能性があります。AT_PATH_BENEATHまたはO_BENEATH。