Пытаясь понять LD_PRELOAD и SUID/SGID с помощью checkinstall или porg
Я хочу использовать porg в моем дистрибутиве LFS. Это похоже на http://checkinstall.izto.org/, он использует LD_PRELOAD
,
1 Если вы читаете README:
CheckInstall в настоящее время не может отследить любые изменения файловой системы, сделанные статически связанными программами
Я думаю, что это относится к таким командам, как mkdir
, mv
, ln
и т.д. Поэтому у меня не должно быть проблем с этим. Я прав?
2 Тогда главная проблема:
ПРИМЕЧАНИЕ ПО ПРОГРАММАМ SUID/SGID: CheckInstall не может отслеживать их действия из-за некоторых ограничений в системе LD_PRELOAD, которую использует installwatch. Это хорошо по соображениям безопасности, но может привести к неожиданным результатам, когда в процессе установки используются двоичные файлы SUID/SGID.
Что это значит? Мне все равно, если я потеряю некоторые файлы. Меня волнует, будут ли неожиданные результаты или я не смогу правильно установить пакет.
Кроме того, сколько пакетов имеют эту проблему?
1 ответ
В случае, если coreutils (
mkdir
,mv
и т. д.) в вашей системе статически связаны (т.е. работаютfile
на них отчеты "статически связаны")porg
не сможет отслеживать свои операции, и поэтому некоторые установленные файлы могут не отслеживаться. Статически связанные исполняемые файлы являются гражданами второго сорта в Linux иLD_PRELOAD
не поддерживает их.Исполняемые файлы Setuid действительно дезинфицировать
LD_PRELOAD
перед использованием - они игнорируют все файлы с косой чертой в имени (чтобы можно было загружать только файлы со стандартных системных путей), а также требуют, чтобы в самой общей библиотеке был установлен бит setuid. Так что в вашем случае вам нужно найтиporg
предварительно загруженную библиотеку и установить на нее бит setuid (черезchmod a+s libxyz.so
). Кстати, может быть, имеет смысл спроситьporg
Авторы сделать это изменение в своем дистрибутиве. Я не думаю, что это вызовет какие-либо проблемы в типичном пакете, так как установщикам обычно не нужно запускать программы setuid (например,mount
,passwd
,sudo
).