읽기 전용 파일 시스템 - 고려 사항 및 기능 손실

읽기 전용 파일 시스템 - 고려 사항 및 기능 손실

저는 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를 패치해야 할 수도 있습니다: /etc/localtime -> /mnt/user/localtime -> /usr/share/zoneinfo ...

관련 정보