Por que não há permissões como Android ou iOS?

26

Quando instalo um programa como o GIMP ou o LibreOffice no Linux, nunca me perguntam sobre permissões. Ao instalar um programa no Ubuntu, concedo explicitamente permissão total para esse programa ler / gravar em qualquer lugar da minha unidade e ter acesso total à Internet?

Teoricamente, o GIMP poderia ler ou excluir qualquer diretório da minha unidade, sem exigir uma senha do tipo sudo?

Só estou curioso se é tecnicamente possível, não se é provável ou não. Claro, eu sei que não é provável.

stackinator
fonte
26
XKCD obrigatório: xkcd.com/1200
Andrea Lazzarotto
10
Porque o modelo de segurança do Linux data de antes de qualquer um pensar em fazer isso. De fato, data de antes da Internet - quando sua maior ameaça eram outras pessoas usando o mesmo computador.
user253751
2
Em parte porque muitas das pessoas que usam o * nix não "instalam" programas, eles os compilam a partir do código-fonte ou os escrevem. Imagine se você tivesse que passar pelo rigamarole de "permissões" para cada pequeno script de shell que você escreveu: isso não seria uma perda de tempo enorme?
Jamesqf 27/03
4
Porém, eu não compro essa linha de raciocínio: "o código é de código aberto, você pode revisá-lo e compilar você mesmo!". Todas essas afirmações são verdadeiras, mas isso não significa que serei capaz de revisar todas as linhas de código que executar, e mesmo se o fizesse, ou uma equipe de pessoas, ou o mundo inteiro, isso não significa você encontrará códigos maliciosos ou ruins que afetam negativamente o seu computador. Mas obrigado pela contribuição, vejo como isso pode se tornar uma grande dor e descobri maneiras de contornar isso agora.
stackinator

Respostas:

31

Há duas coisas aqui:

  • quando você instala um programa por meios padrão (instalador de sistema como o apt / apt-get no Ubuntu), ele geralmente é instalado em algum diretório em que está disponível para todos os usuários (/ usr / bin ...). Esse diretório requer que privilégios sejam gravados para que você precise de privilégios especiais durante a instalação.

  • Quando você usa o programa, ele roda com o seu ID de usuário e só pode ler ou gravar onde os programas executados com o seu ID puderem ler ou gravar. No caso do Gimp, você descobrirá, por exemplo, que não pode editar recursos padrão, como pincéis, porque eles estão no compartilhamento /usr/share/gimp/e que você deve copiá-los primeiro. Isso também mostra Edit>Preferences>Foldersonde a maioria das pastas vem em pares, um sistema que é somente leitura e um usuário que pode ser gravado.

