標準の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!
これらのアクションの結果、エラーメッセージが表示されます:アクセスが拒否されました。ディレクトリ/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が一致する場合、またはディレクトリの所有者がシンボリックリンクの所有者と一致する場合にのみ、シンボリックリンクをフォローできるようにすることです。