전 세계가 읽을 수 없는 홈 디렉토리에서 위치 찾기를 사용하는 방법

전 세계가 읽을 수 없는 홈 디렉토리에서 위치 찾기를 사용하는 방법

man locate설명하다:

 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.

다른 사람이 읽을 수 없는 홈 디렉토리를 갖는 것이 보안상 더 좋으므로 내 홈 디렉토리를 검색 가능하게 하려면 어떻게 해야 합니까(나만을 위해)?

find ~ -type f > .locate분명히 추가 crontab하고 do 를 수행하면 이 문제를 해결할 수 있지만 grep <search> ~/.locate, 이를 수행하는 기본 제공 표준 방법이 있습니까 locate?

답변1

대부분의 배포판은 locatefindutils 도구를 사용자 none으로 updateb를 실행하는 crontab에서 호출되는 스크립트와 함께 패키지로 제공합니다. 이 스크립트를 찾아(예: Debian 9에서는 위치 /etc/cron.daily/locate) 수정하여 사용자 처리를 제거하고 데이터베이스 파일을 변경하기만 하면 됩니다. 따라서 최종 기본 형식은 다음과 같습니다.

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

이것은 아마도 crontab에 배치되어야 할 것입니다.

그러면 사용법은 다음과 같습니다.

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

네트워크 설치를 사용하고 이를 색인화하려는 경우에는 더 많은 옵션을 추가해야 합니다.

시스템에 대한 루트 액세스 권한이 있고 가능한 보안/개인 정보 보호 문제를 고려하면 생활을 단순화하고 대안을 사용할 수 있습니다.mlocate사용자가 직접 액세스할 수 없는 데이터베이스에 모든 것을 루트로 색인화한다는 점을 제외하면 대부분의 배포판에는 위치 도구와 똑같이 작동하는 도구가 있을 수 있습니다. setuid/setgid를 사용한 명령은 이를 읽고 해당 사용자가 처음으로 결과에 액세스할 수 있는 경우에만 해당 사용자에게 결과가 표시되도록 허용합니다.

답변2

/usr/libexec/locate.updatedbAB가 제안한 옵션을 내 시스템(BSD 변형)에서 사용할 수 없는 것 같습니다. 대신 다음과 같은 기능이 있습니다.

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

그래서 나는 이렇게 해야 합니다:

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

그 다음에:

$ locate -d ~/locatedb <pattern>

내 시스템에서 환경 변수를 설정하는 방법이 있습니까?

관련 정보