Wie finde ich eine Datei mit der bestimmten Berechtigung eines bestimmten Benutzers?

Wie finde ich eine Datei mit der bestimmten Berechtigung eines bestimmten Benutzers?

Wie erhalte ich eine Liste aller Dateien, deren Berechtigung für einen bestimmten Benutzer „Lesen und Schreiben“ lautet?

Wenn ich beispielsweise auf den Desktop meines Macs gehe, mit der rechten Maustaste auf die Datei „A“ klicke und dann auf „Informationen“ gehe, habe ich unten „Freigeben und Berechtigungen“, wo ich einen benutzerdefinierten Benutzer wie beispielsweise „popo“ hinzufügen und dann festlegen kann, dass er diese Datei „lesen und schreiben“ kann.

Dann möchte ich eine Befehlszeile verwenden, um alle Dateien abzurufen, die POPO lesen und schreiben kann, und nur diese (im obigen Beispiel möchte ich „A“ abrufen).

Alle meine Nachforschungen haben mich bisher zu etwas wie Folgendem geführt:

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

Aber ich bekomme nichts.

Was ist an dem oben genannten falsch findund wie soll ich vorgehen?

Antwort1

Sie müssen nach Dateien suchen, die von allen ODER von der UID des Benutzers ODER von allen Gruppen, denen der Benutzer angehört, als RW-Dateien gespeichert werden. Aber es ist ein bisschen komplizierter als das. Wie vonHiervon Stephane Chazelas: Wenn eine Datei einem Benutzer gehört, zählen NUR die Berechtigungen des Eigentümers, und wenn eine Datei einer Gruppe gehört, deren Mitglied der Benutzer ist, zählen nur die Gruppenberechtigungen.

Wir müssen also nach „Besitzer=RW oder (nicht Besitzer und Gruppe=rw) oder (nicht Besitzer und nicht Gruppe und andere=rw)“ suchen.

Sie können eine Liste der Gruppen-GIDs abrufen, deren Mitglied ein Benutzer ist, indem Sie Folgendes tun id -G. Dies kann verwendet werden, um eine Suchbefehlszeile mit standardmäßiger Shell-Befehlsersetzung zu erstellen.

Meine ursprüngliche Antwort bestand aus einem Einzeiler, aber dieser Job ist viel zu komplex, um ihn in einem Einzeiler erledigen zu wollen. Hier ist ein Bash-Shell-Skript, das den Job erledigt.

#! /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 \) 

Dieses Skript muss als Root ausgeführt werden. Andere Benutzer verfügen möglicherweise nicht über die erforderlichen Berechtigungen, um in allen Verzeichnissen zu suchen, die Popo durchsuchen kann.

Hinweis: Ich habe dies auf einem Debian-Linux-System mit den neuesten Versionen von idGNU Coreutils und findGNU findutils getestet. Die Mac-Implementierungen von idund findkönnen unterschiedlich sein, da mir momentan kein Mac zum Testen zur Verfügung steht. Wenn es anders ist, suchen Sie in den Mac-Manpages nach idund find- die Dinge, nach denen Sie suchen müssen und die möglicherweise für einen Mac angepasst werden müssen, sind die -Gund -u-Optionen für idund die -perm /oder '-perm -'-Optionen von find.

Antwort2

Dies liegt daran, dass mit -userdieser Option nach Dateien gesucht wird, bei denen der Benutzer als Dateieigentümer angegeben ist, und das ist in Ihrem Fall nicht der Fall.

Der einfachste Weg, Ihr Ziel zu erreichen, scheint die Ausführung des Befehls als Popo-Benutzer zu sein:

find /Users/Me/Desktop -readable

Antwort3

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

Sehendiese Antwort auf eine fast identische Fragewarum die Überprüfung der Berechtigungen generell nicht funktioniert.

verwandte Informationen