É possível permitir que alguns usuários em particular (por exemplo, membros de um grupo) montem qualquer sistema de arquivos sem privilégios de superusuário no Linux?
Outra pergunta pode ter sido "de que maneira um usuário pode prejudicar um sistema montando sistemas de arquivos?"
linux
mount
not-root-user
Ciro Santilli adicionou uma nova foto
fonte
fonte
gvfs-mount
-d /dev/sdX
Respostas:
Existem algumas abordagens, algumas na maior parte seguras, outras nem um pouco.
A maneira insegura
Permita que qualquer uso seja executado
mount
, por exemplo, através do sudo. Você também pode dar-lhes raiz; é a mesma coisa. O usuário pode montar um sistema de arquivos com uma cópia raiz suid de -bash
execução que instantaneamente fornece raiz (provavelmente sem nenhum registro, além do fato de quemount
foi executada).Como alternativa, um usuário pode montar seu próprio sistema de arquivos em cima de
/etc
, contendo sua própria cópia de/etc/shadow
ou/etc/sudoers
, e então obter root comsu
ousudo
. Ou, possivelmente, bind-mount (mount --bind
) sobre um desses dois arquivos. Ou um novo arquivo em/etc/sudoers.d
.Ataques semelhantes podem ser realizados em
/etc/pam.d
muitos outros lugares.Lembre-se de que os sistemas de arquivos nem precisam estar em um dispositivo,
-o loop
montarão um arquivo que é de propriedade (e, portanto, modificável) do usuário.A maneira mais segura: udiscos ou similar
Os vários ambientes de desktop já criaram soluções para isso, para permitir que os usuários montem mídias removíveis. Eles funcionam montando apenas em um subdiretório
/media
e desativando o suporte a set-user / group-id através das opções do kernel. Opções aqui incluemudisks
,udisks2
,pmount
,usbmount
,Se necessário, você pode escrever seu próprio script para fazer algo semelhante e invocá-lo através do sudo - mas você deve ter muito cuidado ao escrever esse script para não deixar explorações de raiz. Se você não quiser que seus usuários se lembrem do sudo, faça algo assim em um script:
A maneira como um dia estará seguro: espaços de nome de usuário
Os namespaces do Linux são uma forma muito leve de virtualização (contêineres, para ser mais específico). Em particular, com espaços de nome de usuário, qualquer usuário no sistema pode criar seu próprio ambiente no qual é raiz. Isso permitiria que eles montassem sistemas de arquivos, exceto que foram explicitamente bloqueados, exceto por alguns sistemas de arquivos virtuais. Eventualmente, os sistemas de arquivos FUSE provavelmente serão permitidos, mas os patches mais recentes que pude encontrar não cobrem dispositivos de bloco, apenas coisas como sshfs.
Além disso, muitos kernels de distribuição (por motivos de segurança) adotaram o padrão de não permitir que usuários não privilegiados usem espaços de nome de usuário; por exemplo, o Debian tem um
kernel.unprivileged_userns_clone
padrão de 0. Outras distros têm configurações semelhantes, embora geralmente com nomes ligeiramente diferentes.A melhor documentação que eu conheço sobre espaços para nome de usuário é um artigo LWN Namespaces em operação, parte 5: Espaços para nome de usuário .
Por enquanto, eu usaria o udisks2.
fonte
mount
possam montar sistemas de arquivos como o root faz? Vou ler o documento dos espaços para nome que você vinculou e tentarei implementar essa coisa do grupo de montagem, pelo menos como um exercício.mount
comandos arbitrários , é o mesmo que dar root.Você pode fazê-lo, mas precisa modificar a entrada
/etc/fstab
correspondente ao sistema de arquivos que deseja montar, adicionando o sinalizadoruser
a esta entrada. Usuários sem privilégios poderão montá-lo.Veja
man mount
para mais detalhes.fonte
vfs.usermount
). Eu quero sth. análogo a isso. Eu uso muitas unidades removíveis com muitas partições em cada uma delas e seria complicado adicionar uma dúzia ou duas entradas ao fstab para cada uma delas.udev
gerenciar as entradas à medida que novos dispositivos aparecem e desaparecem.Aqui está o wiki para configurar regras do polkit para udisks / udisks2 para montar partições por grupo não raiz (por exemplo, usuários).
Salve o código abaixo em /etc/polkit-1/rules.d/50-udisks.rules
Suponha que você esteja no grupo "usuários", usando o seguinte comando para montar uma partição (não é necessário sudo).
fonte
1 Veja onde funciona
No Xubuntu, ele funciona imediatamente para montar e ejetar o armazenamento em massa USB, partições do disco rígido, CD / DVDs e provavelmente mais.
Vamos supor que a solução escolhida pelo Ubuntu, usando o policyKit, seja suficientemente segura.
2 Escolha a parte relevante
No XFCE no Debian 8.3, eu precisava permitir que o usuário monte e ejete sistemas de arquivos do thunar sem senha. O que funcionou para mim é escolher um arquivo de permissão do Ubuntu.
Adicionar as linhas abaixo como raiz a um arquivo chamado
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
deve fazer o truque:3 Lucro!
(Na verdade, o que fiz foi escolher um pouco mais do arquivo com o mesmo nome no Ubuntu 16.04 e funcionou para mim. Se você precisar, ele se parece principalmente com o conteúdo de https://gist.github.com/kafene/5b4aa4ebbd9229fa2e73 )
fonte
Você pode configurar
sudo
para permitir que um conjunto de usuários execute omount
comando.Atualização : sobre como você pode danificar um sistema montando? Por exemplo, você pode criar um shell raiz setuid em um sistema de arquivos que pode ser montado e executado para obter privilégios de root.
fonte
sudo
? Além disso, não é o usuário root que monta o sistema de arquivos, apenas nos bastidores, com esse método?mount
parasudo mount
ou usar um script wrapper.user
ao fstab só funciona porquemount
é a raiz do setuid. O kernel está verificando a raiz ou aCAP_SYS_ADMIN
capacidade, para que você não possa realmente envolver o root.Para responder à sua pergunta entre parênteses, como um sistema de arquivos é um espaço reservado para arquivos, um usuário pode potencialmente executar operações prejudiciais nesse sistema, como excluir arquivos.
Resumindo as outras 2 perguntas, direi o seguinte:
fstab
é ótimo para montagem no armazenamento permanente no momento da inicialização . Não é tão bom quando você deseja conectar unidades USB ou montar ocasionalmente alguns compartilhamentos de rede.sudo mount
também está bom se você estiver em sistemas ubuntu *. Você ainda precisará digitar uma senha.udev
cuidará de montar coisas como pendrives, câmeras e cartões de memória flash nos sistemas ubuntu * (mas não em distros menos amigáveis, como debian, slackware, etc.)Acrescentarei que, historicamente, a maneira unix de dar autoridade a alguns usuários (ou grupos) para fazer coisas é através do
sudoers
arquivo.Existem MUITOS guias para usá-lo por aí, então não vou sugerir nenhum detalhe. Vou dizer que usei o site do projeto de documentação do Linux para aprender sobre ele.
O que é mais importante
sudoers
é que você pode montar dispositivos e compartilhamentos de forma transparente - mesmo sem fornecer uma senha, se você optar por fazê-lo (tenha um cuidado extra com isso).O que costumo fazer em um ambiente de controle é usar o
sudoers
arquivo para permitir que usuários de um determinado grupo montem compartilhamentos de rede de forma transparente. Então, adiciono os comandosmount.nfs
emount.cifs
no arquivo sudoers que permitem operações como "montar a pasta pessoal do usuário a partir de um servidor de arquivos de rede, quando o usuário faz logon no terminal do cliente" e estudo assim.fonte
autofs
por conta própria para montar o/home/$USER
do servidor de arquivos, para o local/home/$USER/fromFS/
no PC cliente.guestmount
truques libguestfsDepende de:
Documentos: http://libguestfs.org/guestmount.1.html
Testado no Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3.
fonte