Como um gerenciador de arquivos monta uma unidade sem raiz?

6

Eu tenho lido este pergunta sobre por que mount deve ser executado como root (com algumas exceções), e eu queria saber, se montar uma unidade requer raiz (geralmente), como é que um gerenciador de arquivos gráfico (Nautilus, Thunar, etc) faz isso? Tem algo a ver com FUSE ?

    
por Joe D 17.09.2016 / 01:48

2 respostas

5

Os usuários que operam no console de uma estação de trabalho gráfica notaram que vários programas podem ser executados sem a necessidade de autenticação raiz nem uma senha, como a reinicialização. Esse processo envolve o uso inteligente do programa SUID /usr/sbin/userhelper aplicado em um contexto mais amplo do que o projetado originalmente.

O usuário gráfico executa um programa intermediário aliado /usr/bin/consolehelper , que autoriza ações com base em uma configuração específica do PAM (Módulos de Autenticação Programável) e, em seguida, envia o comando para um programa SUID para executar o programa do usuário com privilégios. Se o usuário não tiver a autorização apropriada, o programa solicitado será executado no ambiente Linux dos usuários.

Como implementado atualmente, o arquivo de configuração do PAM necessário para reinicialização contém verificações para o usuário estar logado no console ou estar atualmente em execução no ambiente raiz para inibir solicitações de senha.

    
por 17.09.2016 / 02:26
3

Ele usa os udisks. (FUSE é usado no caso de sistemas de arquivos de rede, no entanto). Interfaces de linha de comando para os udisks estão disponíveis para sua experimentação. Nas versões recentes, vem com a interface de linha de comando udisksctl .

udisksd é executado como root e aceita as solicitações do usuário usando D-Bus .

udisksd usa PolicyKit PolKit para decidir quais solicitações são permitidas. Alguns podem exigir privilégios extras, por ex. formatando unidades internas. Isso pode envolver uma etapa de autenticação extra - semelhante ao prompt do Windows UAC ou sudo na linha de comando. Eu não sei exatamente como a autenticação extra é coordenada.

Solicitações sobre o D-Bus atualmente são feitas usando sockets Unix usando SCM_CREDENTIALS, que identifica o processo que faz a solicitação.

Um dos fatores usados nas decisões é se o usuário está conectado localmente ou pela rede (por exemplo, ssh ). Eu acredito que esta informação é fornecida por systemd-logind (em conspiração com pam-systemd ).

    
por 17.09.2016 / 16:50