Использование ed
:
printf "%s\n" $(printf "%sd\n" $(sort -rnu Seqlist)) w | ed ContentFile
Здесь используется printf
для построения списка команд (команды удаления строк из уникального, отсортированного в обратном порядке списка номеров строк из Seqlist, и " w "для записи измененного файла обратно на диск) для ed
для использования для редактирования ContentFile
По какой-то причине dnf не установил "правильную" метку SELinux в / etc / passwd. Но он установил метку на / bin / passwd. Это несоответствие является причиной проблемы. Дальнейшие объяснения приветствуются :).
$ ls -Z fedora-24/etc/passwd
unconfined_u:object_r:etc_t:s0 fedora-24/etc/passwd
$ ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd
$ ls -Z fedora-24/bin/passwd
system_u:object_r:passwd_exec_t:s0 fedora-24/bin/passwd
$ ls -Z /usr/bin/passwd
system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
Попытка запустить restorecon -Rv /
внутри контейнера ничего не дает. IIRC libselinux определяет, когда он запускается в контейнере, и ничего не делает.
Нам нужно запустить извне контейнера:
restorecon -Rv fedora-24/
Это гарантирует, что все метки SELinux сброшены. (До значения, ожидаемого хостом контейнера, т. Е. Без метки). Тогда мы сможем успешно установить пароль root.