longa história curta - não há como fazer tudo isso sem permissões de root. Por exemplo, mount requer permissões de root e não há como solucionar isso. É por razões de segurança - se um usuário tiver privilégios de montagem, esse usuário pode ultrapassar, digamos, / etc e usar qualquer conteúdo lá. É um grave risco de segurança e, portanto, por padrão, somente o usuário root pode usar o mount.
Eu implementei minha solução introduzindo verificações apropriadas - se o usuário atual é root, então eu uso mount e outros comandos específicos da raiz. Se o usuário for outro, eu vou para outro ramo de execução e não uso material específico para a raiz.