Dateininfomationen verändern
Slaughter
- perl
Hallo,
gibt es eine Möglichkeit die Dateiinformationen, wie z.B. das Datum der letzten Änderung, über Perl zu beeinflussen?
z.B.:
vorher: datei1.txt -> Geändert am = 01.01.2008 12:25:33
nachher: datei1.txt -> Geändert am = 31.12.2007 12:00:00
Vielen Dank für Eure Hilfe
Slaughter
Hi Slaughter!
Hier ein Lösungsvorschlag unter Linux:
Zunächst solltest du wissen, ob es deine eigene Datei ist (wegen Zugriffsrechten); nein => lies von Anfang an; Ja => lies ab 2b.
1. den Befehl "/usr/bin/touch" in die /etc/sudoers eintragen
2a. unter perl system("/usr/bin/sudo /usr/bin/touch '{dateiname}' -d yyyy-mm-dd")
ODER:
2b.unter perl system("/usr/bin/touch '{dateiname}' -m -d yyyy-mm-dd")
{dateiname} ist durch den Namen deiner Datei zu ersetzen
yyyy-mm-dd ist ein Datum, z.B. 2008-01-21 (für Zeit gibt's die Option -t, einfach mal man touch lesen)
Welche Sicherheitsrisiken sich aus der ersten Variante ergeben, ist mir derzeit nicht klar, sollte aber noch vorsichtig geprüft werden (weil der "webuser" u.U. dann auch Systemdateien in die Zukunft datieren kann, was zu Problemen führen könnte).
Grüße,
Richard
Moin Moin!
Hier ein Lösungsvorschlag unter Linux:
Zunächst solltest du wissen, ob es deine eigene Datei ist (wegen Zugriffsrechten); nein => lies von Anfang an; Ja => lies ab 2b.
- den Befehl "/usr/bin/touch" in die /etc/sudoers eintragen
Davon würde ich dringend abraten:
sudo /usr/bin/touch /etc/nologin
Viel Spaß!
2a. unter perl system("/usr/bin/sudo /usr/bin/touch '{dateiname}' -d yyyy-mm-dd")
ODER:
2b.unter perl system("/usr/bin/touch '{dateiname}' -m -d yyyy-mm-dd")
Was glaubst Du, was touch macht? Richtig, die utime()-Funktion aufrufen. Das kann Perl auch selbst, dafür muß man keinen Subprozess starten.
Welche Sicherheitsrisiken sich aus der ersten Variante ergeben, ist mir derzeit nicht klar
Warum schlägst Du das dann überhaupt vor?
Alexander
Hi Alexander!
Warum schlägst Du das dann überhaupt vor?
Weil mir Dein Vorschlag nicht bekannt war, ich aber einen mir bekannten nennen wollte UND dabei sogar noch auf das mögliche (mir ebenfalls nicht genau bekannte) Risiko hingewiesen hab, das durch geeignete Prüfungen ja behoben werden kann.
Außerdem weiß ich nicht, wie das Dingen eigesetzt wird; für eine Intranetlösung z.B. ist der Sicherheitsaspekt relativ egal.
Grüsse,
Richard
Moin Moin!
Außerdem weiß ich nicht, wie das Dingen eigesetzt wird; für eine Intranetlösung z.B. ist der Sicherheitsaspekt relativ egal.
Man sagt, 75% bis 90% aller Angriffe kämen von innen ... -- und selbst wenn es nur 30% wären, wäre es noch schlimm genug. Und wenn das Ding denn doch im Internet steht?
Alexander
Hallo,
erstmal vielen Dank für die Antworten.
Hier habe ich mal eine funktionerende Lösung zusammengefasst, welche zumindest unter Windows das Änderungsdatum auf den Wert(31.12.2007 00:00:00) zurücksetzt.
#!/d:/perl/bin/perl.exe -w
use strict;
use Time::Local;#Wandlet UNIX-Zeitstempel in LOCALTIME um.
my $datei = 'd:/test.txt';
my $start=timelocal(0, 0, 0, 31, 11, 2007 );
print "Unix: $start \n Zeitstempel: " . localtime($start) . "\n";
#$ergebnis=utime (Lesezeitneu,Schreibzeitneu,@Dateien);
#$ergebnis=utime (Lesezeitneu,Schreibzeitneu,$Datei);
my $erg = utime($start,$start,$datei);
if ($erg == 1){
print "OK";
}
else {
print "Fehler";
}
Gruß
Slaughter
Hi Alexander!
Man sagt, 75% bis 90% aller Angriffe kämen von innen ... -- und selbst wenn es nur 30% wären, wäre es noch schlimm genug. Und wenn das Ding denn doch im Internet steht?
Den inneren Feind bekämpfen - schwierig, sowas...
Aber wenn es Probleme gibt, dann mach ich es mir verdammt einfach denn (quote Original):
»»Welche Sicherheitsrisiken sich aus der ersten Variante ergeben, ist mir derzeit nicht klar, sollte aber noch vorsichtig geprüft werden
Grüsse,
Richard