Wie kann ich unter Linux alle Dateien und Verzeichnisse finden, die von einem bestimmten Benutzer beschreibbar (oder tatsächlich nicht beschreibbar) sind?
Bearbeiten: Zur Verdeutlichung habe ich unter einem bestimmten Unterverzeichnis gemeint, nicht systemweit. Und ja, das bedeutet alle Permutationen und Kombinationen von Benutzer-, Gruppen- und Weltschreibbarkeit, die es diesem Benutzer ermöglichen würden, zu schreiben. Ich weiß, was die Frage semantisch bedeutet. Ich hatte gehofft, dass ein oder mehrere Zeilen ausgeführt werden, um eine Liste dieser Dateien zu erhalten.
Antworten:
Verwenden Sie den Befehl 'find', wenn Sie findutils Version 4.3.0 oder höher installiert haben:
Für alle Dateien im aktuellen Verzeichnis, die vom aktuellen Benutzer geschrieben werden können:
Für alle Dateien im aktuellen Verzeichnis, die vom aktuellen Benutzer nicht beschreibbar sind:
Laut Manpage:
quelle
2>&1 | grep -v "Permission denied"
, umfind . -writable 2>&1 | grep -v "Permission denied"
Sie können ein Perl-Skript (
writable.pl
) wie folgt erstellen :und verwenden Sie dieses Skript dann wie folgt als root:
Ausfüllen
USERNAME
undDIRECTORY
gegebenenfalls.quelle
Sind Sie sicher, dass dies wirklich die Frage ist, die Sie stellen möchten?
Zu sagen "Ich möchte alle Dateien sehen, in die das X-Konto schreiben kann" bedeutet, dass jede Datei, deren Eigentümer sie sind, mit u + w, jede Datei, die einer Gruppe gehört, zu der sie gehören, g + w festgelegt ist, und jede Dateiewelt beschreibbar ist (o +) w).
Nicht beschreibbar wäre noch schwieriger. Sie sollten besser eine Liste aller Dateien erstellen und dann diejenigen ausschließen, in die sie schreiben können.
quelle
Für Eddies Antwort, wenn Sie einwerfen:
Dann werden auch Verzeichnisse mit Leerzeichen in ihrem Namen durchlaufen.
quelle
In diesem Beispiel verwende ich die gnu find-Syntax für das Flag -perm:
Grundsätzlich - wenn Sie verrückte Erweiterungen wie ACLs wegwerfen, haben Sie 3 Chocies - Eigentümer, Gruppe und "andere" Schreibzugriff. Klingt nach einem Job für eine Schleife.
Es gibt viel Raum, um dies zu optimieren, aber ich überlasse das jemand anderem ... Außerdem kann ich mich nie an alle Details des Findens und Kreuzens von Dateisystemen und an diese Art von Unsinn erinnern. Stellen Sie außerdem sicher, dass die Ausgabe von Gruppen dieselbe ist wie auf meinem Test-Linux-System
Dies ist ein grobes Beispiel dafür, wie Sie Dateien finden, die von einem Benutzer geschrieben werden können. Dies wird ausgeführt, wenn Sie als ein beliebiger Benutzer ausgeführt werden. Wenn Sie es jedoch als Nicht-UID0-Benutzer ausführen, finden Sie nur Dinge in Verzeichnissen, für die der Benutzer, der das Skript ausführt, sowohl Lese- als auch Ausführungsberechtigungen hat.
quelle
Ich bin mir nicht sicher, ob dies der beste Weg ist, sollte aber tun, was Sie fragen:
Schlüssel ist natürlich im
-w
Schalter, der auch negiert werden kannBEARBEITEN: Wenn Sie mehr darüber nachdenken, druckt dieses Skript, was vom aktuellen Benutzer geschrieben werden kann. Es würde offensichtlich für einen bestimmten Benutzer nicht funktionieren.
quelle
Dieser Befehl sollte alle beschreibbaren Verzeichnisse finden. Sie können die Berechtigungen nach Belieben ändern:
quelle