web-dev-qa-db-ja.com

/ etcディレクトリを読み取り専用にするのは悪い考えですか?

Buildrootとinitramfsを使用して構築された組み込みシステムのセットアップがあります。これは、/etc/および/varディレクトリをマウントするための個別のext3パーティションと、データを格納するためのカスタムディレクトリを作成したコンパクトフラッシュデバイスで実行されます。これが良いアイデアかどうかは完全にはわかりませんが、システムログ出力にアクセスする必要があります。また、ここで静的IPアドレスを構成する必要があるため、/etc内のファイルを変更できる必要があります。 /etc/network/interfacesファイルを編集してIPを設定すると、/etcの内容を手動で編集する必要がなくなるため、デバイスがフィールドにないときにこのマウントを読み取り専用にするかどうか疑問に思いました。良い考えですか、それとも私のシステム上の他のアプリケーションが/etc内のファイルに書き込む必要がある可能性があるかどうか?私はかなり最小限のシステムを実行していますが、実際にはdropbearとbusybox(およびデバイスを制御するカスタムコントローラーアプリケーション)だけが実行されています。私はさまざまなフォーラムやサイトを見回してきましたが、このアイデアはあまり議論の余地がないようですが、私の知識はかなり限られています。読み取り専用としてマウントしてみるだけでもいいのですが、静かに壊れてしまう可能性があるので、悪い考えですか?

6

読み取り専用の/etcは、組み込みデバイスでますます一般的になっています。まれに変更される/etcは、デスクトップおよびサーバーのインストールでもますます一般的になり、/etc/mtab/etc/resolv.confなどのファイルは別のファイルシステムに配置され、/etcにシンボリックリンクされます(ファイルが/etcは、ソフトウェアをインストールするとき、またはコンピューターの構成を変更するときに変更する必要がありますが、USBドライブをマウントするとき、またはラップトップで別のネットワークに接続するときは変更しないでください。

新たな標準は、tmpfsファイルシステムを/runにマウントし、シンボリックリンクを/etcのようにすることです。

/etc/mtab -> /run/mtab
/etc/resolv.conf -> /etc/resolvconf/run/resolv.conf

既存のシステムまたは組み込みシステムでは、tmpfsが/dev/shmまたは/lib/init/rwまたは/var/runなどの別の場所にマウントされている場合があります。

/etcを読み取り専用にする場合の問題は、これにより、変更できるファイルのセットがロックされることです。

この問題を回避する別のアプローチは、ルートファイルシステムをinitramfsにすることです。これは、カーネルイメージの隣に保存され、ブートローダーによってロードされるアーカイブです。 RAMに解凍され、ファイルシステムのルートのルートになります。initramfsをそのままにしておく場合は、大きすぎないようにする必要があります(貴重なものを使い果たしているため) RAM)、ただし、BusyBoxバイナリといくつかの構成ファイルはRAMの許容可能な使用法である可能性があります。

別のアプローチは、読み取り専用のルートファイルシステムに加えて、読み取り/書き込みファイルシステムの ユニオンマウント を使用することです。

これはディストリビューション固有ですが、私が考えることができるいくつかのことがあります。

/etc/mtab/etc/adjtime、および/etc/resolv.confは、変更が必要な可能性のある一般的なファイルです。 /etc/motd/etc/issueも同様である可能性があります。 cupsは、その構成ファイルの一部もそれ自体で更新します。 /etcにもnologinファイルを作成したい場合があります。

ほとんどの場合、ファイルを/varの下のシンボリックリンクに置き換えることができます。

4

変更されているnothingがあることを確認してください。 (ls(1)によって報告された)最後の変更時間で十分です。現在の多くのLinuxディストリビューションは、すでに(またはほぼ)存在しているはずです。読み取り専用にして、ログで不満を探すことができます。

OTOH、/ etcはかなり小さいので、そのアカウントでR/Wスペースを無駄にすることはあまり意味がありません。

0
vonbrand