/ etc / passwd에 man 항목이있는 이유 /etc/passwd파일에 man user에 대한

/etc/passwd파일에 man user에 대한 항목이 있음을 알았습니다 . 이 사용자의 목적은 무엇입니까?

man:x:6:12:man:/var/cache/man:/bin/sh


답변

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>

실제 필드 내용에 대한 자세한 내용 은 기술 설명서를 참조하십시오 .