일반 사용자로 updatedb 명령을 사용하는 방법은 무엇입니까?


10

locate명령은 Linux에서 매우 유용한 도구이지만 루트 만 updatedb명령을 실행할 수있는 것처럼 보일 수 있습니다 . 그렇다면 일반 사용자가 updatedb 명령을 실행할 수있는 권한을 가지도록하는 방법은 무엇입니까?

updatedb locate 명령이 사용하는 db를 업데이트하는 데 사용되는 명령입니다.

그러나 updatedb를 일반 사용자로 실행하려고하면 다음 오류 메시지가 나타납니다.

[mirror@home code]$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

또는:

updatedb -o db
updatedb: can not change group of file `/var/lib/gforge/chroot/home/users/bigmeow/tmp/db.uhEZFQ': Operation not permitted

답변:


17

명령을 편집하여 다음을 수행하십시오.

updatedb --require-visibility 0 -o ~/.locate.db

"updatedb (8)"에서 :

-l, --require-visibility FLAG

'설정 그것을보고하기 전에 파일이 필요 가시성을 FLAG에 생성 된 데이터베이스에 플래그를 제공합니다.

FLAG가 0이거나 아니거나 "others"가 데이터베이스 파일을 읽을 수 있거나 slocate가 소유하지 않은 경우 locate (1)는 사용자가 locate (1)를 실행하여 필요한 디렉토리를 읽을 수없는 경우에도 데이터베이스 항목을 출력합니다. 데이터베이스 항목에서 설명하는 파일을 찾으십시오.

FLAG가 1 또는 yes (기본값)이면 locate (1)는 호출하는 사용자에게보고하기 전에 각 항목의 상위 디렉토리 권한을 확인합니다. 파일이 다른 사용자들로부터 실제로 숨겨 지도록하기 위해, 데이터베이스 그룹은 slocate로 설정되고 데이터베이스 권한은 set-gid slocate 인 locate (1) 이외의 다른 수단을 사용하여 사용자가 데이터베이스를 읽을 수 없도록합니다.

가시성 플래그는 데이터베이스가 slocate가 소유하고 "others"가 읽을 수없는 경우에만 확인됩니다.


--require-visibility깃발이 무엇인지 설명 하지만 ... 왜 그런지 설명 할 수 있을까요? 왜 @xaizek 이하 고있는 일을하고 --require-visibility플래그를 사용하지 않고 사용자에게 권한이있는 위치에 데이터베이스를 생성하지 않습니까?
Trevor Boyd Smith

나중에 맨 페이지에 내 질문에 대한 답변이 있습니다.SECURITY Databases built with --require-visibility no [tbs: or 0] allow users to find names of files and directories of other users, which they would not otherwise be able to do.
Trevor Boyd Smith

3

-o인수를 사용 하여 집에서 데이터베이스를 만들 수 있습니다 updatedb.

updatedb -o ~/.locate.db

그리고 이것을 다음과 slocate같이 사용하십시오 :

slocate --database=~/.locate.db <pattern>

에 대한 별칭을 정의하고 싶을 것입니다 slocate --database=~/.locate.db.


1
사실 -o 옵션을 사용해도 실패했습니다. 왜 그렇습니까? updatedb -o dbdb updatedb :`
/home/mirror/tmp/dbdb.zwHn1W

1
@hugemeow 왜 그런지 모르겠습니다. 어쩌면 / mirror / tmp에 비표준 옵션이 탑재되어 업데이트 된 그룹 변경을 금지 할 수 있습니다. xaizek:users나를 위해 owner : group 쌍으로 데이터베이스 파일을 작성했지만 그룹이 기본 파일입니다 . /etc/updatedb.conf파일 에서 옵션을 확인할 수도 있습니다 .
xaizek

찾기보다는 slocate를 사용해야합니까? centos
locate를

1
@hugemeow slocate는 이전보다 안전한 버전입니다 locate. centos는 slocatename으로 설치 해야한다고 생각합니다 locate. 어쨌든, 귀하의 경우에는 차이가 없으며 기본적으로 대부분의 경우에는 (Slackware locate는에 대한 심볼릭 링크입니다 slocate).
xaizek

1
@hugemeow mlocate더 빠르지 만 여전히 호환 가능해야 slocate합니다. 그것이 이유인지 확실하지 않습니다. slocate작동하지 않는 사이트 를 시도 하지 않으 려면 슬랙웨어 미러 중 하나에서 소스를 다운로드 하십시오 . 여기 에는 패키지 소스가 포함되어 있습니다 . 여기를 참조하십시오 .
xaizek

1

완벽한 솔루션을 갖기위한 모든 단계는 다음과 같습니다 (Centos 6.5에서 테스트).

1) db를 생성하십시오.

updatedb --require-visibility 0 -o ~/.locate.db

2) db를 사용하십시오.

locate --database=/full/path/to/.locate.db (does not work with ~)
or
locate --database=.locate.db

3) 별명을 작성하십시오.

alias mylocate='locate --database=/full/path/to/.locate.db'

4) 로케일 찾기 DB를 사용하십시오.

mylocate <my pattern>

$HOME대신에 사용 ~하거나을 제거하십시오 =. 다음 두 가지 모두 작동합니다. locate --database ~/.locate.db또는 locate --database=$HOME/.locate.db. 이 글 참조 : stackoverflow.com/questions/11587343/…
ardnew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.