xenoid
fonte
17
Depois que o programa é instalado, como ele foi instalado se torna irrelevante. A única coisa que conta é em que userid corre ((em outras palavras, que está a usá-lo), então ele assume os mesmos direitos de acesso como todos os outros programas executados pelo mesmo usuário..
xenoid
3
@xenoid A menos que o programa seja instalado pertencente ao root e com o bit setuid ativado. Nesse caso, o programa é executado como root, apesar de ser usado por outra pessoa.
Monty Mais difícil
2
Sim, todos os 18 deles: mount / umount / ping / sudo ...
xenoid 26/03
2
@ xenoid, acho que o mais importante é que a instalação de um pacote não solicita explicitamente permissão para instalar um binário setuid. Em vez disso, o que estiver no pacote é instalado, e você só precisa "saber" de outra maneira se houver programas privilegiados envolvidos. Você é totalmente dependente do empacotador para garantir que o pacote corresponda à documentação e seja seguro, etc., o utilitário gerenciador de pacotes não faz nada para ajudá-lo.
Ilkkachu 27/0318
3
Sim, então nada de novo, é por isso que existem repositórios ... Mesmo sem o bit setuid e o software instalado, muitas outras coisas desagradáveis, como rm -rf ~/. Se você instalar a partir de outras fontes, precisará tomar cuidado (ou instalar a partir da fonte, após uma inspeção de código).
Xenoid
23

Ao instalar um programa no Ubuntu, concedo explicitamente permissão total para esse programa ler / gravar em qualquer lugar da minha unidade e ter acesso total à Internet?

Sim, se você usar sudoou equivalente, você está dando ao instalador permissão total para ler / gravar em qualquer lugar da sua unidade. Isso é basicamente a mesma coisa. Há também um sinalizador que o instalador pode definir, chamado setuid, que também fará com que o programa tenha permissões completas após a instalação.

Mesmo se ignorarmos o instalador e se o programa não for setuid (é muito raro os programas usarem setuid), quando você executa o programa, ele tem acesso total a qualquer coisa que sua conta possa acessar. Por exemplo, se você estiver conectado ao seu banco on-line, poderá enviar todos os seus fundos para a Nigéria.

Por que não há permissões como Android ou iOS?

O modelo de segurança - que significa a maneira como o sistema de segurança é projetado - no Linux é muito antigo. É herdado do Unix, que remonta à década de 1960. Naquela época, não havia Internet e a maioria das pessoas em um departamento usava o mesmo computador. A maioria dos seus programas veio de grandes empresas confiáveis. Portanto, o sistema de segurança foi projetado para proteger os usuários um do outro, não para proteger os usuários dos programas que executam.

Hoje em dia está bastante desatualizado. O Android é baseado no Linux, mas funciona criando uma "conta de usuário" separada para cada aplicativo, em vez de para cada usuário. Não sei o que o iOS usa. Esforços como o Flatpak estão atualmente tentando trazer o mesmo tipo de coisa para a área de trabalho do Linux.

user253751
fonte
2
Na verdade, esse é um argumento para a execução de código potencialmente explorável como um usuário não privilegiado separado e esperando que não haja vulnerabilidade de escalação de privilégios no sistema operacional. Ou Docker.
Willtech 27/03
@immibis O Android usa o kernel do Linux e um FS ext. Ele não compartilha outras semelhanças. Não confunda Linux e UNIX-like (ou GNU / Linux). (Pelo menos você não ligou FreeBSD "Linux" ..)
wizzwizz4
1
@ wizzwizz4 O Linux é um kernel, o Android usa o kernel chamado Linux, não sei ao certo qual é o seu ponto.
user253751
@Willtech Tecnicamente, funciona como uma medida de segurança, mas é bastante inconveniente. Você geralmente deseja que os aplicativos possam acessar seus arquivos, afinal. Mas apenas os arquivos que você pediu para acessar.
user253751
@immibis As permissões não são implementadas no kernel, portanto, é enganoso sugerir que o Android é baseado em um sistema que inclui o modelo de permissão. (No entanto, o kernel do Iirc aplica algumas das permissões ..) #
wizzwizz4
9

O que você deseja está sendo fornecido pelos aplicativos Flatpack. Isso equivale a aplicativos iOS, Android ou Windows Store.

Eu não os usei, portanto, não sei se eles implementaram a GUI ainda, para ver as permissões exigidas por cada aplicativo quando ele estiver instalado.

https://blogs.gnome.org/alexl/2017/01/20/the-flatpak-security-model-part-2-who-needs-sandboxing-anyway/

Todo aplicativo flatpak contém um manifesto, chamado metadados. Este arquivo descreve os detalhes do aplicativo, como sua identidade (ID do aplicativo) e qual tempo de execução ele usa. Ele também lista as permissões que o aplicativo requer.

Por padrão, uma vez instalado, um aplicativo obtém todas as permissões solicitadas. No entanto, você pode substituir as permissões sempre que chamar flatpak run ou globalmente por aplicativo usando a substituição flatpak (consulte as páginas de manual para flatpak-run e flatpak-override para obter detalhes). Atualmente, a manipulação de permissões de aplicativos está um pouco oculta na interface, mas o plano a longo prazo é mostrar permissões durante a instalação e facilitar a substituição delas.

Também não usei a alternativa do Ubuntu, Snappy, para saber se ele fornece esse recurso visível na GUI.

sourcejedi
fonte
Os flatpaks têm permissão de leitura / gravação na minha pasta pessoal no Ubuntu?
stackinator
1
Ao ler o link, parece que: a) eles têm uma solução elegante em mente, na qual os aplicativos só têm acesso aos arquivos que o usuário escolheu em uma janela de abrir / salvar arquivos etc; b) o padrão era conceder acesso total ao diretório inicial .
sourcejedi
2
Os aplicativos da Web são uma solução muito mais padrão para esse problema, embora irritantemente ineficiente em muitos casos. Qualquer navegador da Web popular é uma sandbox altamente versátil e completamente testada.
Sudo
6

