Ir para o conteúdo
Dr_Lion

Limitar acesso a ficheiros

Mensagens Recomendadas

Dr_Lion

Estou aqui com uns problemas existenciais sobre a minha máquina.

Utilizo o ubuntu e neste momento tenho um utilizador além do root, posso criar mais utilizadores se for necessário.

  • O que pretendo é ter um programa desenvolvido por mim, em que o utilizador consiga usar esse programa, mas não consiga ter acesso ao código nem aos ficheiros que o mesmo usa! Pensei em limitar as permissões apenas para execução, mas não tenho a certeza se funciona??? Sei que assim o utilizador não conseguirá aceder aos ficheiros.
  • Tinha pensado também em criar um segundo utilizador, colocar lá os ficheiros do programa e dar permissões de execução ao 1º utilizador, mas pela questão seguinte penso que seria impossível (se decidisse cifrar a pasta home).
  • Isto resolveria uma parte do problema partindo do princípio que funciona como desejado. Segunda parte, usando live CDs se não estou em erro, consegue-se ganhar acesso a todos os ficheiros desse utilizador que o próprio não teria acesso. Para eliminar este acesso indevido, creio que cifrar a instalação completa do Ubuntu, ou apenas a pasta home iria resolver este problema.
  • Uma terceira dúvida que não passa de uma questão de comodidade. É possível cifrar a pasta home de um utilizador, e esse utilizador não ter password para logar no sistema? Eu sei que do ponto de vista conceptual não faz sentido, mas para mim serve o meu fim! Desde que a pasta cifrada seja cifrada e decifrada quando o utilizador faz log in/logout ou ligando/desligando o pc (mesmo não tendo o utilizador password).

Aguardo as vossas respostas sábias a fim de esclarecer as minhas dúvidas..

Desde já agradeço a todos pela ajuda.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter
16 minutos atrás, Dr_Lion disse:
  • O que pretendo é ter um programa desenvolvido por mim, em que o utilizador consiga usar esse programa, mas não consiga ter acesso ao código nem aos ficheiros que o mesmo usa! Pensei em limitar as permissões apenas para execução, mas não tenho a certeza se funciona??? Sei que assim o utilizador não conseguirá aceder aos ficheiros.

Se o programa de que falas é compilado então, à partida, não há código disponível na máquina, apenas a versão compilada que não dá acesso directo ao código fonte. Caso contrário, se o utilizador conseguir executar os ficheiros consegue ler o conteúdo.

20 minutos atrás, Dr_Lion disse:
  • Tinha pensado também em criar um segundo utilizador, colocar lá os ficheiros do programa e dar permissões de execução ao 1º utilizador, mas pela questão seguinte penso que seria impossível (se decidisse cifrar a pasta home).
  • Isto resolveria uma parte do problema partindo do princípio que funciona como desejado. Segunda parte, usando live CDs se não estou em erro, consegue-se ganhar acesso a todos os ficheiros desse utilizador que o próprio não teria acesso. Para eliminar este acesso indevido, creio que cifrar a instalação completa do Ubuntu, ou apenas a pasta home iria resolver este problema.

Cifrar a directoria do utilizador implica que para aceder a qualquer ficheiro dentro dessa directoria é necessário a password usada como chave de cifra, tipicamente é a password do próprio utilizador. Não ajuda no que perguntas no ponto 1, apenas impede que sem a password alguém consiga ler o conteúdo dos ficheiros.

 

23 minutos atrás, Dr_Lion disse:
  • Uma terceira dúvida que não passa de uma questão de comodidade. É possível cifrar a pasta home de um utilizador, e esse utilizador não ter password para logar no sistema? Eu sei que do ponto de vista conceptual não faz sentido, mas para mim serve o meu fim! Desde que a pasta cifrada seja cifrada e decifrada quando o utilizador faz log in/logout ou ligando/desligando o pc (mesmo não tendo o utilizador password).

