Como usar o locate com um diretório home ilegível para o mundo

1

man locate diz:

 The locate database is typically built by user ''nobody'' and the
 locate.updatedb(8) utility skips directories which are not readable for
 user ''nobody'', group ''nobody'', or world.  For example, if your HOME
 directory is not world-readable, none of your files are in the database.

Como é melhor para a segurança ter um diretório inicial que não seja legível ao mundo, como posso tornar meu diretório inicial pesquisável (somente para mim)?

Obviamente, posso contornar isso adicionando find ~ -type f > .locate em crontab e então grep <search> ~/.locate , mas existe uma maneira padrão de fazer isso usando o locate ?

    
por forthrin 03.06.2018 / 12:19

2 respostas

3

A maioria das distribuições será enviada com as ferramentas locate de findutils em um pacote junto com um script chamado de crontab que executará updatedb como usuário nobody. Você só precisa encontrar este script (por exemplo: no Debian 9 está em /etc/cron.daily/locate ) e adaptá-lo para remover o manuseio do usuário, bem como alterar o arquivo do banco de dados. Então, no final, uma forma básica poderia resumir-se a:

updatedb --output="$HOME/locatedb" --localpaths="$HOME"

Isso provavelmente deve ser colocado em um crontab.

E o uso seria então:

locate --database="$HOME/locatedb" somefilepattern

você terá que adicionar mais opções se você estiver usando montagens de rede e quiser indexá-las, etc.

Se você tiver acesso root em seu sistema e refletir sobre possíveis problemas de segurança / privacidade, poderá simplificar sua vida e usar o mlocate a> ferramentas provavelmente disponíveis na maioria das distribuições, que se comportam exatamente como as ferramentas de localização, exceto que indexam tudo como raiz (nunca deixando de indexar os diretórios ilegíveis do mundo) para um banco de dados não acessível diretamente pelo usuário, mas usam um setuid / setgid locate comando que irá lê-lo e permitirá exibir resultados para um determinado usuário somente se este usuário puder acessar os resultados em primeiro lugar.

    
por 03.06.2018 / 13:07
0

/usr/libexec/locate.updatedb no meu sistema (uma variante BSD) não parece ter as opções sugeridas por A.B. Em vez disso, faz:

: ${FCODES:=/var/db/locate.database}
: ${SEARCHPATHS:="/"}

Então eu tive que fazer isso:

export SEARCHPATHS=$HOME
export FCODES=$HOME/locatedb
/usr/libexec/locate.updatedb

Então:

$ locate -d ~/locatedb <pattern>

Existe alguma maneira de definir as variáveis de ambiente no meu sistema?

    
por 03.06.2018 / 15:55

Tags