Jump to content
Dr_Lion

Limitar acesso a ficheiros

Recommended Posts

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.

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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.

 

Share this post


Link to post
Share on other 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.

  • Vote 1

Share this post


Link to post
Share on other 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.

 

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.