Não faz muito sentido se estiveres a falar da directoria de utilizador. Normalmente a password do utilizador é usada para decifrar a sua home, se o utilizador não tem password para login alguém tem de fornecer a password de cifra antes do utilizador fazer login (parte do login passa por ler dados da home do utilizador, tem de ser decifrada antes de concluir o login). Podes automatizar isto, executando um processo teu antes do login mas tens de ter a password guardada na máquina, num ficheiro acessível ao utilizador que está a fazer login, resumindo, se cifrares a home do utilizador ele, ou a máquina, têm de ter a password de cifra para concluírem o processo de autenticação/login. Podes, por outro lado, cifrar uma outra pasta, que não a home, onde colocas os dados... mas voltamos sempre ao mesmo, quando quiseres usar os dados nessa pasta tens de fornecer a password para decifrar, ou o utilizador a sabe ou ela está guardada num qualquer ficheiro na máquina. Além disso, no momento em que a directoria é decifrada, qualquer que seja o método, todos os ficheiros são acessíveis (respeitando as permissões definidas, naturalmente).

Podes explicar melhor qual o objectivo do que estás a tentar fazer? Não há muitos casos de uso onde pretendas dar a um utilizador a permissão de executar um programa mas impedir o acesso a todo e qualquer ficheiro desse mesmo programa...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dr_Lion

A parte de cifrar a diretoria era mesmo para proteger de tentativas de acessos exteriores, funciona para isso não para o resto.

Já compreendi que para cifrar tem que haver uma password, seja a do utilizador ou não, e que tem que ser colocada, seja de forma automática ou manual, até aqui não tenho dúvidas.

 

O que me estás a estragar os planos, foi a tua primeira afirmação, se o utilizador tiver permissões de execução também consegue ler os ficheiros! Tens mesmo a certeza? Eu já li em algum lado que supostamente não conseguiria ler, mas não afirmo com certeza porque li na diagonal..

Quanto á tua pergunta, neste caso existem também scripts em plaintext, mas mesmo que fosse apenas código compilado, é possível reverter o código máquina, e obter o programa em assembly (muito trabalhoso para perceber) ou mesmo em C que se torna bastante mais compreensível!

O que pretendo fazer é simples, é fazer um programa que seja não digo impossível (porque nunca será!) mas pelo menos bastante trabalhoso para copiar.

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Se retirares as permissões de leitura de um utilizador, mesmo que coloques permissões de execução, esse utilizador não pode executar o script, executar implica poder ler. Mas é simples de testar, pega no teu script, atribuí a um utilizador de teste, retira as permissões de leitura de grupo e de outros e tenta executar esse script. Agora, podes criar uma forma de iniciar o script através de um terminal com permissões diferentes, ou fazer de forma a que o script (ou o programa) seja executado por um utilizador mas com as permissões de outro... normalmente dá mais trabalho do que realmente benefício.

É apenas opinião, mas acho que estás  a complicar a procurar soluções para problemas que não existem. Como disseste, não há forma de impedir a cópia, mesmo compilado é possível obter as instruções em Assembly, e até em C, mas o teu programa é assim tão inovador, tão financeiramente atraente que seja mais barato/prático copiar o conteúdo, passando por todo o processo de tentar "decompilar" o programa, do que fazer simplesmente uma versão com as mesmas funcionalidades?

Se queres que o utilizador possa executar o teu programa ele terá sempre possibilidade de copiar o binário/script para outro lado qualquer, por isso é que se usam sistemas de protecção de cópia que não dependem de permissões (e já viste como esses sistemas funcionam bem... só se for para que os vende :), quem os compra só gasta dinheiro e tempo).

Sei que existem outros tópicos sobre como "proteger" o código/programa de cópias, pesquisa no fórum e pode ser que alguma das soluções sirva para o que pretendes, não me lembro se há algum tópico exactamente sobre a mesma questão.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dr_Lion

Segui a tua sugestão, estive a ler outros tópicos, deu para tirar algumas ideias e pensar noutras.

Talvez apenas cifrar o diretório da aplicação em vez da pasta home, e ter uma verificação/autenticação remota que permita obter mais garantias que o sistema não é violado.

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Ainda acho que estás a tentar resolver um problema que não existe :)

Essa validação online como é que vai funcionar se não existir comunicação com o sistema remoto que faz a autenticação? Ou então o que é que me impede de capturar todo o texto que é recebido para ver qual é a chave para decifrar a directoria? Ou como é que o sistema remoto sabe que eu copiei os ficheiros depois da directoria ser decifrada, até porque tem de estar decifrada para o programa funcionar... e como é que volta a ser cifrada, não será o sistema remoto a fazer isso certamente, e o programa não se cifra a si próprio :)

Mas já estou a meter-me onde não sou chamado :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Provavelmente consegues fazer com que o programa leia ficheiros aos quais o utilizador não tem acesso se o programa conseguir executar as instruções de leitura com outro user id / group id (terias que ler sobre setuid, setgid). No entanto, isto só resolve parte dos problemas que estás a tentar resolver.

Se alguém executa um programa localmente, isso implica permissão de leitura e execução no binário que contém o programa -- isto permite a tal «descompilação». Se o resto for feito correctamente com setuid / setgid, podes impedir que o utilizador aceda aos ficheiros a não ser no contexto do programa que está a ser executado, mas logicamente poderá facilmente aceder aos mesmos de variadíssimas formas desde que haja acesso físico aos dados.

Ainda assim, deixa-me dizer-te que partilho da opinião do Knitter: parece-me que estás a exagerar um pouco nisto tudo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dr_Lion

Ok, é normal que se possa exagerar quando se fala em segurança, já que nenhum sistema é 100% seguro. Sendo que pelo meio da conversa surgem sempre ideias interessantes, coisas que se aprendem e mesmo que a eficácia dos mecanismos de segurança seja moderada, é sempre melhor ter duas ou 3 opções implementadas do que nenhuma. Pois não impede alguém com bastante motivação para atingir o seu objectivo, mas dificulta o processo a todos os que tentam.

Para a validação online é óbvio que tem que existir (e já existe comunicação entre os sistemas). Se a comunicação da chave ocorrer sobre um canal seguro (cifrado) já reduz as possibilidades de captura dos dados, pelo menos sem acesso físico á máquina!

O sistema remoto não tem forma de saber se já foram copiados dados, ou se vão ser, esse caso (cópia dos dados) tem que ser resolvido do lado da máquina a correr o programa com alguma forma de reduzir as possibilidades/facilidades de isso acontecer.

Pois essa parte do programa não se cifrar a si próprio eu sei, porque era algo que dava bastante jeito, mas para a questão a cifra tinha pensado em usar a pasta home cifrada, ou apenas uma pasta dentro da home, onde estivesse o programa. Como é normal a autenticação e o mecanismo de cifra teriam que estar fora da pasta cifrada.

Também me parece que a forma mais segura de proteger o programa seria este existir do lado do servidor e as máquinas clientes apenas se ligarem ao servidor e executarem o programa no servidor, dessa forma apenas haveria valores passados na comunicação e o programa nunca estaria do lado do cliente.

OU verificar se o cliente não sofreu alterações e toda a ver que for para ser usado o servidor enviava o programa para o cliente, e removia com base em determinadas condições. Como é óbvio também não é prático para programas elaborados devido ao tamanho dos mesmos!

Agradeço a dica do userid/groupid vou pesquisar sobre esse assunto.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Talvez não tenha explicado as minhas reservas, não é uma questão de segurança porque o estás a tentar fazer não é relacionado com segurança. Isso seria se estivesses a tentar evitar alteração aos dados dos utilizadores, a sua integridade ou impedir que sejam feitas acções que possam violar os dados envolvidos. O que estás a fazer é um sistema de protecção de cópia, e é minha opinião que está mais que demonstrado que o custo técnico e naturalmente financeiro dessas soluções é sempre superior aos benefícios que fornece; basta olhar para os anos de cópias ilegais de todos os tipos de software, com os mais variados tipos de protecção, desde sistemas de validação em servidor a sistemas de validação físicos.

Quem ganha com sistemas de protecção de cópia é quem os vende, quem os compra só perde dinheiro, quem os implementa por conta própria só gasta tempo :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.