exec() - выполняет команду на сервере и все.
shell_exec() - выполняет команду и возвращает консольный вывод.
большие задачи лучше выносить в bash скрипты. Если нужен root - выполнять их с sudo.
Лучше сделать какую-нибудь "песочницу" для этих скриптов, ограничив их в возможностях, например с помощью chroot jail