Toon posts:

[linux] bash script fetchmail

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb het volgende bash-script

code:
1
2
3
4
5
6
7
#!/bin/bash
cut -d: -f1 /etc/passwd | while read USERNAME
do
if [ -f ~"$USERNAME"/.fetchmailrc ]; then
    su - ${USERNAME} -c "fetchmail -a  -f ~/.fetchmailrc"
fi
done


dit script zou voor iedere gebruiker die het bestand .fetchmailrc in zijn home dir heeft staan een commando uit moeten voeren. Het while loopje voor alle gebruikers gaat goed, echter de if clause wordt niet uitgevoerd, terwijl ik toch wel goed kijk of het bestand bestaat?

Kan iemand dit oplossen? Alvast bedankt.

  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
Wordt de tilde wel ge-expand? Als je (als test) nou /home/ gebruikt?

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


Verwijderd

1) $USERNAME is leeg
2) zet die then op de volgende regel en haal de ; weg.

Verwijderd

Je gaat toch niet elke regel van /etc/passwd lezen?
Daar staat ontzettend veel in wat niets met mailusers te maken heeft.
Doe dan een 'ls -1' van je /home o.i.d.

Verwijderd

en waarom
#!/bin/bash
en niet
#!/bin/sh

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op dinsdag 27 september 2005 @ 22:20:
en waarom
#!/bin/bash
en niet
#!/bin/sh
Waarom zou je onverwachte problemen veroorzaken door bash in een-of-andere compabiliteitmodus te dwingen?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Verwijderd schreef op dinsdag 27 september 2005 @ 22:20:
en waarom
#!/bin/bash
en niet
#!/bin/sh
Neeeee, doe dat nou niet. 90% van de mensen die in linux #!/bin/sh bovenaan een script zet gebruikt bash-specifieke extensies, zodat het niet werkt als mensen een echte /bin/sh hebben. Aan de andere kant is er bij mijn weten geen enkele reden om dat er /wel/ te zetten als je toch met bash bezig bent.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op dinsdag 27 september 2005 @ 22:19:
Je gaat toch niet elke regel van /etc/passwd lezen?
Daar staat ontzettend veel in wat niets met mailusers te maken heeft.
Doe dan een 'ls -1' van je /home o.i.d.
Een user hoeft zijn home dir helemaal niet in /home te hebben, gebeurt vaak voor het overzicht om user te groeperen, of als je je home directories wilt verspreiden over meerdere mount points of wat dan ook, dus er van uit gaan dat ze allemaal in /home zitten ;)
Kwa verwerkingstijd zal het denk ik niet zo heel veel uitmaken, zeker niet als je eerst checked of het een normale user is of niet (bijvoorbeeld door een grep op je /etc/passwd om te kijken of er een valid shell ingevoerd is)

Verwijderd

blaataaps schreef op dinsdag 27 september 2005 @ 22:22:
[...]
Neeeee, doe dat nou niet. 90% van de mensen die in linux #!/bin/sh bovenaan een script zet gebruikt bash-specifieke extensies, zodat het niet werkt als mensen een echte /bin/sh hebben. Aan de andere kant is er bij mijn weten geen enkele reden om dat er /wel/ te zetten als je toch met bash bezig bent.
Neeeee heb ik het jaren verkeerd gedaan in de volle overtuiging dat het goed was wat ik deed, maar nu blijkt het fout te zijn!
Wat heeft mijn leven nu nog voor zin :'(
Ik kruip maar onder de wol zodat ik vroeg over straat kan om niet uitgelachen te worden..

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op dinsdag 27 september 2005 @ 22:31:
[...]

Neeeee heb ik het jaren verkeerd gedaan in de volle overtuiging dat het goed was wat ik deed, maar nu blijkt het fout te zijn!
Wat heeft mijn leven nu nog voor zin :'(
Ik kruip maar onder de wol zodat ik vroeg over straat kan om niet uitgelachen te worden..
Dit had je ook eenvoudigweg zelf uit kunnen vinden door eens een `ls` te doen op je /bin/sh om er vervolgens ongetwijfeld achter te komen dat dit een symlink is naar bash. ;)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Spider.007 schreef op dinsdag 27 september 2005 @ 22:35:
[...]


Dit had je ook eenvoudigweg zelf uit kunnen vinden door eens een `ls` te doen op je /bin/sh om er vervolgens ongetwijfeld achter te komen dat dit een symlink is naar bash. ;)
Daaraan kan je niet zien waarom het "fout" is ;)

  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op dinsdag 27 september 2005 @ 22:17:
1) $USERNAME is leeg
2) zet die then op de volgende regel en haal de ; weg.
Tenzij ik 'm even helemaal mis,

1) Nee die is niet leeg, zie 'read USERNAME' statement op de regel ervoor
2) Dat maakt geen enkel verschil, de betekenis is exact hetzelfde.

