web-dev-qa-db-ja.com

ユーザーを変更すると、シンボリックリンクが期待どおりに機能しない

標準のUBUNTU16 LTSを使用して、シンボリックリンクが機能していません...アクセスを期待していた場所に「アクセスが拒否されました」と表示され、chownの後でも機能しません。

完全な例:

Sudo rm /tmp/file.txt  # if exist, remove

cd ~
Sudo chmod 666 data/file.txt
ls -l data/file.txt    # "-rw-rw-rw-" as expected
more data/file.txt     # working fine
Sudo ln -sf $PWD/data/file.txt /tmp/file.txt  # fine
ls -l /tmp/file.txt    # "lrwxrwxrwx",  /tmp/file.txt -> /home/thisUser/file.txt
more /tmp/file.txt     # fine

Sudo chown -h postgres:postgres /tmp/file.txt

Sudo more /tmp/file.txt   #  NOT WORK! but its is Sudo! and 666!
2
Peter Krauss

これらのアクションの結果、エラーメッセージが表示されます:アクセスが拒否されました。ディレクトリ/tmpには、スティッキービットを含む権限があります。このエラーは、fs.protected_symlinksのカーネル構成の結果です。

設定を表示するには、sysctl fs.protected_symlinks。これは、設定すると1に等しくなります。 推奨されない一時的に無効にするには、sysctl -w fs.protected_symlinks=0。完全にオフにするにはお勧めしません/etc/sysctl.confを使用します。

詳細については、 patchwork.kernel.org を参照してください。

リンク切れを回避するために、ハイパーリンクからのシンボリックリンクの主要な要約段落が続きます。

キースクック-2012年7月2日午後8時17分.

これにより、LinuxVFSにシンボリックリンクとハードリンクの制限が追加されます。

シンボリックリンク:

長年のセキュリティ問題のクラスは、シンボリックリンクベースのtime-of-check-time-of-useレースであり、/ tmpのような誰でも書き込み可能なディレクトリで最も一般的に見られます。この欠陥を悪用する一般的な方法は、特定のシンボリックリンクをたどるときに特権の境界を越えることです(つまり、ルートプロセスは別のユーザーに属するシンボリックリンクをたどります)。何百年にもわたる数百の例の不完全なリストについては、以下を参照してください: http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp

解決策は、スティッキーな誰でも書き込み可能なディレクトリの外にある場合、シンボリックリンクとフォロワーのuidが一致する場合、またはディレクトリの所有者がシンボリックリンクの所有者と一致する場合にのみ、シンボリックリンクをフォローできるようにすることです。

8
Christopher