web-dev-qa-db-ja.com

ルートファイルシステムを作成し、読み取り専用と書き込み可能に分割する最良の方法

私の目的は、ルートファイルシステムの主要部分が読み取り専用SDカードに格納され、書き込み可能な部分がrwに設定されたSSDにあるシステムを作成することです。これは、ルートファイルシステムを改ざんや破損から保護し、更新やその他のメンテナンスを事前に構成されたSDカードで交換することを目的として行われます。 Ubuntu 14.04 LTSを使用しています。

/ homeや/ varなどの世話をするための通常のパーティション分割とマウントには満足していますが、/ etcを扱うときはかなり厄介になります。 mtabなど、/ etcの一部は書き込み可能でなければならないことを知っています。また、ブート中に/ etcにアクセスすることも認識しています。また、ブート間で/ etcの一部を保持することをお勧めします。

/ etcでのみ、overlayfsを使用し、upperdirには永続化したいファイルのみが含まれるようにします。/etcから読み取るだけでよいものはすべて、lowerdirから取得されます。 upperdirは新しいファイルで書き込み可能になりますが、これらはホワイトリストで識別されている場合、ブートの間のみ持続します。シャットダウン時にスクリプトを実行して、これらのファイルをupperdirからホワイトリストにコピーし、ブートの直後(または必要に応じて)にその逆を行う必要があります。

編集

ホワイトリストは、upperdirに書き込まれ、ブート間で保持される新しいファイルを停止することを目的としています。これも管理にアクセス許可を使用します。

これは私が望む結果を達成するのに良い方法であり、私が知っておくべき問題は何ですか?

Mount --bindを使用して読みましたが、それ自体に問題があることを理解しています。/etc/mtabを/ proc/mounts /にシンボリックリンクする方法も知っており、このアプローチにも警戒しています。

どんな助けも大歓迎です、私はフォーラムで多くを読みました、そして、一般的なウェブ検索を通して、overlayfsの実装に関する詳細は実際に非常に乏しいです。物事を非常に複雑にしているのか、より良いアプローチがあるのか​​をお気軽にお知らせください。また、これは私の最初の質問ですので、親切にしてください!!

編集

私は少し曖昧で意見に基づいたタイプの質問をしていることに気付いたので、質問を言い換えるのではないかと考えました。

ユニオンマウント以外に、この種のシステムをセットアップする他の便利な方法はありますか?

2
Arronical

aufs(最終的にUnionFS)は古く、Ubuntuの新しいソリューションではoverlayfsです。 overlayfsの script は、14.04.1で流workedに機能しました。

したがって、スクリプトを/etc/initramfs-tools/scripts/init-bottom/root-roにコピーしてから、

#make the script executable
cmdod 755 /etc/initramfs-tools/scripts/init-bottom/root-ro

#add the module overlayfs to initramfs
echo overlayfs >> /etc/initramfs-tools/modules

#update initramfs
update-initramfs -u
update-grub

再起動して試してみてください。次にmountを発行すると、出力が表示されます。

overlayfs-root on/type overlayfs(rw)

/ mnt/root-rwおよび/ mnt/root-rooverlayfsの「下位」および「上位」レイヤーのディレクトリ。

また、grubメニューにoverlayfsなしでロードする機能を追加できます。

echo overlayfs >> /etc/initramfs-tools/modules
cp root-ro /etc/initramfs-tools/scripts/init-bottom/root-ro
chmod 755 cp /etc/initramfs-tools/scripts/init-bottom/root-ro

#########################GRUB#########################
cat /etc/grub.d/10_linux|sed  s/'linux_entry "${OS}" "${version}" simple'/'linux_entry "RW: ${OS}" "${version}" simple'/ |sed  s/'"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"'/'"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} disable-root-ro=true"'/ >/etc/grub.d/11_custom

sed -i.orig -e \
"/{GRUB_DISABLE_RECOVERY}\" != \"xtrue\" ]; then/s/^.*$/    \
if [ 0 ]; then/" \
/etc/grub.d/11_custom

sed -i.orig -e \
"/in_submenu=:/s/^.*$/    \
/" \
/etc/grub.d/11_custom

sed -i.orig -e \
"/\"Previous Linux versions/s/^.*$/    \
if [ 0 ]; then/" \
/etc/grub.d/11_custom

rm /etc/grub.d/11_custom.orig
#########################GRUB#########################

chmod 777 /etc/grub.d/11_custom
3
BBK

このシステムの実装についてもう少し詳しく説明しますが、これまでのところ順調に進んでいるようです。おそらく、クラッシュすることを意味します!

Overlayfsを使用してユニオンファイルシステムを作成することは、実行可能なソリューションのように見えますが、ブート時から開始するスクリプトの問題にはまだ取り組んでいません。ただし、プロセスのこの部分を実行する方法に関するドキュメントはたくさんあります。

@Rinzwindによって上に投稿されたリンクは本当に賢明なガイドであり、ここで繰り返されます。 http://www.logicsupply.com/blog/2009/01/27/how-to-build-a-read-only-linux-system/

0
Arronical