FreeBSDでSquidサービスUIDを変更するには?

FreeBSDでSquidサービスUIDを変更するには?

奇妙なことに、イカは次のような場合には起動しないようです。イカユーザーはUID 100の影響を受けません。別のPIDを使用しようとすると、次のエラーでサービスが体系的に開始されません。

2016/03/10 10:53:13| storeDirWriteCleanLogs: Starting...
2016/03/10 10:53:13|   Finished.  Wrote 0 entries.
2016/03/10 10:53:13|   Took 0.00 seconds (  0.00 entries/sec).
FATAL: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (17) File exists

Squid Cache (Version 3.5.15): Terminated abnormally.
CPU Usage: 0.026 seconds = 0.026 user + 0.000 sys
Maximum Resident Size: 48640 KB
Page faults with physical i/o: 0

通常、サービスPIDを変更する方法は次のとおりです。

  1. vi /etc/groupサービスのGIDを変更します。

    今後:

    squid:*:100:
    

    後ろに:

    squid:*:1234:
    
  2. vipwサービスUIDの変更:

    今後:

    squid:*:100:100::0:0:squid caching-proxy pseudo user:/var/squid:/usr/sbin/nologin
    

    後ろに:

    squid:*:1234:1234::0:0:squid caching-proxy pseudo user:/var/squid:/usr/sbin/nologin
    
  3. ファイルの所有権を復元するには、次の2つのコマンドを使用します。

    find / -uid 100 -exec chown -v squid {} +
    find / -gid 100 -exec chgrp -v squid {} +
    

ezjailが管理するFreeBSD刑務所にSquidをインストールしています。

ipcs -aIPCについて考えてみましたが、Squidが正しく実行されたときに使用するものが見つかりませんでした。

私も新しいきれいな刑務所で初めてイカカスタムUIDを使用している場合は、squidパッケージをインストールして最初から正しいUIDが使用されていることを確認してください。イカPID 100を持つユーザーは常に存在しますが、同じ問題が発生します。 (また、この問題は所有権の問題では発生しないと結論付けました。)UIDを100に設定すると、Squidが起動します。

複数のPID(101などの低PIDを含む)を試しましたが、すべて同じ動作を示しています。

私もsquid_userパラメータを試してみましたが、rc.conf運がありませんでした。イカまたは何も変わらないようです。

同じシステムにSquidがPID 100で実行される別の刑務所がありますが、それをオフにしても問題はまったく変わりませんでした(すべての場合、2つの刑務所間の干渉に非常に驚きました)。

答え1

わかりました、もう分かりました。複数回の検査を経てFreeBSDフォーラムで今、FreeBSD JailがSHMオブジェクトに関する限り、スイスのチーズと同様に動作することがわかります。実際、FreeBSD は SHM オブジェクトの分離をまったく提供しません。すべての刑務所はシステム全体のすべてのSHMオブジェクトにアクセスでき、これを防ぐ方法はありません。

したがって、この質問に記載されているエラーは非常に論理的です。

  • 他のUIDを使用すると、Squidは他のユーザーが所有しているSHMオブジェクトにアクセスしようとするため、起動に失敗し、エラーメッセージが表示されます。"shm_open(/squid-cf__metadata.shm) 作成に失敗しました: (17)存在するファイルです
  • 両方のインストールで同じUIDを使用するとSquidが正常に起動しますが、両方のインスタンスが同じメモリオブジェクトと競合して互いのデータを上書きし、シャットダウン時にオブジェクトを削除するため、状況が悪化する可能性があります。

したがって、各Squidインスタンスが異なるSHMオブジェクト名を使用するように特別な措置を講じる必要があります。

デフォルトでは、SquidはFreeBSDシステムから次のSHMオブジェクトを作成します(正確な動作はオペレーティングシステムによって異なります)。

/squid-cf__metadata.shm
/squid-cf__queues.shm
/squid-cf__readers.shm

squid-nインスタンスに特定の名前を割り当てることができるパラメータを提供します。特に、この名前は上記のSHMオブジェクト名の「squid」を置き換えるため、SHMオブジェクト名はシステム全体で一意になります。

したがって、新しい刑務所に新しいSquidインスタンスを設定するときは、次のエントリを編集して追加する必要があります/etc/rc.conf(「something_unique」をホストの一意のインスタンス名に置き換えます)。

squid_flags="-n something_unique"

これにより、それぞれ異なる UID を持つ 2 つの Squid サーバーを正しく起動できます。

明らかに、範囲外であっても、SquidのSHMオブジェクトがすべての刑務所から自由にアクセスできるという事実は、それ自体でセキュリティ問題を構成し、無視できません。

関連情報