특정 사용자에 대한 특정 권한이 있는 파일을 찾는 방법은 무엇입니까?

특정 사용자에 대한 특정 권한이 있는 파일을 찾는 방법은 무엇입니까?

특정 사용자에게 "읽기 및 쓰기" 권한이 있는 모든 파일 목록을 얻으려면 어떻게 해야 합니까?

예를 들어, Mac 데스크탑으로 이동하여 "A" 파일을 마우스 오른쪽 버튼으로 클릭한 다음 "정보 가져오기"를 클릭하고 맨 아래에 "popo"와 같은 사용자 정의 사용자를 추가할 수 있는 "공유 및 권한"이 있습니다. , 그런 다음 파일을 "읽고 쓸" 수 있음을 지정합니다.

그런 다음 명령줄을 사용하여 POPO가 읽고 쓸 수 있는 모든 파일과 해당 파일만 가져오고 싶습니다(위 예에서는 "A"를 가져오고 싶습니다).

현재 내 모든 연구는 다음과 같은 결과를 낳습니다.

find /Users/Me/Desktop -user popo -perm 777

하지만 난 아무것도 얻지 못했어..

위의 내용에 어떤 문제가 find있으며 어떻게 처리해야 합니까?

답변1

누구나 읽고 쓸 수 있는 파일, 사용자의 uid로 읽고 쓸 수 있는 파일, 사용자가 속한 모든 그룹에서 읽고 쓸 수 있는 파일을 검색해야 합니다. 그러나 현실은 그보다 더 복잡합니다. 지적한대로여기작성자: Stephane Chazelas 사용자가 파일을 소유한 경우 소유자 권한만 계산되고, 사용자가 속한 그룹이 파일을 소유한 경우 그룹 권한만 계산됩니다.

따라서 "소유자=RW 또는 (소유자가 아니고 그룹이 아니고 기타=rw) 또는 (소유자가 아니고 그룹이 아니고 기타=rw)"를 확인해야 합니다.

사용자가 속한 그룹 GID 목록을 가져오는 데 사용할 수 있습니다 id -G. 이는 표준 쉘 명령 대체를 사용하여 find 명령줄을 작성하는 데 사용할 수 있습니다.

내 원래 대답은 라인이었지만, 라인으로 하기에는 작업이 너무 복잡했습니다. 다음은 작업을 수행하는 bash 쉘 스크립트입니다.

#! /bin/bash

U="$1"      # username to do perm search on - e.g. popo
TOPDIR="$2" # starting directory for search - e.g. /Users/Me/Desktop

# permissions to search for - defaults to "rw"
PERMS=${3:-rw}

# permission bits "style".  "/"=ANY or "-"=ALL. defaults to / 
#
# see find(1) and search for '-perm -mode' or '-perm /mode' for 
# details on how this works.
PSTYLE=${4:-/}

# construct a find expression specifying all groups that the user
# is a member of
GIDS="$(for i in $(id -G "$U"); do echo -n " -gid $i -o "; done)"
GIDS=$(echo "$GIDS" | sed -e 's/ -o $//')    # strip trailing " -o "

find "$TOPDIR" \
   \( -user "$U" -perm ${PSTYLE}u=$PERMS \) \
   -o \( -not -user "$U" -a \( $GIDS \) -perm ${PSTYLE}g=$PERMS \) \
   -o \( -not -user "$U" -not \( $GIDS \) -perm ${PSTYLE}o=$PERMS \) 

이 스크립트는 루트로 실행되어야 합니다. 다른 사용자에게는 popo가 볼 수 있는 모든 디렉토리를 보는 데 필요한 권한이 없을 수도 있습니다.

id참고: 저는 최신 버전의 GNU Coreutils 및 GNU findutils를 사용하여 findDebian Linux 시스템에서 이것을 테스트했습니다 . idMac 구현은 find다를 수 있습니다. 현재 테스트할 수 있는 Mac이 없습니다. 서로 다른 경우 Mac 매뉴얼 페이지에서 idand find- Mac에 맞게 수정해야 할 수 있는 항목은 -Gand -u옵션 id-perm /또는 "-perm -" 옵션입니다 find.

답변2

-user이는 옵션이 지정된 사용자(파일 소유자인 경우)의 위치에서 파일을 검색하기 때문입니다 . 이는 귀하의 경우가 아닙니다.

가장 쉬운 방법은 popo 사용자로 명령을 실행하는 것입니다.

find /Users/Me/Desktop -readable

답변3

sudo find . -print0 | 
  sudo -u popo perl -Mfiletest=access -l -0ne '
    print if -r && -w'

바라보다거의 같은 질문에 대한 답변권한 확인이 종종 작동하지 않는 이유

관련 정보