OVH Community, your new community space.

chown per cron mit und find


aPollO
10.01.11, 18:48
Danke für eure Antworten. Bin zur Zeit im Urlaub, werd mir alles nochmal durchlesen wenn ich wieder zuhause bin.
Bis jetzt arbeitet die einfache methode alles nacheinander zu machen ganz gut.

Isondolos
10.01.11, 13:48
Moin

warum eigentlich find?
Mein Ansatz wär:
Code:
#!/bin/bash
for i in `ls /home/www/user1/`
do
  if [ $i != TOOL -a $i != STATS ]
  then chown -R 10033:10033  /home/www/user1/$i
  fi
done
das könnt ma bei Bedarf auch für n User erweitern:
Code:
#!/bin/bash
for j in `ls /home/www/`
do
  for i in `ls /home/www/$j/`
  do
    if [ $i != TOOL -a $i != STATS ]
    then chown -R 10033:10033  /home/www/$j/$i
    fi
  done
done

derpascal
10.01.11, 08:33
Zitat Zitat von manticore
du führst die 3 befehle einfach hintereinander aus
schreibst dir ein shell script das per cron alle 5 minuten ausgeführt wird

inhalt von "script.sh":

Code:
#!/bin/sh
chown -R 10033:10033 /home/www/user1
chown -R root:root /home/www/user1/TOOL
chown -R www-data:www-data /home/www/user1/STATS
im crontab dann
Code:
*/5 * * * * root /pfad/zum/script.sh
oder spricht da was dagegen?
Moin,

abhängig davon wie groß der Ordern /home/www/user1 ist, hast du kurzzeitig die zwei Ordner mit falschen Rechten. Dies kann u.U. ein Sicherheitsrisiko darstellen, oder Funktionen machen in manchen Monmenten nicht das, was sie sollen. Hab da mal was kleines mit "find" zusammengeklöppelt.

inhalt von "script.sh":

Code:
#!/bin/sh

# Es werden alle Datein und Ordner in "/home/www/user1" aufgelistet
# Die Datei/Ordner "/home/www/user1/TOOL" wird ausgeschlossen
# Die Datei/Ordner "/home/www/user1/STATS" wird ausgeschlossen
# !WICHTIG! Kein '/' am ende anhängen !
# Alle restlichen werden an chown übergeben
# Auf alle Ordner/Datein und unterordner werden die Rechte angewendet
find /home/www/user1 -mindepth 1 -maxdepth 1 | grep -v "/home/www/user1/TOOL" |  grep -v "/home/www/user1/STATS" | xargs chown -R 10033:10033

# Dies kann man weg lassen, wenn sich dort eh nicht ändert.
chown -R root:root /home/www/user1/TOOL
chown -R www-data:www-data /home/www/user1/STATS
im crontab dann
Code:
*/5 * * * * root /pfad/zum/script.sh
Hoffe, ich konnte helfen.

Gruß

derPascal

manticore
06.01.11, 20:17
hallo aPollO
hab von der systemweiten cron tabelle gesprochen. lies dich doch im ubuntuusers wiki ein bisschen ein, das meiste lässt sich auf andere distributionen übertragen falls du debian und co nutzt.

Die systemweite Cron-Tabelle: /etc/crontab

Möchte man jedoch einen Cronjob erstellen, der mit speziellen Rechten ausgeführt werden soll, so bietet es sich an, diesen Job in die systemweite Cron-Tabelle einzutragen. Diese Tabelle unterscheidet sich nicht stark von einer normalen Cron-Tabelle, sie besitzt jedoch noch eine Spalte mehr, in der der Benutzer eingetragen wird, unter dem der jeweilige Befehl ausgeführt werden soll.
http://wiki.ubuntuusers.de/cron

aPollO
06.01.11, 17:03
Zitat Zitat von manticore
du führst die 3 befehle einfach hintereinander aus
schreibst dir ein shell script das per cron alle 5 minuten ausgeführt wird

inhalt von "script.sh":

Code:
#!/bin/sh
chown -R 10033:10033 /home/www/user1
chown -R root:root /home/www/user1/TOOL
chown -R www-data:www-data /home/www/user1/STATS
im crontab dann
Code:
*/5 * * * * root /pfad/zum/script.sh
oder spricht da was dagegen?
Ah danke, doch die Idee hatte ich auch als erstes, habe sie dann aber wieder verworfen, da ich mich noch nie mit Shell Scripts beschäftigt habe, bzw. zwar viel Erfahrung damit habe, allerdings unter Windows (Batch).
Hast du eventuell eine gute Seite mit ein paar Erklärungen oder Beispielen? Ich bringe mir gerne Sachen anhand von nachbauen und umschreiben bei, da mir reine theorie nicht so liegt


Edit: Achso, wofür steht das "root" in deinem Crontab-Beispiel, zwischen der Pfad und der Zeitangabe. Das ist doch unnötig oder?

Vielen Dank

manticore
06.01.11, 02:18
du führst die 3 befehle einfach hintereinander aus
schreibst dir ein shell script das per cron alle 5 minuten ausgeführt wird

inhalt von "script.sh":

Code:
#!/bin/sh
chown -R 10033:10033 /home/www/user1
chown -R root:root /home/www/user1/TOOL
chown -R www-data:www-data /home/www/user1/STATS
im crontab dann
Code:
*/5 * * * * root /pfad/zum/script.sh
oder spricht da was dagegen?

aPollO
05.01.11, 22:59
Hallo Community,

ich möchte ein Cronjob mit Crontab bauen der alle 5min die Ordnerrechte für einen Webuser abgleicht. Der User hat als Benutzernamen (!) 10033, die Gruppe ist die selbe.
Es gibt ja bei chown -R keine weitere option um verzeichnisse auszulassen, jedoch sind in jedem webuser-ordner 2 ordner die ihre benutzerrechte behalten müssen.

Wenn man über Joomla Module installiert haben teilweise einige dateien statt 10033:10033 die own/grp www-data:www-data

Also Beispiel:

/home/www/user1/* soll rekrusiv mit 10033:10033 sein, jedoch
/home/www/user1/TOOL/ soll root:root gehören und
/home/www/user1/STATS/ soll www-data:www-data gehören


Wie löse ich das jetzt am besten? Ich dachte an die option, find mit '-prune' zu benutzen um /home/www/user1/TOOL/ und /home/www/user1/STATS/ auszulassen und den restlichen suchergebnissen dann die entsprechenten Besitzer zuzuteilen.
Wie muss ich die Befehle zusammensetzen? Und werden dabei auch Inhalte der beiden ergebnisse ignoriert?