On 12/10/2014 10:01 AM, Alexandre Detiste wrote:
control: tags -1 fixed-upstream

Hi,

I'm still working on this last major bug of systemd-cron.
I thought it had been solved reusing the crontab binary from the cron package - tldr please?

I came up with this setuid helper, that is called by crontab when needed:
https://github.com/systemd-cron/systemd-cron/blob/setuid/src/bin/crontab_setuid.c

I avoided the most obvious pitfalls: string format attacks,
tmp files/symlinks attacks (it uses stdin/stdout to pass crontab data);
and I made it as bare as possible.

Please review it

Alexandre

<annoying>
why a C file in bin/? :)
useradd(1) says username is <= 32 chars, so crontab[256] is ok.
fgets() with short buffers tested ok with glibc & musl, so buffer[512] is ok.
</annoying>

Not checking writes to stdout is probably ok unless you're playing with /dev/full or something like that.

The 'w' option should imho do the equivalent of
    cat > $crontab.new \
    && (chmod,chown as appropriate?) \
    && mv $crontab.new $crontab
It should also check that fclose(file) succeeds (errors in stdio are sticky: after the first error, anything else you do will report an error until you clearerr()).
Rationale for both:
1.people fill /var sometimes
2. power failure at the wrong time should be as harmless as possible (we've had a few here recently due to the rain).


Most importantly: if I understand correctly, the idea is that you have a crontab in python which does its stuff as a normal user and does privileged operations by calling the helper because python setuid is troublesome; but if so, this program never tries to switch id!

(I'm not testing the package on my pc; give me a few hours and I'll dig up the vm I set up for systemd-cron)


--

systemd-cron postinst script needs to do this too:
        chown root:root /var/spool/cron/crontabs
        chmod 770 /var/spool/cron/crontabs



--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to