Bem, isso depende do que você entende por "arquivo" e de como exatamente a biblioteca o acessa. Aqui estão algumas abordagens (ambas kluges) que vêm à mente:
- Use um arquivo temporário, no significado normal de
mkstemp
.mkstemp
retorna um número de descritor de arquivo para um arquivo desvinculado. Você pode então criar$FOO/mypasswd
como um link simbólico para/proc/self/fd/returned_number
. Há uma pequena janela onde o arquivo existe (entre abrir e desassociar), e outra coisa em execução como o mesmo usuário poderia abri-lo, e segure o descritor de arquivo para depois ler a senha. Você pode ter certeza de que não será gravado no disco se o seu diretório temporário estiver em um tmpfs. - Se não precisar de
seek
do arquivo de senhas, usepipe
/pipe2
para criar seus descritores de arquivos e, em seguida, proceda como acima com o symlink. Você precisará forçar um processo filho para manipular a senha para o pipe. - Você provavelmente pode abusar do FUSE para fazer isso.
- Você pode usar
LD_PRELOAD
(ou outros truques de vinculador dinâmico) para "corrigir" a biblioteca interceptandoopen
/read
/close
e fornecer a senha a ela em algum lugar.
Nenhum desses é realmente seguro de outros processos. Outros processos em execução como o mesmo usuário poderiam, por exemplo, ptrace
do seu processo e ler a senha diretamente da memória.