Isso parece surgir de tempos em tempos em vários bugtrackers: Debian # 46049 , Debian # 711001 , RH # 133683 . Mas nada disso parece ser implementado.
Para recapitular: o Interruptor de serviço de nome lê /etc/nsswitch.conf
onde procurar, por exemplo, services
informação:
$ strace -f -e open,stat getent services > /dev/null
[...]
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libdb-5.3.so", O_RDONLY|O_CLOEXEC) = 3
open("/var/lib/misc/DB_CONFIG", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/var/lib/misc/services.db", 0x7ffd79d77060) = -1 ENOENT (No such file or directory)
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3
+++ exited with 0 +++
Esse libnss_db.so.2
só pôde ser encontrado porque eu instalei libnss-db mais cedo. Assim, se alguém conseguir criar um banco de dados Berkeley DB em /var/lib/misc/services.db
com nomes de serviço adicionais, isso pode funcionar .
Atualização: com libnss-db
(Debian / instável aqui), isso é realmente possível:
$ grep ^[A-Z] /etc/default/libnss-db
ETC = /etc/local
DBS = services
VAR_DB = /var/lib/misc
AWK = awk
MAKEDB = makedb --quiet
$ cat /etc/local/services
# Local services
foobar 1234/tcp # Foo
barbaz 4321/udp
$ make
services... done.
$ getent services | wc -l
559
$ getent services foobar barbaz
foobar 1234/tcp
barbaz 4321/udp
E como /etc/local
é não um diretório de configuração registrado , não deve ser tocado por qualquer processo de atualização
Caso contrário, esses nomes de caminho parecem ser codificados e só podem ser alterados / estendidos em uma recompilação, por isso os tickets listados acima.
$ strings /lib/x86_64-linux-gnu/libnss_files.so.2 | grep services
/etc/services
Observação: há também um pacote libnss-extrausers , que parece fornecer arquivos adicionais para o NSS, mas apenas para passwd
, shadow
e group
information.