É tecnicamente possível e as soluções incluem apparmor, selinuxe firejailou mesmo recipientes cheios gosto LXCou uma máquina virtual completo (por exemplo VirtualBox, kvmou vmware). Para redes, existe opensnitchum clone do littlesnitchprograma da OSX.

As razões pelas quais não existe um modelo de segurança generalizado com permissões concedidas pelo usuário é que tradicionalmente você é cuidadoso com o que executa no seu PC. 90% do que está nas lojas de sistemas móveis seria considerado malware nos PCs.

Existem scanners para adware (ou seja, adaware ou Spybot D&D) que classificariam comportamentos como conectar o facebook, o google analytics e as redes de publicidade como malware no PC. O ecossistema móvel é como uma reinicialização completa da computação quando se trata dessas coisas. Todo mundo empacota adware, apenas porque é fácil e adiciona análises, apenas porque ele é curioso. Os efeitos colaterais são diminuição da privacidade e segurança. A parte de segurança é explicada pelo modelo de sandbox, a parte de privacidade ainda é um problema em aberto.

Outro motivo para não ter isso no PC por muito tempo é a complexidade de um sandbox, o que significa que ambos podem ser muito lentos para PCs mais antigos há algum tempo e exigiram mais engenharia para algo que tinha pouca vantagem.

Hoje, vemos tentativas de usar o sandboxing em novos formatos de pacote, como snap e flatpak, e os navegadores também o usam para suas extensões. O Chromium usa um modelo de permissão desde o início e o Firefox usa um para todas as extensões da web (desde 57, as únicas extensões que você pode instalar). Isso é bastante razoável, porque as pessoas instalam extensões de navegador de autores desconhecidos, assim como aplicativos de pessoas que nunca ouviram falar, pensando que não são mais perigosas do que um site visitado, o que é um equívoco fatal quando não há sandbox para protegê-las.

todos
fonte
4

O Android usa um modelo de segurança de "mercado": aplicativos diferentes vêm de diferentes fornecedores (semi-confiáveis) e devem ser isolados de recursos protegidos e entre si. A maioria dos aplicativos é distribuída com fins lucrativos: eles são vendidos (payware), mostram publicidade paga ou "monetizam" seus usuários vendendo seus dados a terceiros. Existe uma grande motivação para se envolver no acesso ilícito a dados, mesmo que sejam pegos.

A maioria das aplicações no Debian, Red Hat e distribuições Linux "clássicas" similares são distribuídas na forma de código-fonte: depois que um aplicativo de código-fonte aberto ganha bastante tração, é escolhido manualmente para inclusão pelos mantenedores de distribuição. Há pouca motivação para realizar acesso ilícito a dados - ganhos potenciais não justificam esforços.

Vale ressaltar, que o modelo de segurança avançado do Android é uma das razões pelas quais ganhou tanta força, superando facilmente o iOS nos mercados móveis. As distribuições modernas de Linux para desktop não são apenas "diferentes"; elas estão muito atrasadas em termos de modelos de segurança e distribuição.

Algumas distribuições Linux estão apresentando melhorias em seu sistema de distribuição de software: repositórios de software centralizados (AUR), formatos de pacotes especializados para distribuição de software de terceiros (AppImage, Snappy, Flatpack), sistemas de repositórios secundários (Docker). Infelizmente, essas melhorias ganham muito pouca força com o tempo: o AppImage foi inventado em 2004, a primeira versão do AUR foi lançada em 2005, mas nenhuma das distribuições modernas de Linux adotou oficialmente seus recursos após> 10 anos.

