Как удалить блочное устройство из списка lsblk в CentOS 7?

Вещи, которые могут повлиять на программу setuid

Давайте рассмотрим некоторые способы, которыми вызывающий пользователь может повлиять на поведение процесса setuid. Я разделю то, что нужно рассмотреть, на три группы: 1) сама программа, 2) входные данные для программы и 3) среда, в которой она выполняется.

Двоичный файл: Если непривилегированный пользователь может изменить исполняемый двоичный файл, что было бы простым способом изменить привилегированный процесс. Сюда входят случаи, когда путь к файлу программы проходит через доступные для записи каталоги и символические ссылки. Обязательно убедитесь, что файл программы и путь к нему не доступны для записи неавторизованным пользователям. (И sudo , похоже, не проверяет.)

Бинарные файлы Setuid на самом деле более невосприимчивы к модификации таким образом, поскольку бит setuid является свойством inode, а не путем, поэтому обман символической ссылки не будет работать. (Кроме того, похоже, что в некоторых Linux сбрасывается бит setuid, если другой пользователь записывает в файл, но я бы не стал на это рассчитывать.)

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

Если программе требуется какой-либо ввод от пользователя (вместо того, чтобы всегда делать что-то одно), мы не можем этого избежать. Таким же образом сетевые службы должны быть осторожны с вводом данных. (Для примера посмотрите SQL-инъекции и т. Д.Я думаю, что обработка ввода особенно сложна для таких вещей, как сценарии оболочки, где все данные являются текстом, а весь текст находится на расстоянии одной кавычки от превращения, так сказать, в команду.

Если ввод является конфиденциальным, мы можем рассмотреть такие проблемы, как аргументы командной строки, видимые другим пользователям в системе.

Окружающая среда - более широкая проблема. Очевидно, он включает переменные среды, такие как PATH (которые могут изменять выполняемый подпроцесс), LC _ * и POSIXLY_CORRECT (которые могут изменить выходной формат оболочки команды), HOME (который может использоваться для доступа к файлам) и LD _ * (которые изменяют поведение динамического загрузчика) среди других. Это простые вещи.

Но рассмотрите что-то вроде ограничений ресурсов, cgroups Linux, chroots, контексты SELinux, пространства имен и неизвестно что еще. Установка, скажем, жесткого ограничения для использования стека или количества процессов может привести к сбою привилегированного процесса в неожиданной точке или невозможности запуска подпроцессов. Неожиданный сбой может произойти после того, как процесс заблокировал какой-то ресурс, но до того, как у него появится возможность зафиксировать и разблокировать его ...

(Хотя многие из последних не могут быть изменены непривилегированными пользователями, поэтому они могут не быть Серьезная проблема.Исполняемый файл setuid, доступный из ограниченной среды, может все же должным образом работать в ограниченной среде.)

Что с этим делать

По крайней мере, вы должны

  • Убедитесь, что исполняемый файл доступен для записи только авторизованным пользователям, включая как сам файл, так и путь к нему. Делать его нечитаемым не обязательно, если программа не содержит встроенных секретов.
  • Сброс среды при запуске, включая установку известного значения ПУТЬ . Использование абсолютных путей кажется безопасным, но я не могу сказать, какой эффект это произвело бы, если бы путь поиска был известен. env_reset в sudo должен это сделать.
  • ( Переменные LD _ * обрабатываются динамическим компоновщиком до того, как вы получите возможность их сбросить, но компоновщик должен игнорировать их для процессов setuid.)
  • Подтвердите свой ввод. Конечно. Хотя это также может быть легче сказать, чем сделать, особенно если вы планируете ввести пользовательский ввод в сценарий оболочки.
  • Принимать конфиденциальный ввод (пароли) через канал или стандартный ввод.
  • Сбросьте ограничения ресурсов или рискните выйти из строя в неожиданной точке.

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

(И, кстати, я мог бы сказать, что программа setuid не будет всегда легко открывать брешь в системе безопасности, поскольку во многих системах есть такие вещи, как passwd , su , и sudo , которые являются setuid, но не считаются относительно безопасными.)

Альтернатива setuid

Другая возможность, помимо sudo или setuid, - это поговорить с привилегированным процессом через конвейер (или сокет). Это имеет то преимущество, что работающий двоичный файл легко защищен, среда его выполнения известна, и непривилегированный пользователь не имеет возможности повлиять на него.

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

У сокетов нет этой проблемы, но они также не доступны для обычных функций файловой системы. Вместо этого к ним нужно обращаться через функции сокета. (например, echo foo> / my / socket не будет работать. socat может быть полезен в скриптах).

3
21.07.2017, 15:39
2 ответа

( В предыдущем вопросе )я предположил, что вы хотите удалить устройство DRBD, однако выполнение rmна узлах в /dev/на самом деле не приводит к этому. Например. вы должны увидеть, что представление ядра о блочных устройствах в /sys/class/blockне затрагивается такими изменениями.

Удаление узла устройства скроет его от lsblk, но не приведет к высвобождению заявленных ресурсов! Это кажется плохой идеей.

Перезагрузка должна удалить все странные устройства DRBD, которые вы больше не используете. (. которые были удалены из конфигурации drbd, но все еще существуют по какой-то странной причине ).

«Загрузка/выгрузка модуля» — это способ избежать перезагрузки, если вы этого хотите. modprobe -r drbdдля разгрузки. Это потребует, чтобы у вас не было других используемых устройств DRBD.


Если вы считаете, что демон drbd возился с созданием или переименованием устройств в /devодновременно с работой udev/ devtmpfsи действительно имел ошибку, из-за которой оставался устаревший узел устройства (] и немного устаревшего кеша в lsblk), то вам лучше сделать полную перезагрузку, чтобы убрать беспорядок. Поскольку это будет действительно сломанное программное обеспечение, ничего больше не должно делаться.

2
27.01.2020, 21:13

lsblk имеет опцию -eдля исключения устройств по старшим номерам устройств.

Устройства drbd в выводе lsblkвыше имеют старший номер 147, поэтому они будут исключены из списка:

lsblk -a -e 147

Это не приведет к удалению каких-либо узлов устройств drbd из вашей системы и никакому взаимодействию со службой DRBD, оно просто исключит устройства drbd из вывода lsblk.

2
27.01.2020, 21:13

Теги

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