1

Я компилирую nginx из исходного кода и хотел использовать checkinstall, чтобы потом его было легче удалить. Проблема в том, что checkinstall выполняет сценарии в /var /tmp, которые я смонтировал с помощью noexec, чтобы предотвратить повышение привилегий.

Я нашел этот сайт, который рекомендует временную привязку /var /tmp к другому месту, чтобы разрешить выполнение скрипта в /var /tmp. Но разве это не вызывает проблем с запущенными процессами, которые используют /var /tmp в тот момент и делает меня уязвимым?

Что приводит меня к вопросу, есть ли способ использовать checkinstall без монтирования /var /tmp в качестве exec? Может быть, с помощью chroot или unshare?

1 ответ1

0

Explaination

Можно использовать команду unshare для создания пространства имен, выделенного для скрипта:

unshare --mount /path/to/script # Execute command in dedicated mount namespace

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

mount --make-rslave /            # Prevent this mount namespace
                                 # from changing the real namespace
mount --bind /foo/tmptmp foo/tmp # Do the bind
touch /foo/tmp/tmpFile           # Create tmp files
echo $( ls /foo/tmptmp )
echo $( ls /foo/tmp )
#output:
#tmpFile
#tmpFile

После того, как скрипт выполнен с использованием unshare, давайте посмотрим, что произошло с основной системой.

ls /foo/tmptmp
#output: tmpFile
ls /foo/tmp
#output: 
#(Note that the file is only present in /foo/tmptmp)
umount /foo/tmptmp
#output: umount: /foo/tmptmp: not mounted
#(Note that the bind did only affect the mount namespace of the script)

Решение

Применение этого к проблеме вопроса приводит к следующему сценарию, который должен быть вызван через unshare --mount:

mount --make-rslave /
mount --bind /your/tmp/file /var/tmp
checkinstall

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .