Существуют ли некоторые Unix или Unix-подобные операционные системы, которые по-прежнему рассматривают пользователя root как суперпользователя?

Можно выбрать, какие поля в каком порядке печатать, или распечатать все поля в порядке по умолчанию. Но вы не можете напечатать «остальные поля».

Изman join:

-o FORMAT
       obey FORMAT while constructing output line
[...]
Any FIELD is a field number counted from 1. FORMAT is one or
more  comma or blank separated specifications, each being
'FILENUM.FIELD' or '0'.

Вы можете использовать awk:

awk -v regex="$(head -c -1 file2 | tr '\n' '|')" '$2 ~ regex' file1
  • Удалите последнюю новую строку из файла2 и замените новые строки символом '|', регулярное выражение будетa|c|f
  • Сопоставьте второе поле файла file1 с этим регулярным выражением

Или используйте awk-решение Sundeep, особенно если файл2 содержит специальные символы.

0
29.08.2019, 00:38
1 ответ

Предпосылка вопроса в основном ошибочна. Linux действительно рассматривает пользователя 0 как суперпользователя. (Это всегда был пользователь 0; вызов этого пользователя root— это просто соглашение. )Возможности — это дополнительный механизм, который позволяет не -корневым процессам получать определенные привилегии. Пользователь 0 обычно фактически имеет все возможности, поэтому root остается суперпользователем.

Процесс, запущенный с эффективным идентификатором пользователя 0, может потерять возможности, но это не ограничивает его возможности, за исключением строго контролируемых сред. Любой процесс, запущенный с эффективным идентификатором пользователя 0, который может создать исполняемый файл и может вызывать execve, может выполнять произвольный код со всеми возможностями, поскольку execveне сохраняет маску возможностей процесса, когда эффективный идентификатор пользователя — root. (См. «Возможности и выполнение программ от root» в руководстве .)

Можно создать операционную систему, которая полностью лишает доступа к некоторым возможностям, сохраняя при этом идентификатор пользователя 0, установив флаг SECBIT_NOROOTво время входа в систему и убедившись, что его невозможно вернуть, или удалив возможности. из ограничивающего множества. Но Linux (работает не так, как обычно работает операционная система Linux ). Это дополнительная функция ядра, полезная для ограниченных операционных систем (, например внутри контейнеров ).

Возможности могут ограничивать возможности root, но использовать их таким образом непросто, и они в основном используются не для этого. :Возможности в основном используются для того, чтобы избежать запуска процессов от имени root. В ядре Linux есть и другие функции, которые ограничивают возможности root. Модули безопасности, такие как SELinux и AppArmor, применяются независимо от идентификатора пользователя, поэтому возможно настроить систему, в которой пользователь с идентификатором 0 почти ничего не сможет сделать (, но опять же, обычная система настроена иначе ). С пользовательскими пространствами имен пользователь с идентификатором 0 является только суперпользователем внутри этого пространства имен, и эта функция широко используется с контейнерами .

FreeBSD предлагает возможности Capsicum . Я не знаю, ограничивает ли Capsicum возможности пользователя с идентификатором 0. Опять же, основная цель возможностей — уменьшить объем кода, работающего со всеми привилегиями, а не убрать концепцию процесса со всеми -привилегиями.

Я не думаю, что какой-либо другой BSD имеет механизм возможностей. OpenBSD стремится обеспечить безопасность за счет минимизации сложности и объема привилегированного кода. Повышение сложности механизмов безопасности для уменьшения количества привилегий, которые привилегированный код, не является бесплатным обедом.

5
28.04.2021, 23:30

Теги

Похожие вопросы