Подход, который я бы использовал в этом случае, и как указано здесь , заключается в загрузке в режиме восстановления (или «однопользовательском» mode), затем исправьте разрешения для файла / etc / sudoers
.
Это ответ для Ubuntu, но тот же подход должен работать независимо от дистрибутива.
Если вы по какой-то причине не можете загрузиться в режиме восстановления, я бы посоветовал вам использовать Live-носитель (CD, USB) и исправить оттуда разрешения.
В дополнение к копированию через / etc / selinux /targetd/contexts/files/file_contexts.local
, вам также потребуется запустить команду restorecon
для каталогов и файлов, указанных в / etc / selinux / targetd / context / files. /file_contexts.local
.
Простой способ сделать это (а также установить контекст SELinux для всех файлов в системе, на которые есть ссылка / etc / selinux / targetd / context / files / file_contexts
- значения SELinux по умолчанию): для выполнения следующей команды:
$ sudo restorecon -R /
Примечание : флаг -R
означает рекурсивный переход по подкаталогам и файлам, таким образом восстанавливая контекст для всех файлов в системе, как определено в file_context
и file_context.local
файлы.
РЕДАКТИРОВАТЬ: Как мудро указал sourcejedi в комментариях. Запуск restorecon
для всей файловой системы может попытаться изменить метки файловых систем, которые его не поддерживают (т. Е. Подключенных дисков и т. Д.). Вы можете использовать команду fixfiles restore
, чтобы избежать этой проблемы.
Из справочной страницы fixfiles
:
By default it will relabel all mounted ext2, ext3, xfs and jfs file systems as
long as they do not have a security context mount option. The file
/etc/selinux/fixfiles_exclude_dirs can contain a list of directories
excluded from relabeling.
Вы также можете использовать fixfiles при загрузке
, которые поменяются ярлыками при следующей перезагрузке.
Аналогично, touch /.autorelabel && reboot
изменит метку файлов во время перезагрузки /