Suche Michael Schröpl -> Verzeichnis auslesen!!!
Christian Heiss
- perl
Hallo Michael,
sorry, bin erst jetzt wieder zurück.
Das ganze hat etwas gedauert!
Du scheinst mir der einzige zu sein, der mich versteht, zumindest es versucht!!!
Also, nochmal zurück zu dem Problem:
Bin mitlerweile schon etwas weiter:
Ich mounte auf der Linux Büchse die Windows-Freigabe mit:
Auf der shell: 'mount -t smbfs -o credentials=/root/mount.txt //<windows/freigabe/ /<mount>/<point>'
Oder via fstab: '//<windows>/<freigabe>/ /<mount>/<point> smbfs credentials=/root/mount.txt'
Das funktioniert wunderbar, ich kann das Verzeichnis auslesen so wie ich will!!!
Nächstes Problem:
Ich will über mein Perlscript jetzt:
Über die %ENV mitgelieferten Daten (z.B. verzeichnis=//server1/verzeichnis1&...) ein Verzeichnis entsprechend /remote/server1/verzeichnis1 anlegen, das Verzeichnis nach /remote/server1/verzeichnis1 mounten, dann auslesen, dann unmounten und dann wieder löschen!
(alles klar?)
Der Hintergrund dafür ist:
Es existieren ca 500 Freigaben, täglich kommen welche weg, andere hinzu, das kann man nicht alles in die fstab eintragen.
Verschiedene Mitarbeiter pflegen die Links entsprechend.
Und die die in der %ENV mitkommen die stimmen!
Mein Problem ist jetzt:
Das Perlscript darf nicht mounten ...
Hab das mit sudo auch schon versucht:
sudo -u root mount -t smbfs -o credentials=/root/mount.txt '//<windows>/<freigabe>/ /<mount>/<point>/
;
Mit sudo klappt das in der shell als user, aber nicht im Perlscript,
???
Kennst dich mit sowas aus?
Hallo,
[... Mounten und unmounten ...]
(alles klar?)
Ja!!1
Mein Problem ist jetzt:
Das Perlscript darf nicht mounten ...
Oh, das Perlscript darf es sicherlich. Aber der User, der das
Perlscript ausfuehrt, darf das wohl eher nicht.
Hab das mit sudo auch schon versucht:
sudo -u root mount -t smbfs -o credentials=/root/mount.txt '//<windows>/<freigabe>/ /<mount>/<point>/
;
Na guck, der richtige Weg.
Mit sudo klappt das in der shell als user, aber nicht im
Perlscript???
Das liegt wohl daran, dass der Webserver unter einer anderen
Benutzerkennung laeuft. Was du also zu tun hast, ist folgendes:
zuerst musst du die Benutzerkennung herausfinden. Das ist oft
'wwwrun' oder einfach schlicht 'www'. Diesen User musst du in die
/etc/sudoers eintragen. Und dann kannst du das Script weiter
schreiben.
Alternativ kannst du dem Perl-Script auch das "Sticky User Bit"
geben -- dann laeuft das ganze Perlscript mit root-Rechten. Dazu
musst du ein 'chmod u+s perlscript' machen und in der Shebang-Zeile
den Interpreter von '/usr/bin/perl' auf '/usr/sbin/suidperl' (wo
genau suidperl liegt, weiss ich jetzt nicht aus dem Kopf -- wirst du
aber sicher herausfinden) aendern. Ich wuerde mir das aber genau
ueberlegen. Denn wenn dein Script dann eine Sicherheitsluecke hat,
ist gleich alles inne Buechs. Ich halte "sudo" fuer die bessere Wahl.
Gruesse,
CK
Hallo,
Das liegt wohl daran, dass der Webserver unter einer anderen
Benutzerkennung laeuft. Was du also zu tun hast, ist folgendes:
zuerst musst du die Benutzerkennung herausfinden. Das ist oft
'wwwrun' oder einfach schlicht 'www'. Diesen User musst du in die
/etc/sudoers eintragen. Und dann kannst du das Script weiter
schreiben.
Alternativ kannst du dem Perl-Script auch das "Sticky User Bit"
geben -- dann laeuft das ganze Perlscript mit root-Rechten. Dazu
musst du ein 'chmod u+s perlscript' machen und in der Shebang-Zeile
den Interpreter von '/usr/bin/perl' auf '/usr/sbin/suidperl' (wo
genau suidperl liegt, weiss ich jetzt nicht aus dem Kopf -- wirst du
aber sicher herausfinden) aendern. Ich wuerde mir das aber genau
ueberlegen. Denn wenn dein Script dann eine Sicherheitsluecke hat,
ist gleich alles inne Buechs. Ich halte "sudo" fuer die bessere Wahl.
Hab das schon versucht,
apache läuft mit: user: wwwrun, group: nogroup
in der sudo steht der wwwrun drin,
der verlangt aber trotzdem beim erstenmal das root passwort???
Grüsse
Christian
Hoi,
Hab das schon versucht,
apache läuft mit: user: wwwrun, group: nogroup
in der sudo steht der wwwrun drin,
Wie genau lautet der Eintrag?
der verlangt aber trotzdem beim erstenmal das root passwort???
Aus 'sudoers(5)':
authenticate
If set, users must authenticate themselves via a password (or
other means of authentication) before they may run commands. This
default may be overridden via the PASSWD and NOPASSWD tags. This
flag is on by default.
Weiterhin:
NOPASSWD and PASSWD
By default, sudo requires that a user authenticate him or herself
before running a command. This behavior can be modified via the
NOPASSWD tag. Like a Runas_Spec, the NOPASSWD tag sets a default for
the commands that follow it in the Cmnd_Spec_List. Conversely, the
PASSWD tag can be used to reverse things. For example:
ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
would allow the user ray to run /bin/kill, /bin/ls, and /usr/bin/lprm
as root on the machine rushmore as root without authenticating
himself.
Mit anderen Worten mit dem Tag 'NOPASSWD' kannst du die
Passwort-Abfrage abschalten:
wwwrun localhost = NOPASSWD: /sbin/mount
Gruesse,
CK
Hoi,
Hab das schon versucht,
apache läuft mit: user: wwwrun, group: nogroup
in der sudo steht der wwwrun drin,
Wie genau lautet der Eintrag?
Hab /etc/sudoers mit visudo editiert und den Eintrag:
root ALL=(ALL) ALL
<b>wwwrun ALL=(ALL) ALL<b>
hinzugefügt!
Jetzt schnall ich gar nix mehr?
Wie soll ich den Eintrag:
wwwrun localhost = NOPASSWD: /sbin/mount
hinzuadden?
Gruß
Christian
Hallo,
Hab /etc/sudoers mit visudo editiert
Kenn ich nicht.
und den Eintrag:
root ALL=(ALL) ALL
<b>wwwrun ALL=(ALL) ALL<b>
hinzugefügt!
Das '<b>' und '</b>' sind falsch. Der Eintrag mit 'wwwrun ALL=(ALL)
ALL' ist ueberigens genau so, als wuerdest du auf deiner
Internet-Seite eine Einladung fuer alle Cracker machen, die da besagt
'Crackt mich!'.
Wie soll ich den Eintrag:
wwwrun localhost = NOPASSWD: /sbin/mount
hinzuadden?
Du sollst ihn gar nicht hinzufuegen, sondern du sollst deinen
'wwwrun ALL=(ALL) ALL' entfernen und durch meinen Eintrag ersetzen.
Aber das 'localhost' musst du noch durch deinen FQDN ersetzen.
Gruesse,
CK
Hola,
Hab /etc/sudoers mit visudo editiert
Kenn ich nicht.
Ist der empfolene Editor für die sudoers
und den Eintrag:
root ALL=(ALL) ALL
<b>wwwrun ALL=(ALL) ALL<b>
hinzugefügt!
Das <b> hat sich auf den Text bezogen, wollte den Eintrag nur als bold markieren!
Das '<b>' und '</b>' sind falsch. Der Eintrag mit 'wwwrun ALL=(ALL)
ALL' ist ueberigens genau so, als wuerdest du auf deiner
Internet-Seite eine Einladung fuer alle Cracker machen, die da besagt
'Crackt mich!'.
Egal, war ja nur zum test, ob da überhaupt was geht!
Wie soll ich den Eintrag:
wwwrun localhost = NOPASSWD: /sbin/mount
hinzuadden?
Du sollst ihn gar nicht hinzufuegen, sondern du sollst deinen
'wwwrun ALL=(ALL) ALL' entfernen und durch meinen Eintrag ersetzen.
Aber das 'localhost' musst du noch durch deinen FQDN ersetzen.
Ok, gemacht,
da steht jetzt drin:
root ALL=(ALL) ALL
wwwrun asterix.datentechnik-moll.de=NOPASSWD: /sbin/mount
Aber in der error log des Apache kommt trotzdem: password, und das mounten geht nicht!
Und wenn ich in der shell als wwwrun ausführe, dann kommt:
wwwrun is not allowed to run sudo on asterix. This incident will be reported.
???
Gruß
Christian
Hallo,
Hab /etc/sudoers mit visudo editiert
Kenn ich nicht.
Ist der empfolene Editor für die sudoers
Empfohlen? Von wem?
Ok, gemacht,
da steht jetzt drin:
root ALL=(ALL) ALL
wwwrun asterix.datentechnik-moll.de=NOPASSWD: /sbin/mount
Aber in der error log des Apache kommt trotzdem: password, und das
mounten geht nicht!
Sicher, dass der FQDN 'asterix.datentechnik-moll.de' ist?
Und wenn ich in der shell als wwwrun ausführe, dann kommt:
wwwrun is not allowed to run sudo on asterix. This incident will
be reported.
???
Denn hier sagt sudo, der FQDN sei 'asterix'. Ansonsten musst du mal
ein wenig mit den Gruppenzugehoerigkeiten rumspielen, kann sein, dass
das sich das bei den Distributionen etwas unterscheidet. Genaueres
kann ich jetzt aber auch nicht sagen -- ich habe hier leider kein
UNIX- oder Linux-System zum testen.
Gruesse,
CK
Hallo,
also, soweit klappt das mit dem mounten jetzt! Mit dem sudors Eintrag!
Musste Ihn allerdings etwas ab ändern auf:
unix-mount ALL=NOPASSWD: /bin/mount, /bin/umount
Den umount brauch ich ebenfalls, da ich den Share ja nur brauche um auszulesen was da drin ist!
Leider wird das Verzeichnis nicht immer gemountet, warum auch immer.
Bekomme Fehlermeldung: smb connection failed
Gruß
Christian
Hallo,
Musste Ihn allerdings etwas ab ändern auf:
unix-mount ALL=NOPASSWD: /bin/mount, /bin/umount
Wie ich ja schon sagte: du musst den richtigen FQDN nehmen.
Leider wird das Verzeichnis nicht immer gemountet, warum auch immer.
Bekomme Fehlermeldung: smb connection failed
Steht doch da: die Verbindung zu dem entsprechenden Share ist
fehlgeschlagen.
Gruesse,
CK