답변:
man
(사용자가 아닌 명령)는 도움말 응용 프로그램입니다. 응용 프로그램은 패키지의 매뉴얼 페이지를 제공하지만 man
위치와 제공 위치를 알아야합니다. man
입력 할 때 전체 파일 시스템을 검색하지 않으므로 작업 속도를 높이기 man <command>
위해이 매뉴얼 페이지는이라는 명령으로 데이터베이스에 색인됩니다 mandb
.
우분투 mandb
에서는 인덱스를 GNU gdbm 데이터베이스에 저장합니다 /var/cache/man/index.db
(그리고 같은 디렉토리에있는 몇몇 언어 별 버전). 이것은 memcache와 유사하지 않은 키-값 해싱 데이터베이스이거나 유사한 아이디어에 대한 다른 백 가지 구현입니다. 이진, 가볍고 빠릅니다. 마지막에 게임하는 방법에 대한 예를 들어 보겠습니다.
이 색인은 매일 우분투에서 실행되도록 예약되어 있습니다 /etc/cron.daily/man-db
. 전체 스크립트는 루트로 실행되며 먼저 정리하지만 마지막 mandb
에는 man
사용자 로 실행되는 것을 볼 수 있습니다.
# --pidfile /dev/null so it always starts; mandb isn't really a daemon,
# but we want to start it like one.
start-stop-daemon --start --pidfile /dev/null \
--startas /usr/bin/mandb --oknodo --chuid man \
$iosched_idle \
-- --no-purge --quiet
그룹을 변경하지 않으므로 모든 그룹 소유권 /var/cache/man
이 여전히 루트입니다.
그러나 왜 mandb
다른 사용자로 실행됩니까? 아마 (아마도) 실행될 수는 root
있지만 다양한 소스에서 입력 을 처리 하고 있습니다 (참조 manpath
). 자체 사용자로 실행하면 시스템이 변형되거나 손상되거나 악의적 인 맨 페이지에 의해 악용되는 프로세스로부터 시스템을 격리시킵니다.
최악의 상황은 man
페이지 색인 에만 영향을 미칩니다 . 부후 다음과 같이 확인할 수 있습니다.
sudo -u man find / -writable 2>/dev/null
그리고이 접근 방식을 사용하여 사용자가 시스템에서 발생할 수있는 피해량을 확인할 수 있습니다. 파일 권한을 감사하는 것이 좋습니다 (예를 들어 모든 사용자가 내 전체 음악 컬렉션을 삭제할 수 있음을 알았습니다).
로 데이터베이스를 들여다 볼 수 있습니다 accessdb
. 다음은 몇 가지 무작위 레코드입니다.
$ accessdb | shuf -n3
fpurge -> "- 3 3 1380819168 A - - gz purge a stream"
fcgetlangs -> "FcGetLangs 3 3 1402007131 A - - gz Get list of languages"
ipython -> "- 1 1 1393443907 A - - gz Tools for Interactive Computing in Python."
위에서 완전히 명확하지는 않지만 실제로 탭으로 구분 된 필드가 있습니다.
<name> -> <ext> <sec> <mtime> <ID> <ref> <comp> <whatis>
실제 필드 내용에 대한 자세한 내용 은 기술 설명서를 참조하십시오 .