Existe um link simbólico padrão para o diretório inicial dos usuários atuais?

9

O shell pode expandir ~ para seu diretório inicial. $HOME geralmente tem o mesmo negócio, mas muitas vezes você quer se referir ao diretório inicial dos usuários atuais de um contexto que pode não suportar tal expansão.

Eu tenho arquivos de configuração em que $HOME funciona, mas ~ não e vice-versa.

Eu acho que o fusível poderia fornecer algo ao longo destas linhas, algo como /var/myself - > $HOME

Com isso, posso colocar valores em arquivos de configuração para apontar coisas como /var/myself/backdrops/pornography/wtf/yarly.jpg

Existe algo assim já? Se não, há boas razões para não haver algo assim?

    
por Lerc 09.09.2010 / 08:01

4 respostas

6

Eu entendo sua preocupação, mas a resposta é "não" não existe tal coisa.
O método usual é perguntar ao sistema operacional o caminho de origem do usuário ou obter a variável $ HOME.

Todas essas opções precisam sempre de alguma codificação do aplicativo. Muitos aplicativos, como bash, oferecem o "alias" ~ (open (2) não traduz isso).

É claro que um módulo vfs ou um fusível pode ser implementado para fazer isso. Provavelmente há algo para fazer isso, eu vou perguntar isso!

Mas é realmente necessário? Você pode usar uma solução alternativa como:

  • Crie um script para iniciar o programa que vincula o $ HOME a um caminho relativo ou a um local conhecido.

  • Use o pam_exec para vincular o diretório $ HOME a um local conhecido link

por 09.09.2010 / 10:28
0

Um truque (no Linux, pelo menos) seria alterar o diretório para $HOME antes de executar o aplicativo e usar /proc/self/cwd/... no arquivo de configuração.

    
por 11.09.2010 / 00:56
0

A maioria dos programas permite que você especifique um caminho para o arquivo de configuração na linha de comando. Assim, você pode escrever um wrapper que use um arquivo de configuração padrão, filtre-o para substituir itens como $HOME para o usuário atual e, em seguida, transmita o arquivo de configuração temporário modificado para o programa.

    
por 12.09.2010 / 16:00
0

Você pode obter o pid de requestin user e perguntar ao sistema de seu diretório home. Então é possível.

No entanto, não tenho certeza se não há programas SUID que considerem o FS como estático.

Editar:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

O código acima não é ideal, mas deve funcionar para casos comuns.

    
por 09.09.2010 / 09:49

Tags