Se você definir as permissões nos arquivos como: 0600
ou definir o umask 077
para o usuário que está executando o aplicativo, os arquivos só poderão ser acessados pelo usuário do aplicativo e root
.
Eu quero saber se é possível que um aplicativo crie arquivos acessíveis somente a partir do próprio aplicativo. O problema é que eu não tenho acesso root.
Por exemplo, se eu executar o aplicativo como UserA, quero garantir que qualquer outro aplicativo executado pelo UserA não possa acessar os arquivos.
Se você definir as permissões nos arquivos como: 0600
ou definir o umask 077
para o usuário que está executando o aplicativo, os arquivos só poderão ser acessados pelo usuário do aplicativo e root
.
Em tempos passados e em sistemas sem proc(5)
montado, um processo poderia criar e abrir um arquivo, unlink(2)
it, e ter um identificador aberto válido para um arquivo anônimo. Nenhum outro processo poderia nomear e, portanto, não poderia open(2)
o arquivo, mesmo outro processo executado pelo mesmo usuário (ou raiz)
No entanto, como a maioria dos sistemas Linux tem /proc
montado, até mesmo arquivos sem nome retêm um nome como /proc/2757/fd/4
, que é acessível a outros processos executados pelo mesmo usuário.
Atualmente, não consigo pensar em uma maneira de alcançar o que você deseja sem envolver o root. Então, entre em contato com seu administrador de sistema e obtenha uma segunda conta para sua inscrição.
Isso não é possível diretamente; no entanto, você pode criar um programa (ou um wrapper para esse programa) que verifique as informações sobre seu pai.
É impossível para um processo sem privilégios criar um arquivo que ele possa ler, mas outros processos executados como esse usuário não pode.
Prova: suponha que o processo A (sem privilégios) tenha o arquivo aberto e o processo B (executando como o mesmo usuário) também queira abrir o arquivo. O processo B pode chamar ptrace
para assumir o controle do processo A. A chamada de sistema ptrace
permite ao processo B executar código arbitrário dentro do processo A, incluindo o estabelecimento de um soquete unix para processar A e passar o descritor de arquivo aberto sobre ele (passagem de descritor de arquivo é um recurso de soquetes de datagrama unix que, como o nome indica, permite ao remetente enviar um descritor de arquivo ao receptor) após o qual o receptor tem o mesmo arquivo aberto no mesmo modo).
É possível que o objetivo do seu professor seja abrir um arquivo e excluí-lo. Um arquivo excluído - tecnicamente, um arquivo desvinculado - não pode ser aberto por meios convencionais: nenhum processo (mesmo um privilegiado) pode abri-lo com a chamada do sistema open
, já que não há nome que possa ser passado como argumento. Mas o processo (ou processos) que tem o arquivo aberto pode continuar trabalhando com ele; o arquivo só será realmente deletado quando o último processo que o tiver aberto morrer. Outros processos ainda podem abrir um identificador para o arquivo usando ptrace
, conforme descrito acima.
Além do método ptrace
, em algumas variantes unix, incluindo o Linux, pode haver outras formas de abrir um arquivo que é aberto em outro processo, através de /proc
.
Tags linux not-root-user