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

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

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

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

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

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

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

하지만 아무것도 얻지 못해요..

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

답변1

모든 사람이 RW이거나 사용자의 uid가 RW이거나 사용자가 구성원인 모든 그룹이 RW인 파일을 검색해야 합니다. 하지만 그것보다 조금 더 복잡합니다. 가 지적한 바와 같이여기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 및 findGNU findutils 의 최신 버전을 사용하여 Debian Linux 시스템에서 이것을 테스트했습니다 . Mac 구현은 id다를 find수 있습니다. 현재 테스트할 수 있는 Mac이 없습니다. 다른 경우 Mac 매뉴얼 페이지에서 idand를 확인하세요 find. Mac에 맞게 수정해야 할 수 있는 항목은 -G-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'

보다거의 동일한 질문에 대한 답변권한 확인이 일반적으로 작동하지 않는 이유.

관련 정보