Понимание возможностей программирования для Linux

Возможности позволяют оценивать некоторые важные системные привилегии в цепочке, отдельной от текущего процесса. Таким образом, вам не нужно будет запускать приложение с правами root для доступа к определенным частям системы.

В качестве решения, вытекающего из потребностей, раздел 25 POSIX.1e относится к этой проблеме. Разработка привилегий, определенных в этом разделе, и других была завершена с появлением ядра Linux версии 2.6.26. Вот все, что вам нужно знать о возможностях ядра Linux.

Понимание возможностей программирования для Linux - Linux

Понимать логику API возможностей

Контроль привилегий в системах на основе Unix состоит из двух этапов:

  • Если текущий владелец (эффективный идентификатор пользователя, EUID) работающего приложения равен нулю, система не будет проверять авторизацию.
  • Если значение EUID отлично от нуля, система выполнит процесс контроля в соответствии с разрешениями активного пользователя и соответствующей группы приложений.

Некоторым приложениям требуются более широкие привилегии (SUID, SGIT) во время работы. В качестве типичного примера можно рассмотреть passwd. С его помощью пользователи в системе могут менять свои пароли. Однако для записи в файл etc/shadow, где хранятся зашифрованные пароли, необходимо работать с правами пользователя root (т.е. userid = 0).

Чтобы решить эту проблему, реализация passwd содержит бит SUID. Какой бы пользователь ни запускал это приложение, активным владельцем (EUID) всегда будет Root:

ls -l /usr/bin/passwd

# Output

-rwsr-xr-x. 1 root root 32552 Jul 23 2021 /usr/bin/passwd

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

Проблема не заканчивается только битом SUID. У вас также должны быть права root, если вы хотите прослушивать порт TCP или UDP с привилегиями менее 1024 в системах на базе Unix. Например, чтобы иметь возможность прослушивать TCP-порт 80 веб-сервера, вы должны запустить приложение от имени пользователя root.

За прошедшие годы стало понятно, насколько разрушительным может быть запуск приложений, предоставляющих услуги в сетевой среде, с полностью лицензированной учетной записью пользователя. В качестве обходного пути было принято, что только определенная, меньшая часть приложения прослушивает привилегированный порт как Root, а затем изменяет идентификатор активного пользователя на другого пользователя для последующих процессов (например, пользователя без ограниченных привилегий). ).

Эта система, которая использовалась в течение многих лет, хорошо работает благодаря своей простоте и до сих пор эффективно используется. Однако в настоящее время можно получить некоторые дополнительные возможности, специфичные для приложения, через API возможностей Linux, без необходимости наличия Root-прав, независимо от упомянутой выше системы. Проверять Некоторые практические и реалистичные варианты использования Linux.

Объяснение модели возможностей Linux!

Вы можете найти наиболее полную реализацию возможностей API в ядре Linux. Современные дистрибутивы Linux также стараются максимально использовать эту новую парадигму на системном уровне.

Например, для того, чтобы приложение работало Пинг , он должен иметь возможность открывать сокеты RAW, которые обычно зарезервированы только для пользователей с правами root. В старых дистрибутивах Linux проблема заключается в том, что бит SUID предоставляется приложению, чтобы его могли использовать обычные пользователи. В этих версиях, когда вы удаляете бит SUID из приложения и пытаетесь запустить приложение как обычный пользователь, вы получаете следующую ошибку:

ping 8.8.8.8

# Output

ping: icmp open socket: Operation not permitted

Принимая во внимание, что в современных дистрибутивах Linux ping, вероятно, не имеет бита SUID:

ls -l /bin/ping

# Output

-rwxr-xr-x. 1 root root 95232 Jul 25 2021 /bin/ping

Однако вы можете успешно запустить приложение как обычный пользователь. Механизм, который делает это возможным, заключается в том, что Ping имеет специальную возможность CAP_NET_RAW.

Узнать дополнительные возможности приложения можно с помощью команды getcap следующим образом:

sudo getcap /bin/ping

# Output

/bin/ping cap_net_raw=ep

Если команда getcap возвращает пустой ответ, вы можете установить это значение вручную с помощью:

sudo setcap cap_net_raw+ep /bin/ping

модель возможностей процесса

В приложении Linux возможности каждого процесса сгруппированы под тремя заголовками:

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

Список разрешенных, эффективных и наследуемых возможностей запуска процессов в любое время отображается в виде битовой маски в строках CapPrm, CapEff и CapInh в файле /proc/ /статус. Кроме того, строка CapBnd содержит битовую маску, используемую в процессе управления пределами возможностей.

Например, попробуйте прочитать значения запущенного приложения-оболочки из файла /proc/self/status:

cat /proc/self/status | grep Cap

# Output

CapInh: 0000000000000000

CapPrm: 0000000000000000

CapEff: 0000000000000000

CapBnd: 000001ffffffffff

CapAmb: 0000000000000000

Модель файловых возможностей Linux

Работа системы возможностей для файлов зависит от предпосылок, для которых эти свойства могут быть сохранены на уровне виртуальной файловой системы (VFS). Как и в модели процесса, возможности файлов подразделяются на три категории:

1. Разрешено:

Система определяет возможности, разрешенные для процесса при запуске соответствующего исполняемого файла в этой группе.

2. Эффективный

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

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

Вы можете подумать, что лучше написанные приложения будут использовать возможности только тогда, когда это необходимо. Если бит активен, все возможности в списке разрешенных становятся активными при запуске приложения.

3. Это передается по наследству

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

Роль возможностей в Linux

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

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

Возможности Linux — это лишь одна из проблем, которые следует учитывать при использовании очень эффективных методов, таких как разделение прав пользователя root, назначение разных разрешений ME непривилегированным пользователям и принятие различных мер предосторожности в отношении открытых портов в интернет-сервисах с серверами Linux. Теперь вы можете просмотреть Как создать веб-сервер в Linux на старом компьютере.

Источник
Перейти к верхней кнопке