私はBuildrootを使用して組み込みシステムを作成しています。現在の私のBuildroot設定は、起動中にrootfsが読み取り/書き込みとして再マウントされるようにします。しかし、私はこの機能を削除し、rootfsを読み取り専用にしておきたいと思います。
これについていくつかの質問があります。
ユーザーのパスワードをどのように変更しますか?これを行うには、/etc/passwdと/etc/shadowを変更する必要があります。
タイムゾーンを変更するには?これを行うには、/ etc / localtimeを変更する必要があります。
SSHD用のSSHキーを作成するには? ssh-keygenは/ etc / ssh /にキーを生成します。
ファイルシステム階層標準によれば、Linuxシステムが動作するには読み取り専用の/ etc /ディレクトリが必要ですが、上記のように機能が大幅に失われているようです。
次に、Buildroot 構成で rootfs が読み取り専用のままであることを指定した後、/var/ を tmpfs (RAM にあるので書き込み可能) としてマウントすることを選択しました。
しかし、これは不安定です。再起動や予期しない停電時に保存する必要があるランタイムファイルが失われないようにするにはどうすればよいですか?
私は組み込みシステムでUBIFSを使用しています。永続ストレージとして使用するには、読み取り/書き込み UBI ボリュームを作成する必要がありますか?これが組み込みシステムの標準ですか?
最後に、読み取り専用のrootfsを使用したいという考えを再評価する必要がありますか? UBIを使用していて、すべてのUBIボリューム(もちろん同じデバイスに存在する)にウェアレベリングが実装されているので、rootfsを読み取り専用にすることにはどのような利点がありますか?
ベストアンサー1
ファイルシステムを読み取り専用でマウントしたままにすると、予期しない方法で修正されることはまったく発生しません。
特定の操作を許可するには、特定のファイルシステムパーティションが必要です。 - システムパーティション:読み取り専用 - ユーザーパーティション:書き込み可能
ユーザーパーティションが失われると、内蔵デバイスをデフォルト状態に復元できますが、デバイスに永久にアクセスできなくなるわけではありません。
特定の操作(パスワードの変更など)を許可するには、特定のファイルをユーザーパーティションにシンボリックリンクする必要があります。 - /etc/passwd -> /mnt/user/passwd - /etc/ssh -> /mnt/user/ssh - /etc/localtime -> /mnt/user/localtime
パスワードアクセスをより確実にするには、passwdをtmpfsにリダイレクトし、起動中にユーザーパーティションからパスワードを取得することをお勧めします。
このアプローチは、タイムゾーンに関連する問題を引き起こす可能性があります。デュアル接続でエラーが発生した場合は、/ mnt / user / localtimeを直接使用するようにtzdataにパッチを適用する必要があります。