Contexto: Estou brincando com o script Python e Shell tentando criar um aplicativo simples para executar com dmenu para montar/desmontar unidades.
Meu problema atualmente está no fato de que o comando para montar a unidade está no arquivo shell script e esse comando requer permissão de root para ser executado.
A parte em que as coisas correm mal é precisamente esta:
mount ${DRIVE} ${DESTINATION}
Eu fiz um pouco de pesquisa e a maioria das respostas para o problema "executar montagem sem sudo" aponta para editar o arquivo fstab e adicionar manualmente os discos.
Gostaria de saber se existe outra forma, sem obrigar o usuário a editar arquivos/configurações do sistema. Ou pelo menos faça essa configuração automaticamente.
Você precisa de alguma maneira de restringir os parâmetros possíveis para o comando mount que os usuários podem usar, ou então um usuário mal-intencionado pode facilmente assumir o controle do sistema montando algo
/etc
para que o sistema use a versão do invasor em/etc/shadow
vez da versão real. O efeito seria como se o invasor conseguisse substituir temporariamente as senhas de todo e qualquer usuário por senhas conhecidas pelo invasor.Se os usuários precisarem apenas montar/desmontar um conjunto fixo de sistemas de arquivos para um conjunto fixo de pontos de montagem, apenas adicioná-los
/etc/fstab
usando a opçãouser
ouusers
mount pode ser uma solução válida.Se você não pode prever o nome do dispositivo que o usuário precisa montar, ou o usuário precisa ser capaz de montá-lo em um local arbitrário acessível a ele, seu problema é mais difícil. Talvez permitir que o usuário monte o sistema de arquivos apenas em um local fixo e, em seguida, ensine o usuário a
ln -s /actual/mount/point /desired/location
criar links simbólicos para fazer os arquivos aparecerem onde são necessários?A resposta mais fácil e segura para essa pergunta é usar
udisks2
em vez demount
diretamente. Ele é usado por gerenciadores de arquivos como o Thunar e não requer privilégios de root. A ferramenta monta as unidades em arquivos/run/media/<username>/
.Para montar uma unidade, use
udisksctl
commount
:Use
unmount
para desmontar.Você pode editar o arquivo de permissão do usuário e conceder a esse usuário o uso de mount.
Use visudo e adicione uma linha como esta (alterando esse user_name para seu próprio usuário)