É possível redefinir o til ('~', diretório inicial)?

12

É possível redefinir o diretório inicial? por exemplo. para /ext1/username em vez de /home/username , ou seja, expandindo o ~ para outro diretório (em oposição a alterar o diretório inicial real onde os arquivos iniciais dos usuários estão localizados).

(Esta questão é principalmente acadêmica, já que parece ser uma má prática. Eu também não tenho escolha em usar csh , apesar de ter lido o Top 10).

    
por Andrew Cheong 04.12.2013 / 14:43

3 respostas

26

O til ~ é interpretado pelo seu shell. Seu shell interpretará ~ como uma forma abreviada de $HOME .

Experimente (echo ~; HOME=foo; echo ~) . Isso deve primeiro imprimir seu diretório pessoal real e depois "foo", como você define $HOME para isso.

O valor padrão de $HOME vem da sua configuração do sistema. Use getent passwd para listar todos os usuários conhecidos e seus diretórios iniciais. Dependendo da configuração do sistema, essas entradas podem vir de /etc/passwd ou de qualquer serviço de diretório remoto.

Se você quiser apenas redefinir temporariamente seu diretório pessoal, basta definir outro $HOME .

Se você quiser alterá-lo permanentemente, deverá alterar a entrada passwd, por exemplo, editando manualmente /etc/passwd .

    
por 04.12.2013 / 15:04
11

O valor usado para ~ é determinado pelo valor obtido do banco de dados administrativo ( getent passwd ), normalmente no arquivo /etc/passwd , para o diretório pessoal de cada usuário definido lá.

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

A sexta coluna neste arquivo é onde o valor usado quando alguém digita cd ~ vem.

nsswitch

Você pode ver o que um sistema usaria para o diretório pessoal do usuário usando o comando getent passwd :

$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

O "banco de dados" que os fornece é controlado pelo resolvedor de sistemas, definido em /etc/nsswitch.conf .

$ grep passwd /etc/nsswitch.conf 
#passwd:    db files nisplus nis
passwd:     files

Arquivos acima significam /etc/passwd , mas o "banco de dados" pode vir de LDAP, NIS ou outros locais na rede, por exemplo.

Mover / Redefinir?

Para executar esta operação é um pouco complicado depois que as contas foram criadas. Se você está criando contas do zero, é fácil redefinir a localização de um usuário no diretório inicial. Ao executar o comando useradd , você pode especificar o local a ser usado para o diretório pessoal de um usuário.

Exemplo

$ useradd -d /ext1/acheong ...

trecho da página man

-d, --home HOME_DIR
   The new user will be created using HOME_DIR as the value for the user’s 
   login directory. The default is to append the LOGIN name to BASE_DIR and 
   use that as the login directory name. The directory HOME_DIR does not 
   have to exist but will not be created if it is missing.

Para contas existentes?

Isso se torna mais uma operação cirúrgica, já que muitas vezes o caminho do diretório pessoal de um usuário é incluído estaticamente nos arquivos de configuração, tornando-o mais complicado.

Exemplo

$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"

Eles precisarão ser corrigidos ou você precisará fornecer um link de /home/sam para o novo local, /ext1/sam .

Movendo quando "banco de dados" não é /etc/passwd

Se o sistema estiver obtendo os diretórios home do LDAP, NIS, etc., você precisará executar a realocação nesses sistemas e coordenar com a movimentação dos arquivos de /home/sam para /ext1/sam .

Referências

por 04.12.2013 / 14:52
1

Se o motivo for espalhar usuários em vários sistemas de arquivos, você também pode usar o automounter . E até mesmo permitir que você tenha um diretório "base" diferente para seus usuários.

    
por 07.03.2017 / 19:34