build-vm: try system tar2fs first

It's at least removing the very obvious user->root
attack through (maliciously) modifying bin/tar2fs
and waiting for it to be run; if mkimage-profiles
is installed system-wide as a package, the script
from /usr/share/mkimage-profiles will be tried so
those willing to allow vm/* build to themselves
can provide for a passwordless sudo (as described
in doc/vm.txt) to run a root-only writable script,
not user-writable.

Still not perfect but a step away from the abyss.
This commit is contained in:
Michael Shigorin 2016-11-07 13:20:09 +03:00
parent f39890cb7c
commit f293239d5b
2 changed files with 7 additions and 2 deletions

View File

@ -14,7 +14,9 @@
При работе с локальной копией mkimage-profiles.git следует иметь При работе с локальной копией mkimage-profiles.git следует иметь
в виду, что предоставлять недоверенному пользователю право выполнять в виду, что предоставлять недоверенному пользователю право выполнять
от имени root доступный ему по записи скрипт равнозначно предоставлению от имени root доступный ему по записи скрипт равнозначно предоставлению
полных привилегий root. полных привилегий root (поэтому фича build-vm сперва проверяет наличие
системно установленного пакета и по возможности старается запустить
под sudo скрипт из него, доступный по записи только root).
Для работы с более специфичными форматами, чем raw ("буквальный" Для работы с более специфичными форматами, чем raw ("буквальный"
образ диска), потребуется утилита qemu-img из одноименного пакета; образ диска), потребуется утилита qemu-img из одноименного пакета;

View File

@ -20,7 +20,10 @@ check-sudo:
fi fi
prepare-image: check-sudo prepare-image: check-sudo
@if ! sudo $(TOPDIR)/bin/tar2fs \ @if [ -x $(MKIMAGE_PREFIX)/bin/tar2fs ]; then \
TOPDIR=$(MKIMAGE_PREFIX); \
fi; \
if ! sudo $(TOPDIR)/bin/tar2fs \
"$(VM_TARBALL)" "$(VM_RAWDISK)" $(VM_SIZE) $(VM_FSTYPE); then \ "$(VM_TARBALL)" "$(VM_RAWDISK)" $(VM_SIZE) $(VM_FSTYPE); then \
echo "** error: sudo tar2fs failed, see also doc/vm.txt" >&2; \ echo "** error: sudo tar2fs failed, see also doc/vm.txt" >&2; \
exit 1; \ exit 1; \