user1643723
fonte
3

Quando instalo um programa como o GIMP ou o LibreOffice no Linux, nunca me perguntam sobre permissões.

Esses aplicativos são instalados em uma parte privilegiada do sistema de arquivos que você e a maioria dos usuários normalmente não têm acesso para alterar.

Nas distros comuns configuradas para uso em desktop, o único usuário inicialmente configurado durante a instalação geralmente possui direitos de administrador. Tudo o que eles normalmente precisam é sua própria senha de login para instalar o software, e nem sempre isso.

Uma vez instalado, o software será, por padrão, configurado para ser executável por usuários normais e permitirá que os arquivos de dados sejam lidos. É tudo o que é necessário.

Ao instalar um programa no Ubuntu, concedo explicitamente permissão total para esse programa ler / gravar em qualquer lugar da minha unidade e ter acesso total à Internet?

Não é o programa. O que acontece é que a conta do usuário pertence a diferentes grupos e os diferentes grupos concedem acesso a diferentes recursos.

O modelo de segurança no Linux é que sua conta de usuário possui certos direitos e os grupos aos quais sua conta pertence, direitos específicos. O direito a qualquer parte do sistema de arquivos requer privilégios de root, que normalmente não são concedidos aos usuários. Mesmo quando você usa o sudo, você não obtém todos os direitos.

As contas de usuário normal normalmente têm acesso aos recursos de que eles precisam, como a Internet.

Teoricamente, o GIMP poderia ler ou excluir qualquer diretório da minha unidade, sem exigir uma senha do tipo sudo?

Qualquer diretório ou arquivo que você, como usuário, tenha direitos de acesso, pode ser acessado pelo aplicativo que você inicia, pois normalmente herda seus direitos. Um usuário logado normalmente não tem, por padrão, normalmente o direito de alterar a maioria dos arquivos críticos do sistema ou compartilhados.

Só estou curioso se é tecnicamente possível, não se é provável ou não. Claro, eu sei que não é provável.

Lembre-se de que a maioria dos usuários normalmente instala aplicativos de repositórios bem policiados e o risco de código hostil é baixo.

Eu provavelmente sugeriria algumas leituras adicionais para entender as permissões do Linux.

O modelo de segurança do Android está evoluindo para atender às necessidades dos usuários que não apenas geralmente não entendem nada sobre o modelo de segurança subjacente do sistema operacional, mas dificilmente entendem algo sobre computadores.

O modelo Linux (que sinceramente gosto mais) foi projetado para permitir que os usuários (e os administradores em particular) exerçam mais controle sobre a segurança no sistema (dentro dos limites das permissões permitidas).

Eu acho que, do ponto de vista do usuário, é melhor descrita como a diferença entre controle totalmente automático e semi-automático ou manual. Os consumidores modernos querem automóvel completo. Linux tem semi-automático e manual. Atualmente, a maioria dos usuários de Linux nunca precisa saber sobre o modelo de segurança, mas o controle existe se você precisar ou quiser.

StephenG
fonte
2

Quando você instala alguns programas, é capaz de instalá-los no seu próprio espaço de usuário (ou seja, independente do diretório inicial) e não em todo o sistema. Como tal, você não está recebendo privilégios de superusuário porque não precisa deles para instalar um programa para uso próprio de um usuário. Um programa assim instalado não seria capaz de acessar arquivos não concedidos à permissão "membros que não pertencem ao grupo não podem ler essa" permissão, sem uma escalação de privilégios.

DopeGhoti
fonte
Se o programa estiver instalado no meu diretório pessoal, ele pode ler e gravar em qualquer lugar do diretório pessoal?
stackinator
2
É executado com suas permissões, para que você possa acessar qualquer coisa que possa acessar.
DopeGhoti 26/03
1
Em uma máquina de usuário único, o acesso somente ao usuário não é muito mais seguro que o acesso root. De qualquer forma, tudo o que é importante provavelmente está acessível ao usuário.
Sudo