7.6. Criando Arquivos Essenciais e Linques Simbólicos

Historicamente, o Linux manteve uma lista dos sistemas de arquivos montados no arquivo /etc/mtab. Núcleos modernos mantém essa lista internamente e a expõem para o(a) usante via sistema de arquivos /proc. Para satisfazer utilitários que esperam encontrar o /etc/mtab, crie o seguinte linque simbólico:

ln -sv /proc/self/mounts /etc/mtab

Crie um arquivo /etc/hosts básico para ser referenciado em algumas suítes de teste e em um dos arquivos de configuração do Perl também:

cat > /etc/hosts << EOF
127.0.0.1  localhost $(hostname)
::1        localhost
EOF

Para que o(a) usante root seja capaz de logar e para que o nome root seja reconhecido, precisam existir entradas relevantes nos arquivos /etc/passwd e /etc/group.

Crie o arquivo /etc/passwd executando o seguinte comando:

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/usr/bin/false
daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/usr/bin/false
systemd-journal-remote:x:74:74:systemd Journal Remote:/:/usr/bin/false
systemd-journal-upload:x:75:75:systemd Journal Upload:/:/usr/bin/false
systemd-network:x:76:76:systemd Network Management:/:/usr/bin/false
systemd-resolve:x:77:77:systemd Resolver:/:/usr/bin/false
systemd-timesync:x:78:78:systemd Time Synchronization:/:/usr/bin/false
systemd-coredump:x:79:79:systemd Core Dumper:/:/usr/bin/false
uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
systemd-oom:x:81:81:systemd Out Of Memory Daemon:/:/usr/bin/false
nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false
EOF

A senha atual para root será configurada posteriormente.

Crie o arquivo /etc/group executando o seguinte comando:

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
clock:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
kvm:x:61:
systemd-journal-gateway:x:73:
systemd-journal-remote:x:74:
systemd-journal-upload:x:75:
systemd-network:x:76:
systemd-resolve:x:77:
systemd-timesync:x:78:
systemd-coredump:x:79:
uuidd:x:80:
systemd-oom:x:81:
wheel:x:97:
users:x:999:
nogroup:x:65534:
EOF

Os grupos criados não são parte de nenhum padrão—eles são grupos decididos em parte pelas exigências da configuração do Udev no Capítulo 9 e em parte pelas convenções comuns empregadas por um número de distribuições Linux existentes. Adicionalmente, algumas suítes de teste dependem de usantes ou grupos específicos(as). A Linux Standard Base (LSB, disponível em https://refspecs.linuxfoundation.org/lsb.shtml) somente recomenda que, além do grupo root com um ID de Grupo (GID) de 0, um grupo bin com um GID de 1 esteja presente. O GID de 5 é amplamente usado para o grupo tty e o número 5 também é usado no systemd para o sistema de arquivos devpts. Todos os outros nomes de grupo e GIDs podem ser escolhidos livremente pelo(a) administrador(a) do sistema, uma vez que programas bem escritos não dependem de números de GID, mas sim usam o nome do grupo.

O ID 65534 é usado pelo núcleo para NFS e espaços de nome de usante separados para usantes e grupos não mapeados(as) (aqueles(as) existem no servidor NFS ou no espaço de nome de usante ancestral, porém não existem na máquina local ou no espaço de nome separado). Nós atribuímos nobody e nogroup para evitar um ID não nominado. Porém, outras distribuições possivelmente tratem esse ID diferentemente, de modo que qualquer programa portável não deveria depender dessa atribuição.

Alguns testes no Capítulo 8 precisam de um(a) usante regular. Nós adicionamos esse(a) usante aqui e deletamos essa conta ao final daquele capítulo.

echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd
echo "tester:x:101:" >> /etc/group
install -o tester -d /home/tester

Para remover o prompt I have no name!, inicie um novo shell. Uma vez que os arquivos /etc/passwd e /etc/group tenham sido criados, a resolução de nome de usante e de nome de grupo agora funcionará:

exec /usr/bin/bash --login

Os aplicativos login, agetty e init (e outros) usam um número de arquivos de registro para registrar informação, tais como quem esteve logada(o) no sistema e quando. Entretanto, esses aplicativos não escreverão nos arquivos de registro se eles já não existirem. Inicialize os arquivos de registro e dê a eles permissões adequadas:

touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664  /var/log/lastlog
chmod -v 600  /var/log/btmp

O arquivo /var/log/wtmp registra todos os logins e logouts. O arquivo /var/log/lastlog registra quando cada usante se logou pela última vez. O arquivo /var/log/faillog registra tentativas falhas de login. O arquivo /var/log/btmp registra tentativas inválidas de login.

[Nota]

Nota

O arquivo /run/utmp registra os(as) usantes que estejam atualmente logados(as). Esse arquivo é criado dinamicamente quando um(a) usante se loga no sistema.

[Nota]

Nota

Os arquivos utmp, wtmp, btmp e lastlog usam inteiros de 32 bits para carimbos de tempo e eles serão fundamentalmente quebrados depois do ano 2038. Muitos pacotes pararam de usá-los e outros pacotes pararão de usá-los. Provavelmente é melhor considerá-los obsoletos.