Ik zou zelf gokken dat het ligt aan die constructie met de tilde (~), misschien moet je toch eens proberen of het beter werkt met /home/ op die plek, want zo op het eerste gezicht zie ik verder ook niet wat er mis mee is :)

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Wilke schreef op woensdag 28 september 2005 @ 09:39:
Ik zou zelf gokken dat het ligt aan die constructie met de tilde (~), misschien moet je toch eens proberen of het beter werkt met /home/ op die plek, want zo op het eerste gezicht zie ik verder ook niet wat er mis mee is :)
dan zou ik het eerder zo doen:

Bash:
1
2
3
4
5
6
7
8
#!/bin/bash

gawk '{ FS=":";print $1" "$6;}' /etc/passwd | while read USERNAME HOMEDIR
do
if [ -f ${HOMEDIR}/.fetchmailrc ]; then
    su - ${USERNAME} -c "fetchmail -a  -f ${HOMEDIR}/.fetchmailrc"
fi
done

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Ik zou zelf ook niet graag zo'n script loslaten op al mijn accounts. Het is gewoon een extra mogelijkheid voor een eventuele hacker.
Je kunt met een grep op /etc/passwd een selectie maken van users waarvoor je fetchmail wilt runnen. Met bijvoorbeeld:
code:
1
grep "^[[:alpha:]]*:x:[[:digit:]]*:100:.*" /etc/passwd | cut -d : -f 6

selecteer je uses met groups ID 100 (=users op de meeste systemen). Vervolgens haal je met cut de homedir van deze users er uit. Als je niet op basis van de primaire groep wilt selecteren kan je ook een extra groep aanmaken en je script /ets/group laten parsen.

edit:

Het kan altijd mooier (zie hierboven)

[ Voor 7% gewijzigd door Sir Isaac op 28-09-2005 09:55 ]


Verwijderd

Topicstarter
hiermee is mijn probleem niet opgelost: als ik een 'echo $USERNAME' boven de if plaats, echo'd hij wel de namen. Als ik vervolgens met mijn if -f het bestaan controleer van het betreffende bestand in de homedir vindt hij nergens iets, terwijl deze toch echt in mijn userdir staat. Het uitlezen van users is hier het probleem niet, gezien dit altijd nog netter gemaakt kan worden maar voor nu (lijkt) te werken

Verwijderd

Het ligt inderdaad aan de tilde, als ik 'm op mijn systeem uitvoer, werkt het alleen als ik de ~ vervang door /home/.
Overigens erg handig voor dit soort problemen: "set -x", zet dat ergens bovenaan in je script en je ziet direct wat er fout gaat...

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op woensdag 28 september 2005 @ 20:53:
hiermee is mijn probleem niet opgelost: als ik een 'echo $USERNAME' boven de if plaats, echo'd hij wel de namen. Als ik vervolgens met mijn if -f het bestaan controleer van het betreffende bestand in de homedir vindt hij nergens iets, terwijl deze toch echt in mijn userdir staat. Het uitlezen van users is hier het probleem niet, gezien dit altijd nog netter gemaakt kan worden maar voor nu (lijkt) te werken
en wat als je "mijn" scriptje gebruikt?

  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:54
Sir Isaac schreef op woensdag 28 september 2005 @ 09:53:
Ik zou zelf ook niet graag zo'n script loslaten op al mijn accounts. Het is gewoon een extra mogelijkheid voor een eventuele hacker.
Op welke manier? Ik zie dit niet echt in, maar misschien bedoel je als het iemand (een hacker) lukt om een directory te maken in /home en daar dan een 'vreemde' .fetchmailrc in te zetten?

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Je ziet het dus toch wel in? Ik geef toe dat tegen de tijd dat een hacker een dir in home kan maken je sowieso een probleem heeft. Aan de andere kant hebben niet alle accounts hun home dir in /home. In /var/run kan je met een gehackte daemon misschien nog een account maken. Diverse daemon accounts hebben een homedir onder /var/run.
Je moet geen risico's lopen die je kunt vermijden.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Sir Isaac schreef op woensdag 28 september 2005 @ 23:12:
Je ziet het dus toch wel in? Ik geef toe dat tegen de tijd dat een hacker een dir in home kan maken je sowieso een probleem heeft. Aan de andere kant hebben niet alle accounts hun home dir in /home. In /var/run kan je met een gehackte daemon misschien nog een account maken. Diverse daemon accounts hebben een homedir onder /var/run.
Je moet geen risico's lopen die je kunt vermijden.
Als een "hacker" al dergelijke toegang kan krijgen tot je systeem dan ben je erg nalatig geweest, en moet je sowieso je bak opnieuw installeren. Ik zie niet in hoe deze hacker dankzij dit script binnen kan komen, zodra dat kan heb je of een nalatige user met te veel rechten, of heb je je systeem/daemons niet gepatched. Dit scriptje doet imo geen afbreuk aan de security zeker daar het de commando's alleen als de betreffende user uitvoerd.
Pagina: 1