Vergleich von Zugriffsrechten

  • Ersteller Ersteller IT-Sofa
  • Erstellt am Erstellt am
I

IT-Sofa

Gast
Hallo,

wie könnte man zwei Verzeichnisse mit gleichem Inhalt hinsichtlich der Zugriffsrechte miteinander vergleichen?

Beispiel: testdatei.txt

liegt in

Verzeichnis_A/testdatei.txt

und

Verzeichnis_B/testdatei.txt


Wenn sich die Zugriffsrechte der beiden Dateien unterscheiden, soll eine Ausgabe/Meldung erfolgen.
 
Auf Basis welches Systems? AD?

Wenn kein AD für die Verwaltung der Rechte vorliegt, dann herrscht vermutlich absoluter Wildwuchs bei den Rechten und das wird hart zu vergleichen sein. Generell sind Rechte auf Dateiebene immer kritisch und praktisch das unsicherste was man haben kann. Vor allem wenn Personen ohne Gruppen berechtigt wurden.

Generell kann man solche Funktionen in VBA abbilden und es gibt diverse Excelsheets mit Makros die so etwas können.
Da für meine Arbeit die Teile immer teuer in Auftrag gegeben werden, kann ich leider auf nichts kostenloses verweisen.
 
Gemeint ist ein Linux-System (Debian 8) und ein Vergleich mit Bash-Tools oder GUI-Programmen wie Meld.

Vielen Dank für die schnellen Reaktionen aber Tipps in Microsoft-Umgebungen bringen mich hier nicht weiter, sorry.
 
Hab mal ein kleines Script geschrieben. Geht bestimmt noch eleganter, funktioniert aber:
Code:
dir1=
dir2=

for i in "$dir1/"*; do
  p1=$(stat -c %A "$i")
  p2=$(stat -c %A "$dir2/${i##*/}")
  if [[ ! "$p1" == "$p2" ]]; then
    echo "$p1 $i"
    echo "$p2 $dir2/${i##*/}"
  fi
done
 
Nur die klassischen Unix-Zugriffsrechte sollen vergleichen werden? Dann eben diese von jeweils beiden Files ermitteln (stat -c '%A' filename) und die Zeichenketten (sowas wie "-rwsr-xr-x") miteinander vergleichen. Für 2 Verzeichnisse ungefähr so:

#!/bin/bash
verz1=~/bla
verz2=~/blubb
cd $verz1
for i in * ; do
s1=`stat -c '%A' "$i"`
s2=`stat -c '%A' $verz2/"$i"`
[ "$s1" != "$s2" ] && echo ungleich bei: "$i"
done

Ungetestet, aber die Idee kommt hoffentlich rüber. Das funzt so nur, wenn die Files wirklich in beiden Verzeichnisse vorhanden sind. Sonst brauchts noch paar zusätzliche Tests und ggf. die Unterdrückung von Fehlerausgaben der stat-Kommandos.
 
computerfrust schrieb:
Code:
p2=$(stat -c %A "$dir2/${i##*/}")
Was bewirken die Rauten bei ${i##*/} :confused_alt:


mensch183 schrieb:
Ungetestet, aber die Idee kommt hoffentlich rüber
Getestet und funktioniert.

Ich habe das Skript etwas erweitert, so das es auch rekursiv läuft:
Code:
#!/bin/bash
shopt -s globstar nullglob dotglob 

verz1=
verz2=
cd $verz1
for i in **; do
    s1=`stat -c '%A' "$i"`
    s2=`stat -c '%A' $verz2/"$i"`
    [ "$s1" != "$s2" ] && echo ungleich bei: "$i"
done

Wenn man alle Dateien in Verz1 und Verz2 berücksichtigen will, muss man die for-Schleife für beide Verzeichnissen ausführen. Momentan tausche in verz1 und verz2 bei einem zweiten Durchlauf einfach aus - so erhält man eine Übersicht der Dateien, die nur in Verz1 bzw. Verz2 vorhanden sind, und somit nicht geprüft worden sind (der stat gibt in diesem Fall eine Fehlermeldung aus. Geht sicher auch eleganter.).
 
Zuletzt bearbeitet von einem Moderator:
IT-Sofa schrieb:
Was bewirken die Rauten bei ${i##*/} :confused_alt:
Das ist Bashs parameter substitution. Wie der Befehl "basename", nur schneller. Also reiner Dateiname ohne Pfad.
Mit cd wie mensch183 es macht, ist das aber hinfällig.
 
computerfrust schrieb:
Das ist Bashs parameter substitution. Wie der Befehl "basename", nur schneller. Also reiner Dateiname ohne Pfad.
Mit cd wie mensch183 es macht, ist das aber hinfällig.
Okay, danke :)
 
Zurück
Oben