2020-04-03T08:27:16 RaubtierWas willst du erreichen?
2020-04-03T11:03:54 bianca2020-04-03T08:27:16 RaubtierWas willst du erreichen?
Ich möchte in einer zentralen Konfigurationsdatei die zu verwendenden Werte für Datei intern, Verzeichnis intern, Verzeichnis öffentlich und Datei öffentlich hinterlegen und dann überall in allen sysopen's und mkdir's die jeweils zutreffenden Werte verwenden.
QuoteAußerdem sind Setuid und Setgid doch existenziell für die Sicherheit des Projekts.
QuoteAlso mir geht es shared Webhosting.
Ich möchte zusehen, dass man immer die geringst nötigen Berechtigungen verwendet und sich nicht auf Zufälle verlässt oder wie macht ihr das?
QuoteUnd was hat es mit diesem unmask auf sich? das habe ich gelesen aber verstehe es nicht.
2020-04-03T12:28:44 biancaZu unmask: wofür braucht man das?
2020-04-03T07:39:45 biancaDa gleich mal eine Warnung: Linux und Windows sind völlig verschieden, und es hängt auch noch vom verwendeten Dateisystem ab. Über Windows nur soviel: Es gibt Perl-Module zum Steuern der Zugriffsrechte wie Win32::FileSecurity, aber wenn Du nicht schon mit anderen Windows-APIs sowas bearbeitet hast, dann wird Dir deren knappe Dokumentation wohl kaum ausreichen.Was ist best practice im Umgang mit den Dateiberechtigungen bei sysopen() und mkdir() auf Linux und Windows?
2020-04-03T07:39:45 biancaDas kann ich nachvollziehen. Für mich waren Oktalzahlen schon immer ziemlich hoch auf der Nerdometer-Skala, insbesondere die Schreibweise mit der führenden Null.Ich komme mit diesen oktalen Werten immer nicht nicht richtig zurecht. Besonders nicht mit Setuid, Setgid und Sticky Bit.
2020-04-03T07:39:45 biancaNicht ganz in dieser Weise, aber analog zu O_RDWR kann man - ebenfalls mit Fcntl - mysteriöse benannte Konstanten verwenden. Diese Konstanten importierst Du mit use Fcntl qw/:mode/; und Du kannst sie dann für den ganzen Zirkus der Funktionen verwenden.Verstanden habe ich deren Bedeutung aber die Syntax bereitet Probleme.
Gibt es vielleicht ein Core Modul oder ähnliches wo ich quasi die Kreuzchen setze und den richtigen Wert zur direkten Verwendung in sysopen() zurück bekomme? Also z. B. sowas wie sysopen my $dh,$dn,O_RDWR|O_EXCL|O_CREAT,berechtigung('rwxrwsr-x')?
1 2 3 4 5 6
use Fcntl; my @constants = grep { /^S_I/ && eval { Fcntl->$_ } } keys %Fcntl::; my %values = map { $_ => Fcntl->$_ } @constants; for (sort { $values{$a} <=> $values {$b} } keys %values) { printf "%-8s = %07o\n", $_, $values{$_}; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
S_IXOTH = 0000001
S_IWOTH = 0000002
S_IROTH = 0000004
S_IRWXO = 0000007
S_IXGRP = 0000010
S_IWGRP = 0000020
S_IRGRP = 0000040
S_IRWXG = 0000070
S_IEXEC = 0000100
S_IXUSR = 0000100
S_IWRITE = 0000200
S_IWUSR = 0000200
S_IRUSR = 0000400
S_IREAD = 0000400
S_IRWXU = 0000700
S_ISGID = 0002000
S_ISUID = 0004000
2020-04-04T10:44:17 GwenDragonMuss du wissen wie die auf deinem Server sind.
2020-04-04T14:39:15 biancaEs kommt immer permission denied. Und in der Kontrollausgabe print "Datei '$dateiname' mit $datber" sehe ich dann sowas: Datei '/home/abc/xyz/testverzeichnis2/testdatei1.txt' mit 384
Wo kommt dieses "384" her? Das ist doch gar nicht im Array vorhanden!? Was ist denn da an meiner Syntax falsch?
perl -E 'printf "%04o",384'
0600
QuoteScriptprozess:
PID: 681
UID: 100015592
GID: 100015592 100015592
umask: 0007 angezeigt mit sprintf("%04o",umask)
Wurzelverzeichnis: /home/abc/xyz (Testdatei war: testdatei1.txt)
UID: 100015592
GID: 100015592
2020-04-05T09:05:38 hajGeht es Dir um die Dateien, die Du im Skript anlegst oder um solche, die Du per FTP überträgst und dann per Skript weiterbearbeitest - oder um das Skript selbst?
1
2
3
4
5
6
7
8
9
10
-----------------------------------------
| nicht | öffentlich |
| öffentlich | |
-----------------------------------------
Scripte | | |
-----------------------------------------
Dateien | | |
-----------------------------------------
Verzeichnisse | | |
-----------------------------------------
2020-04-05T09:05:38 hajSobald Dein Skript mal gestartet ist (also zum Beispiel fehlerfrei kompiliert - dafür brauchst Du dann 0640 für Deine Bibliotheken)
2020-04-05T20:13:47 bianca2020-04-05T09:05:38 hajSobald Dein Skript mal gestartet ist (also zum Beispiel fehlerfrei kompiliert - dafür brauchst Du dann 0640 für Deine Bibliotheken)
Ist das ein Beispiel oder wo ist die 0640 her?
2020-04-06T06:09:40 biancaMit dieser Zeile hier: my @berechttest = (0644,0755);foreach my $test (@berechttest){sysopen my $fh,"$ENV{DOCUMENT_ROOT}/test$test.txt",O_RDWR|O_EXCL|O_CREAT,$test;} bekommen die Dateien 0640 und 0750, wenn ich das per FTP anschaue. Warum? Warum nicht 0644 und 0755?
1
2
3
4
5
6
7
8
9
110 010 010
&& ~(000 000 111)
=
110 010 010
&& 111 111 000
=
110 010 000
= in oct
6 4 0
QuoteMit my @berechttest = ('0644','0755');foreach my $test (@berechttest){sysopen my $fh,"$ENV{DOCUMENT_ROOT}/test$test.txt",O_RDWR|O_EXCL|O_CREAT,$test;} (...) wird das immer schlimmer.
2020-04-06T06:09:40 biancaDas heißt, du würdest sysopen und mkdir ohne Angabe der Berechtigungen nutzen? Würde in diesem Fall bedeuten, dass Dateien 0660 bekommen. OK das ginge.
2020-04-06T06:09:40 biancaAber wie genau ist das jetzt mit umask? Was macht das genau?
2020-04-06T06:09:40 biancaWofür genau hatte ich die ganzen Id's ermittelt?
Wie komme ich denn jetzt zu einem Script, dass diese ganzen Schritte für mich macht?
2020-04-06T06:09:40 biancaKann mit bitte jemand sagen, wie die Syntax für sysopen lauten muss, wenn ich die Berechtigung aus einer Variable beziehe. if (sysopen my $dath,$dateiname,O_RDWR|O_EXCL|O_CREAT,$datber) {...} geht ja nicht. Aber wie muss in dieser Zeile der Parameter $datber richtig lauten, damit die Datei z. B. mit 755 angelegt wird?
2020-04-06T06:09:40 biancaMit dieser Zeile hier: my @berechttest = (0644,0755);foreach my $test (@berechttest){sysopen my $fh,"$ENV{DOCUMENT_ROOT}/test$test.txt",O_RDWR|O_EXCL|O_CREAT,$test;} bekommen die Dateien 0640 und 0750, wenn ich das per FTP anschaue. Warum? Warum nicht 0644 und 0755?
2020-04-06T06:09:40 biancaIn den Dateinamen steht 420 und 493. Warum? Wieso macht Perl aus 0644 im String eine ganz andere Zahl? Ist das allein wegen der führenden Null in der Definition? Hat das seine Richtigkeit? Ist das in anderen Sprachen auch so? Ich bin darüber eigentlich ziemlich erschrocken, was man im Dezimalsystem mit einer führenden Null anrichten kann.
perl -E "say 'Die Zahlen sind gleich' if 0644 == 420"
2020-04-06T06:09:40 biancaMit my @berechttest = ('0644','0755');foreach my $test (@berechttest){sysopen my $fh,"$ENV{DOCUMENT_ROOT}/test$test.txt",O_RDWR|O_EXCL|O_CREAT,$test;} bekommen sie S200 und S360??
2020-04-06T06:09:40 biancaUnd mit my @berechttest = ('0644','0755');foreach my $test (@berechttest){sysopen my $fh,"$ENV{DOCUMENT_ROOT}/test$test.txt",O_RDWR|O_EXCL|O_CREAT,sprintf("%04o",$test);} kommt G260 und G520 raus. Für mich wird das immer schlimmer.
2020-04-06T10:42:14 biancaDanke Raubtier und haj! Jetzt gab es ein paar mal ein AAHH! Sorry für die Fragerei aber dieses Verhalten mit der führenden Null kannte ich nicht. Ich habe Programmieren auch nie als Beruf gelernt. Alles nur autodidaktisch oder wie sagt man dazu?
2020-04-06T10:42:14 biancaLetzte Frage: ich habe in den Scripten jetzt an hunderten Stellen in zig Bibliotheken sysopen und mkdir mit Berechtigungen. Wenn ich das nicht alles ändern aber trotzdem ab sofort ohne Berechtigungen arbeiten möchte, wie kann ich die Variablen belegen, um das so zu sagen funktionslos machen?
2020-04-05T22:56:19 hajAnsonsten verhindert die umask, dass Dateien, die Deine CGI-Prozesse anlegen, "öffentlich" sind - aber mir ist nicht mal klar, was Du mit "öffentlich" meinst. Hat denn da die Öffentlichkeit Zugang?
2020-04-05T22:56:19 hajSomit können andere Kunden nicht in Deine Dateien gucken, wenn Du sie nicht explizit "für alle" aufmachst.
2020-04-06T06:20:41 bianca2020-04-05T22:56:19 hajSomit können andere Kunden nicht in Deine Dateien gucken, wenn Du sie nicht explizit "für alle" aufmachst.
Und weil ich das niemand anderem überlassen möchte haben in meinen Scripten immer alle sysopen's und mkdir's den Parameter für die Berechtigungen angegeben. Ich muss jetzt nur noch einen Weg finden, dessen einmalige Definition automatisch zu finden, damit ich bei einem Wechsel des Hosters nicht immer alles manuell per FTP durchprobieren muss. Und dafür bitte ich um Hilfe.