Как использовать chown в смонтированной файловой системе

У меня есть корневая файловая система RFS1, которая имеет свои группы и пользователей и в настоящее время используется ядром. Я монтирую другую корневую файловую систему RFS2, у которой есть свои группы и пользователи. Как запустить chown для файла/каталога в RFS2, чтобы создать владельца из групп, перечисленных в /etc/groups RFS2. Я выполняю chown, пока ОС (linux) использует RFS1.


person Mukul Mehra    schedule 05.05.2020    source источник
comment
Если вы знаете идентификаторы пользователей в RFS2, вы можете использовать их с chown. chown принимает идентификаторы пользователей: chown 123 filespec.... или также для групп: chown 123:200 filespec....   -  person lurker    schedule 06.05.2020
comment
У меня есть groupid и имя пользователя. groupadd и useradd успешно создают группу и пользователя внутри RFS2 и вносят записи в /etc/group и /etc/passwd RFS2. Но chown при выполнении проверяет, присутствуют ли группа и владелец внутри etc/group RFS1 и не проверяет наличие etc/group RFS2.   -  person Mukul Mehra    schedule 06.05.2020
comment
Это интересно. Никогда не понимал, что насчет useradd и groupadd. На самом деле я ожидал, что они будут использовать назначенный системный диск. Разве файл паролей для RFS2 не похож на /mount-path/etc/passwd? Я не вижу никаких вариантов в chown для выбора другого диска, поэтому вам, возможно, придется использовать необработанные идентификаторы.   -  person lurker    schedule 06.05.2020
comment
Useradd и группы имеют параметр -R для изменения корневого каталога. К сожалению, выбрано нет. У меня есть groupid и имя пользователя. Сработает ли это? Как я уже упоминал, этот идентификатор будет внутри rfs2, а не внутри rfs1.   -  person Mukul Mehra    schedule 06.05.2020
comment
Ах, я пропустил этот вариант -R. Вы можете получить идентификатор пользователя из файла паролей RFS2, учитывая имя пользователя (вы можете использовать sed или grep и cut, если хотите сделать это программно). Затем вы можете использовать как идентификатор группы, так и идентификатор пользователя в chown. Или, может быть, вы могли бы сделать chroot для RFS2, сделать chown так, как вы хотите, а затем chroot вернуться к RFS1.   -  person lurker    schedule 06.05.2020
comment
Я не уверен в точных шагах для выполнения chroot. Создание заблокированного каталога может создать проблемы с подключенным устройством, так как оно также будет иметь свой собственный набор двоичных файлов. Groupid уже известен. Но будет ли этого достаточно, чтобы выполнить команду chown. Разве chown не проверяет эти числа из конфигурационных файлов текущей RFS??   -  person Mukul Mehra    schedule 06.05.2020
comment
1. Вы можете указать GID/UID в chown 2. Вы можете синхронизировать UID и GID на двух серверах (или более). 3. Если у вас несколько серверов, возможно, вам нужно настроить внешнее централизованное решение для авторизации, такое как ldap или MS AD, и настроить Linux для его использования, чтобы у вас были глобальные пользователи.   -  person Saboteur    schedule 06.05.2020


Ответы (1)


Поскольку вы хотите передать файлы RFS2 пользователю RFS2, вам не нужен RFS1 для chown, поэтому самый простой способ — chroot(1).

Вы монтируете RFS2, например. на /mnt/rfs2. Затем вы подключаетесь к целевому /mnt/rfs2, как указано здесь.

chroot создает новый процесс, заключенный в тюрьму внутри /mnt/rfs2. Когда этот процесс ссылается на /, ОС преобразует его как /mnt/rfs2. Если процесс ссылается на /hello/world, ОС переведет его как /mnt/rfs2/hello/world.

Если у RFS2 есть свои пользователи, то у него есть свои /etc/passwd, и справедливо предположить, что у него есть свои /bin/, /usr/lib/ и т. д.

После chroot убедитесь, что ваш PATH совпадает с фактическим расположением двоичных файлов.

Внутри chroot-тюрьмы каждая выполняемая вами команда, например chown, будет искаться в папке PATH. Вероятно, он будет найден в /bin/chown, но теперь это /bin/chown RFS2 (а именно /mnt/rfs2/bin/chown), а не RFS1. Каждая динамическая библиотека, которую может использовать chown, также будет исходить из файловой системы RFS2.

Когда вы chown user:group, chown будет искать пользователя и группу в /etc/passwd и /etc/group, но это файл пароля и группы RFS2.

Когда вы закончите, вы запустите exit, и процесс оболочки, созданный chroot для вас, завершится. Пока все это происходило, остальные процессы на машине все еще использовали RFS1.

person root    schedule 11.05.2020