Сделать /etc доступным только для чтения и записи

Сделать /etc доступным только для чтения и записи

Я имею дело с встраиваемым устройством под управлением Linux. Производители этого устройства настроили его так, что оно загружает корневую файловую систему как read-only.

Из /etc/mtab:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0

Это означает, что я не могу изменять какие-либо файлы в /etc, например, добавлять нового пользователя.

Я попробовал перемонтировать корневой каталог:

mount -o remount,rw -t squashfs /dev/root /

но я просто получаю сообщение об ошибке

mount: cannot remount block device /dev/root read-write, is write-protected

Я посмотрел эту ошибку, и люди говорили использовать blockdev. В системе не установлен blockdev, поэтому я скомпилировал его и скопировал. Затем я запустил

blockdev --setrw rootfs

но снова возникла ошибка:

blockdev: cannot open rootfs: No such file or directory

Можно ли сделать /etc доступным для записи, если он еще не доступен? У меня есть root-доступ к системе, но я не могу получить доступ к файловой системе «офлайн», все изменения должны быть сделаны с помощью команд Bash.

решение1

squashfsэто сжатая файловая система только для чтения. Она не предусматривает внесение изменений после ее создания. Поэтому вы не сможете записывать в нее, даже если базовое блочное устройство можно сделать доступным для записи. Вам нужно будет создать новый образ squashfs всей файловой системы с вашими изменениями игоретьего на устройство хранения, где хранится эта файловая система, что было бы проблематично сделать из работающей системы.

Другой вариант — смонтировать другую файловую систему на /etc. Это можно сделать с помощью объединения монтирования, если оно поддерживается ядром, которое обычно объединяет две файловые системы, при этом одна файловая система записывает только изменения вбазаФайловая система только для чтения.

Проверьте поддержку AUFS_FS или OVERLAY_FS в конфигурации ядра.

Например, для объединения каталога в /tmp(надеюсь, с возможностью записи, хотя, возможно, и tmpfsв памяти (чтобы не сохраняться после перезагрузки) в вашем случае, если в системе нет постоянного записываемого хранилища)

mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
      -o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
       overlay /etc

Затем /etcон будет доступен для записи, и внесенные вами изменения будут фактически сохранены в /tmp/etc/upper.

В качестве альтернативы, если вы хотите изменить только несколько файлов, вы можете смонтировать их с помощью bind-mount (да, вы можете смонтировать любой файл, а не только каталоги) из версии, хранящейся в файловой системе, доступной для записи:

cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd

Тогда /etc/passwdэто будет доступно для записи. Конечно, вы также можете сделать это для всего /etcвместо этого. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).

Связанный контент