UnixドメインソケットC
を使用するDebianシステム用のデーモンプロセスを書いています。
デーモンプロセスの作業ディレクトリがルートディレクトリである場合、ソケットをファイルシステムに配置するための慣用的なディレクトリはありますか?
UnixドメインソケットC
を使用するDebianシステム用のデーモンプロセスを書いています。
デーモンプロセスの作業ディレクトリがルートディレクトリである場合、ソケットをファイルシステムに配置するための慣用的なディレクトリはありますか?
回答:
それらは通常、/tmp
またはそのサブディレクトリにあります。のすべてが/tmp
シャットダウン時に消去される可能性があることに注意してください。消去されるとは限らないことに注意してください。消去できることに注意してください。それを使用する場合は、毎回サブディレクトリを作成する必要があるかどうかを確認してください。は誰でも/tmp
読み取り可能であるため、アクセス権を使用してアクセスを制限する場合は、サブディレクトリを使用します。
/run
および/var/run
(シンボリックリンクされている場合があります)も同様に使用されますが、通常はtmpfsファイルシステムとしてマウントされます。つまり、ブート時に作成され、ディスクではなくメモリに常駐します(そのため、ダンプの場所として使用しないでください)大量のデータ)。実行時ソケットの場合、これはおそらく良い選択です。
/run
、およびここで説明されて いる他のすべてのディレクトリは、/tmp
rootのみが書き込み可能であることに注意してください。システムプロセスの場合はこれで問題ありませんが、アプリケーションが非特権ユーザーによって実行される可能性がある場合は、/tmp
どこかに永続ディレクトリを使用または作成し、そこにアクセス許可を設定するか、ユーザーの$ HOMEの場所を使用します。
インストール中に/usr/share
(または/usr/local/share
)にディレクトリを作成することができます。そこにあるディレクトリやコンテンツは、/tmp
やのようにブーツを越えて取得される可能性はありません/run
。ただし、jordanmがコメントで指摘しているように、/usr
読み取り専用でマウントされる場合があり、Linuxファイルシステム階層のガイドラインはこれを反映しています。もちろん、アプリケーションがインストールされている場合は読み取り専用にすることはできません。そのため、そこにソケットを作成してもかまわない場合は、そのままにして後で使用することができます(ただし、ソケットに書き込むことはできます)ファイルは読み取り専用です)。
/etc
システム全体の構成と再構成によく使用されるため、読み取り専用でマウントされないブート間でどこかに永続的にしたい場合は、かなり安全な方法です。OTOH、ルートファイルシステム全体の基礎となるデバイスが読み取り専用であるシステム(たとえば、組み込みシステム)を、/ tmpと/ runを別のデバイスに(おそらく:メモリー内のtmpfs)持つことができます。したがって、2つの最も堅牢な戦略は次のようになります。
アプリケーションのインストール時に、ソケットを永続的な場所にインストールします。
実行時/run
または/var/run
実行時にディレクトリを作成し、そこにソケットを配置します。
同じことをでのみ行い/tmp
ます。
最初のものの利点は、アプリがインストールされると、何に関係なく、使用するソケットがあることです。2番目の利点は、正気なプログラミングに役立つ可能性があることです。3番目の利点は、スーパーユーザー権限を必要としないことです。後で気が変わった場合、ある実装から別の実装に簡単に切り替えることができます。
最後に、BatchyXが登場したので、少なくともこのための構成オプションを提供し、デフォルトの選択にフォールバックする必要があります。
/run
または/var/run
、ルートプロセスにもよく使用されます。
/tmp
。よりもさらにtmpです。私はでそれを編集します。
/usr
読み取り専用としてマウントできます。実行時にファイルがそこに作成されることはありません。他の提案は良いです。
/tmp/.APPNAME/.APPSOCK
デーモンは永続的なデータを必要としないため、デフォルトの場所にすることにしました。
/tmp
とは/run
、rootだけが上の書き込み権限を持っていることです/run
。